Parsi MCP server
io.github.amirjld/parsi-mcp·v0.3.0·5 starsOffline Persian/Iran tools: Jalali dates, validators, Persian text, price inputs, RTL frontend.
5 stars41 downloads/wk
Reviews
Write oneNobody 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 postsRead from the package source without running it. The installed server may list more.
bank_from_cardIdentify the Iranian bank from a card number (first 6 digits / BIN).
bank_from_shebaIdentify the Iranian bank from a Sheba (IBAN) number (3-digit bank code).
calculate_vatVAT helper. Rate (percent) must be supplied. mode 'exclusive' = amount excludes tax, 'inclusive' = amount includes tax.
convert_rial_tomanConvert between rial and toman (1 toman = 10 rial).
csv_export_safeBuild 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_wordsDecimals, percents and fractions in Persian words: '12.5' -> 'دوازده ممیز پنج دهم', percent adds درصد, fraction '3/4' -> 'سه چهارم'.
detect_text_directionDetect 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_layoutFix 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_phoneDisplay 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_dateFormat a Jalali date. Tokens: YYYY YY MMMM MM M DD D dddd.
format_number_groupedGroup digits in threes (200000 -> 200,000 or ۲۰۰٬۰۰۰). Accepts Persian/Arabic digits.
format_short_numberShort Persian number form: 2500000 -> '۲٫۵ میلیون', 1200 -> '۱٫۲ هزار' (style 'latin' gives 2.5M). Optional unit like تومان.
gregorian_to_jalaliConvert a Gregorian date to the Jalali (Persian) calendar.
iran_business_daysBusiness-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_holidaysFixed 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_provincesList 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_addAdd days, months and/or years to a Jalali date (month overflow clamps to month length).
jalali_ageAge (years, months, days, total days) from a Jalali birth date. asOf defaults to today.
jalali_diffDays between two Jalali dates plus a Persian relative description.
jalali_month_gridCalendar 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_rangeStart/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_gregorianConvert a Jalali (Persian) date to the Gregorian calendar.
jalali_year_infoLeap-year status and month length for a Jalali year.
landline_provinceFind the province of an Iranian landline number from its area code.
mobile_operatorDetect the mobile operator (MCI/Irancell/Rightel) of an Iranian mobile number.
normalize_mobileValidate and normalize an Iranian mobile number to 09xxxxxxxxx.
normalize_persian_textNormalize Arabic letter variants to Persian, clean spacing, and convert digits to Persian.
number_to_persian_wordswrite actionWrite a non-negative integer in Persian words, e.g. for invoices.
parse_grouped_numberStrip separators and Persian/Arabic digits to a clean number, e.g. '۲۰۰٬۰۰۰' -> '200000'.
parse_iran_addressHeuristically extract province, city (province capitals only), valid postal code, and plaque/unit/floor numbers from a Persian address string.
parse_jalali_dateParse text like '1403/05/09', '۱۴۰۳-۵-۹' or '9 مرداد 1403' into a Jalali date.
persian_font_presetCSS 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_searchFuzzy-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_ipsumDeterministic Persian placeholder text (seeded, original word list; not real prose) for mockups.
persian_ordinalPersian ordinal words: 3 -> سوم, 21 -> بیست و یکم, 30 -> سیام. 1 gives اول (set firstAsYekom for یکم).
persian_relative_timePersian relative time like '۳ روز پیش' or '۲ ساعت دیگر'. Pass an ISO timestamp; 'now' defaults to the current time. Months = 30 days, years = 365 days.
persian_sortSort strings in Persian alphabetical order (ا ب پ ت ... ی). Digits first (numeric), then Persian, then Latin. Ignores ZWNJ and Arabic/Persian letter variants.
persian_text_statsCharacter, 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_numberConvert Persian number words to a number, e.g. 'دویست و پنجاه هزار' -> 250000.
price_input_snippetReady-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_wordsAmount in Persian words with unit, e.g. 200000 toman -> 'دویست هزار تومان'. Toman may have one decimal digit (tenths = rials).
rtl_audit_cssScan 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_cssConvert physical CSS (and React style objects) to logical properties.
rtl_convert_tailwindConvert Tailwind physical utilities to logical ones (ml-4 -> ms-4, pr-2 -> pe-2, text-left -> text-start).
rtl_guidelinesFull RTL frontend guidelines for Persian/Arabic UIs (also available as prompt and resource 'rtl-frontend-guidelines').
rtl_starter_snippetMinimal RTL-ready setup for html, css, tailwind, nextjs, react or vue.
sanitize_persian_textFix ZWNJ (half-space) for می/نمی and plural suffixes, Persian punctuation and spacing, Arabic letter variants.
slugify_persianwrite actionCreate a URL slug from Persian/Latin text.
to_persian_digitsConvert any digits in a string to Persian digits.
truncate_persian_textwrite actionTruncate text to maxLength (ellipsis included) without breaking words, ZWNJ-joined words, surrogate pairs or diacritics. mode 'word' (default) or 'char'.
validate_card_numberValidate a 16-digit Iranian bank card number (Luhn).
validate_jalali_dateForm validation for a Jalali date with readable reasons: month/day ranges (leap-aware), min, max and notFuture checks. Never throws.
validate_legal_national_idValidate an 11-digit Iranian legal-entity national ID (شناسه ملی شخص حقوقی / company ID) with its checksum.
validate_national_idValidate an Iranian national ID (code melli) using its checksum.
validate_postal_codeValidate an Iranian 10-digit postal code.
validate_shebaValidate an Iranian Sheba (IBAN) number.
Public scan report
scanner v0.1.10 · 2026-10-28 · same rubric, same numbers if you re-run it
- 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
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
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-mcpOr 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-mcpCursor (~/.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-mcpFrom 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.