MCP.Market

Parsi MCP server

by amirjld·io.github.amirjld/parsi-mcp·v0.3.0·5 stars

Offline Persian/Iran tools: Jalali dates, validators, Persian text, price inputs, RTL frontend.

A92/100grade A
What users say
No reviews yet
Be the first
Safety scan
A92/100

full report

Adoption
Growing

5 stars41 downloads/wk

Reviews

Write one

Nobody has reviewed Parsi MCP yet.

If you have run it, two minutes of your experience saves the next person an afternoon.

Parsi MCP tools (56, 3 write)

write = sends, deletes, buys or posts

Read from the package source without running it. The installed server may list more.

  • 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).

  • calculate_vat

    VAT helper. Rate (percent) must be supplied. mode 'exclusive' = amount excludes tax, 'inclusive' = amount includes tax.

  • convert_rial_toman

    Convert between rial and toman (1 toman = 10 rial).

  • csv_export_safe

    Build Excel/Sheets-safe CSV from rows: UTF-8 BOM, correct quoting, Persian digits in numeric cells converted to ASCII so Excel treats them as numbers, formula-injection guard, warnings for digit strings Excel may corrupt.

  • decimal_to_persian_words

    Decimals, percents and fractions in Persian words: '12.5' -> 'دوازده ممیز پنج دهم', percent adds درصد, fraction '3/4' -> 'سه چهارم'.

  • detect_text_direction

    Detect text direction (first-strong and dominant script, mixed flag) and optionally wrap the text bidi-safely: Unicode isolates (FSI/RLI/LRI) or HTML <bdi> / dir=auto. Use for usernames, product names and mixed Persian/English strings.

  • 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. direction 'auto' picks by script.

  • format_iran_phone

    Display formats for an Iranian mobile (0912 345 6789, +98 912 345 6789, E.164) or landline (021-12345678). Accepts Persian digits, +98, 0098.

  • format_jalali_date

    Format a Jalali date. Tokens: YYYY YY MMMM MM M DD D dddd.

  • format_number_grouped

    Group digits in threes (200000 -> 200,000 or ۲۰۰٬۰۰۰). Accepts Persian/Arabic digits.

  • format_short_number

    Short Persian number form: 2500000 -> '۲٫۵ میلیون', 1200 -> '۱٫۲ هزار' (style 'latin' gives 2.5M). Optional unit like تومان.

  • gregorian_to_jalali

    Convert a Gregorian date to the Jalali (Persian) calendar.

  • iran_business_days

    Business-day helper: op 'is_business_day', 'add' (days may be negative) or 'count' (days after 'date' up to and including 'to'). Weekend is Friday (optionally Thursday too); supply holidays yourself or enable the fixed solar ones.

  • iran_holidays

    Fixed solar-calendar public holidays of a Jalali year (Nowruz 1-4 Farvardin, 12-13 Farvardin, 14-15 Khordad, 22 Bahman, 29 Esfand) with Gregorian dates, plus the Hijri-based holiday list WITHOUT dates. Lunar holidays shift yearly and need the official annual calendar.

  • iran_provinces

    List Iran's 31 provinces with ISO 3166-2 code, Persian/English names and capital. Optional query matches Persian or English names (letter-variant tolerant).

  • jalali_add

    Add days, months and/or years to a Jalali date (month overflow clamps to month length).

  • jalali_age

    Age (years, months, days, total days) from a Jalali birth date. asOf defaults to today.

  • jalali_diff

    Days between two Jalali dates plus a Persian relative description.

  • 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 starts Saturday.

  • 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 periods instead of Gregorian date libraries.

  • 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.

  • landline_province

    Find the province of an Iranian landline number from its area code.

  • mobile_operator

    Detect the mobile operator (MCI/Irancell/Rightel) of an Iranian mobile 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.

  • number_to_persian_wordswrite action

    Write a non-negative integer in Persian words, e.g. for invoices.

  • parse_grouped_number

    Strip separators and Persian/Arabic digits to a clean number, e.g. '۲۰۰٬۰۰۰' -> '200000'.

  • parse_iran_address

    Heuristically extract province, city (province capitals only), valid postal code, and plaque/unit/floor numbers from a Persian address string.

  • parse_jalali_date

    Parse text like '1403/05/09', '۱۴۰۳-۵-۹' or '9 مرداد 1403' into a Jalali date.

  • persian_font_preset

    CSS for Persian fonts (vazirmatn, shabnam, sahel, iransans): import link, font stack with fallbacks, RTL base styles. IRANSans is commercial so no CDN is given.

  • persian_fuzzy_search

    Fuzzy-match a query against candidate strings, treating Arabic/Persian letter variants (ي/ی, ك/ک, آ/ا), diacritics, ZWNJ and digit styles as equal. Returns ranked matches with scores.

  • persian_lorem_ipsum

    Deterministic Persian placeholder text (seeded, original word list; not real prose) for mockups.

  • persian_ordinal

    Persian ordinal words: 3 -> سوم, 21 -> بیست و یکم, 30 -> سی‌ام. 1 gives اول (set firstAsYekom for یکم).

  • persian_relative_time

    Persian relative time like '۳ روز پیش' or '۲ ساعت دیگر'. Pass an ISO timestamp; 'now' defaults to the current time. Months = 30 days, years = 365 days.

  • persian_sort

    Sort strings in Persian alphabetical order (ا ب پ ت ... ی). Digits first (numeric), then Persian, then Latin. Ignores ZWNJ and Arabic/Persian letter variants.

  • persian_text_stats

    Character, letter, digit, ZWNJ, word, sentence and paragraph counts for Persian/mixed text, plus reading time. wordsPerMinute is an adjustable assumption (default 180).

  • persian_words_to_number

    Convert Persian number words to a number, e.g. 'دویست و پنجاه هزار' -> 250000.

  • 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 'core' returns the shared helpers.

  • price_to_persian_words

    Amount in Persian words with unit, e.g. 200000 toman -> 'دویست هزار تومان'. Toman may have one decimal digit (tenths = rials).

  • 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 logical replacements.

  • 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_guidelines

    Full RTL frontend guidelines for Persian/Arabic UIs (also available as prompt and resource 'rtl-frontend-guidelines').

  • rtl_starter_snippet

    Minimal RTL-ready setup for html, css, tailwind, nextjs, react or vue.

  • sanitize_persian_text

    Fix ZWNJ (half-space) for می/نمی and plural suffixes, Persian punctuation and spacing, Arabic letter variants.

  • slugify_persianwrite action

    Create a URL slug from Persian/Latin text.

  • to_persian_digits

    Convert any digits in a string to Persian digits.

  • truncate_persian_textwrite action

    Truncate text to maxLength (ellipsis included) without breaking words, ZWNJ-joined words, surrogate pairs or diacritics. mode 'word' (default) or 'char'.

  • validate_card_number

    Validate a 16-digit Iranian bank card number (Luhn).

  • validate_jalali_date

    Form validation for a Jalali date with readable reasons: month/day ranges (leap-aware), min, max and notFuture checks. Never throws.

  • validate_legal_national_id

    Validate an 11-digit Iranian legal-entity national ID (شناسه ملی شخص حقوقی / company ID) with its checksum.

  • validate_national_id

    Validate an Iranian national ID (code melli) using its checksum.

  • validate_postal_code

    Validate an Iranian 10-digit postal code.

  • validate_sheba

    Validate an Iranian Sheba (IBAN) number.

