# parsi-mcp

MCP server for Persian/Iranian apps: Jalali calendar, validators, Persian text, price inputs, RTL frontend tools

- **Type:** MCP server
- **Trust:** 40/100 (C), scored on the package rubric
- **Verification:** community-indexed — nobody has claimed this listing
- **Version:** 0.3.0
- **Author:** Amir Hossein
- **License:** MIT
- **npm:** parsi-mcp
- **Source:** https://github.com/amirjld/parsi-mcp
- **Compatible clients:** claude-code, cursor, copilot, gemini (basis: transport)

## Trust

40/100 (C), scored on the package rubric
- Publisher verified: no
- Install scripts: suspicious script found
- Prompt-injection scan: not run
- Obfuscation scan: not run
- Evidence age: 1 day

## Security scan

- **Status:** warnings
- **Scanned:** 2026-10-22T07:30:25.859Z
- **Version scanned:** 0.3.0
- **CVEs:** none found by OSV at scan time
**Findings**
- injection-shaped content (warning) in the `persian_ordinal` tool: Invisible Unicode characters (zero-width / direction override)

## Tools

40 declared. Statically extracted from the shipped source — a floor on the surface, not a census.
- `gregorian_to_jalali` — Convert a Gregorian date to the Jalali (Persian) calendar.
- `jalali_to_gregorian` — Convert a Jalali (Persian) date to the Gregorian calendar.
- `jalali_year_info` — Leap-year status and month length for a Jalali year.
- `validate_national_id` — Validate an Iranian national ID (code melli) using its checksum.
- `validate_card_number` — Validate a 16-digit Iranian bank card number (Luhn).
- `validate_sheba` — Validate an Iranian Sheba (IBAN) number.
- `normalize_mobile` — Validate and normalize an Iranian mobile number to 09xxxxxxxxx.
- `normalize_persian_text` — Normalize Arabic letter variants to Persian, clean spacing, and convert digits to Persian.
- `to_persian_digits` — Convert any digits in a string to Persian digits.
- `number_to_persian_words` — Write a non-negative integer in Persian words, e.g. for invoices.
- `convert_rial_toman` — Convert between rial and toman (1 toman = 10 rial).
- `bank_from_card` — Identify the Iranian bank from a card number (first 6 digits / BIN).
- `bank_from_sheba` — Identify the Iranian bank from a Sheba (IBAN) number (3-digit bank code).
- `mobile_operator` — Detect the mobile operator (MCI/Irancell/Rightel) of an Iranian mobile number.
- `landline_province` — Find the province of an Iranian landline number from its area code.
- `validate_postal_code` — Validate an Iranian 10-digit postal code.
- `persian_words_to_number` — Convert Persian number words to a number, e.g. 'دویست و پنجاه هزار' -> 250000.
- `format_jalali_date` — Format a Jalali date. Tokens: YYYY YY MMMM MM M DD D dddd.
- `parse_jalali_date` — Parse text like '1403/05/09', '۱۴۰۳-۵-۹' or '9 مرداد 1403' into a Jalali date.
- `jalali_add` — Add days, months and/or years to a Jalali date (month overflow clamps to month length).
- `jalali_diff` — Days between two Jalali dates plus a Persian relative description.
- `slugify_persian` — Create a URL slug from Persian/Latin text.
- `sanitize_persian_text` — Fix ZWNJ (half-space) for می/نمی and plural suffixes, Persian punctuation and spacing, Arabic letter variants.
- `calculate_vat` — VAT helper. Rate (percent) must be supplied. mode 'exclusive' = amount excludes tax, 'inclusive' = amount includes tax.
- `format_number_grouped` — Group digits in threes (200000 -> 200,000 or ۲۰۰٬۰۰۰). Accepts Persian/Arabic digits.
- `parse_grouped_number` — Strip separators and Persian/Arabic digits to a clean number, e.g. '۲۰۰٬۰۰۰' -> '200000'.
- `price_to_persian_words` — Amount in Persian words with unit, e.g. 200000 toman -> 'دویست هزار تومان'. Toman may have one decimal digit (tenths = rials).
- `price_input_snippet` — Ready-to-use RTL-friendly price input code: digit grouping while typing with caret preserved, live Persian words (aria-live), raw value submission. variant 'cor
- `rtl_guidelines` — Full RTL frontend guidelines for Persian/Arabic UIs (also available as prompt and resource 'rtl-frontend-guidelines').
- `rtl_audit_css` — Scan CSS/HTML/JSX/Tailwind text for LTR-only patterns (margin-left, ml-4, text-align:left, float:left, left/right, forced ltr, directional icons...) and suggest
- `rtl_convert_css` — Convert physical CSS (and React style objects) to logical properties.
- `rtl_convert_tailwind` — Convert Tailwind physical utilities to logical ones (ml-4 -> ms-4, pr-2 -> pe-2, text-left -> text-start).
- `rtl_starter_snippet` — Minimal RTL-ready setup for html, css, tailwind, nextjs, react or vue.
- `persian_relative_time` — Persian relative time like '۳ روز پیش' or '۲ ساعت دیگر'. Pass an ISO timestamp; 'now' defaults to the current time. Months = 30 days, years = 365 days.
- `jalali_month_grid` — Calendar grid for a Jalali month (for date-pickers): weeks of 7 cells with day number, Gregorian date and Friday flag; null cells pad the edges. Default week st
- `jalali_period_range` — Start/end (Jalali and Gregorian) of the Jalali day, week (Saturday-Friday), month, quarter (season) or year containing a date. Use for reports and finance perio
- `persian_ordinal` — Persian ordinal words: 3 -> سوم, 21 -> بیست و یکم, 30 -> سی‌ام. 1 gives اول (set firstAsYekom for یکم).
- `persian_fuzzy_search` — Fuzzy-match a query against candidate strings, treating Arabic/Persian letter variants (ي/ی, ك/ک, آ/ا), diacritics, ZWNJ and digit styles as equal. Returns rank
- `persian_sort` — Sort strings in Persian alphabetical order (ا ب پ ت ... ی). Digits first (numeric), then Persian, then Latin. Ignores ZWNJ and Arabic/Persian letter variants.
- `fix_keyboard_layout` — Fix text typed with the wrong keyboard layout using the standard Iranian layout (ISIRI 9147): 'sghl' -> 'سلام', and Persian typed on English back to Latin. dire

## Install

**Verdict: do-not-install** — Do not install: 1 injection-shaped pattern found in this entry's own text — it may try to steer the model that loads it.
**Blocking**
- 1 injection-shaped pattern found in this entry's own text — it may try to steer the model that loads it. — tool:persian_ordinal: Invisible Unicode characters (zero-width / direction override)
**Cautions** (coverage gaps and advisories — never blocking)
- No publisher has proved control of this listing; it is indexed, not vouched for.
**Client configuration withheld.** Client configs are withheld because this entry has a blocking finding. Show the warnings below to the person installing it.
If they have seen the findings and still want to proceed, request the plan again with acknowledge_warnings=true.

## Blast radius

Contained to moderate — no credential declaration found, from the publisher, the upstream registry, or the README. Known so far: runs on your machine; read-only tool surface.
- Floor 13, ceiling 31 (tier: unknown)
- `unknown` means the floor and ceiling land in different bands — not measured enough to name one. It does not mean low.
- This is impact, not likelihood. A high radius is not a defect: a filesystem server is supposed to write files. It is never part of the trust score.

## Machine-readable views of this entry

- Signed JSON: https://forgeregistry.com/api/v1/packages/parsi-mcp
- Install plan: https://forgeregistry.com/api/v1/packages/parsi-mcp/install-plan
- Alternatives: https://forgeregistry.com/api/v1/alternatives/parsi-mcp
- HTML page: https://forgeregistry.com/registry/parsi-mcp
- MCP: POST https://forgeregistry.com/api/mcp → `forge_get_package` / `forge_install_plan`

## About this document

Generated by Forge (https://forgeregistry.com) — a compact rendering of the same record served, signed, at the JSON URL above. Trust and scan facts are the registry's own measurements; anything Forge did not measure is named as unmeasured rather than omitted.