Public scan report

scanner v0.1.10 · 2026-10-28 · same rubric, same numbers if you re-run it

no findings
  • Code scan58 source files scanned25/25
  • –Live reliabilityno gateway calls yet and no remote to proben/a
  • –Tool poisoningtools not inspected (local package is not executed); not countedn/a
  • Auth qualitylocal package, no credentials required12/15
  • Maintenancelast push 10 days ago15/15
  • Maintainer identityregistry namespace matches repository owner; GitHub account older than a year8/10
Overall 92/100. Components that don't apply are left out of the denominator. Any critical finding is an F.RubricAppeal a findingJSON

How Parsi MCP compares

Against every graded MCP server, from our own scans and uptime checks. Updated after each scan run.

Safety score
92/100
higher than 95% of 48,255 servers
Tools
56
the typical server has 7
Tools that change things
5%
typical: 0%. Fewer write tools means less an agent can break
GitHub stars
5
more than 83% of 28,688 servers
Downloads a week
41
more than 33% of 12,191 servers with a package

What its tools let an agent do: 53 read · 3 change

Install Parsi MCP in Claude Code, Cursor or VS Code

Runs npx -y parsi-mcp on your machine. Read the scan report first; the gateway never runs local packages.

claude mcp add parsi-mcp -- npx -y parsi-mcp
Add to Cursor

What the publisher says

From the Parsi MCP repository's README, as published. We do not edit it. Read it on GitHub

parsi-mcp

English | فارسی

An MCP server that gives AI agents (Claude, Cursor, VS Code Copilot and others) reliable Persian and Iran-specific tools. It runs fully offline, with no API keys: Jalali dates, Iranian validators, Persian text handling, grouped price inputs with Persian words, and an RTL frontend toolkit.

56 tools. See the full list in TOOLS.md.

Install

Requires Node.js 18+. The npx commands below work once the package is published to npm; until then use the local build.

Claude Code

claude mcp add parsi -- npx -y parsi-mcp

Or install the plugin, which adds the MCP server and the persian-rtl-frontend skill:

claude plugin marketplace add amirjld/parsi-mcp
claude plugin install parsi@parsi-mcp

Cursor (~/.cursor/mcp.json or .cursor/mcp.json in a project)

{ "mcpServers": { "parsi": { "command": "npx", "args": ["-y", "parsi-mcp"] } } }

Claude Desktop (claudedesktopconfig.json: %APPDATA%\Claude\ on Windows, ~/Library/Application Support/Claude/ on macOS)

{ "mcpServers": { "parsi": { "command": "npx", "args": ["-y", "parsi-mcp"] } } }

VS Code (.vscode/mcp.json)

{ "servers": { "parsi": { "type": "stdio", "command": "npx", "args": ["-y", "parsi-mcp"] } } }

Agent skill (tells agents to build Persian UIs RTL-first and to call these tools):

npx skills add amirjld/parsi-mcp

From source

git clone https://github.com/amirjld/parsi-mcp.git
cd parsi-mcp && npm install && npm run build
# then use: { "command": "node", "args": ["/absolute/path/to/parsi-mcp/dist/index.js"] }

Before and after

You ask: "Build a checkout page in Persian with a price field."

Without parsi-mcp, agents typically produce an LTR page with margin-left and text-left, a plain number box, and Latin digits.

With parsi-mcp, the agent loads the RTL guidelines, takes rtlstartersnippet for the layout and priceinputsnippet for the field, and validates payment fields with validatecardnumber and validate_sheba:

<html lang="fa" dir="rtl">
  <!-- price input: typing 200000 shows ۲۰۰٬۰۰۰ -->
  <input inputmode="numeric" value="۲۰۰٬۰۰۰" />
  <p aria-live="polite">دویست هزار تومان</p>
</html>

What is inside

Data notes

Bank BINs, Sheba codes, mobile prefixes and province data only include entries confirmed by public sources. Lunar (Hijri) holiday dates, vehicle plate parsing and national-ID city lookup are not included because reliable offline data could not be verified. The VAT helper needs you to supply the rate.

Develop

npm install
npm run build
npm test
npm run docs:tools   # regenerate TOOLS.md (a test fails if it is out of date)

Shortened. The full README is on GitHub.

Nothing above is checked by us. What we check is on the safety report.

Parsi MCP: common questions

Is Parsi MCP server safe?
Yes, by our scan: it is graded A (92/100). Read the Parsi MCP safety report
How do I install Parsi MCP?
It runs on your machine. Copy the Claude Code, Cursor, VS Code or Claude Desktop config from the install section.
Does Parsi MCP need an API key?
Not as far as the registry entry and our scan can tell: no credentials are declared or required.
Is Parsi MCP maintained?
The last commit was 17 days ago (2026-10-18). The latest release is v0.3.0.
How does Parsi MCP compare with other MCP servers?
safety score 92/100 (higher than 95% of 48,255 servers); tools 56 (the typical server has 7); tools that change things 5% (typical: 0%. Fewer write tools means less an agent can break). Full comparison.