parsi-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| gregorian_to_jalaliC | Convert a Gregorian date to the Jalali (Persian) calendar. |
| jalali_to_gregorianC | Convert a Jalali (Persian) date to the Gregorian calendar. |
| jalali_year_infoB | Leap-year status and month length for a Jalali year. |
| validate_national_idB | Validate an Iranian national ID (code melli) using its checksum. |
| validate_card_numberA | Validate a 16-digit Iranian bank card number (Luhn). |
| validate_shebaC | Validate an Iranian Sheba (IBAN) number. |
| normalize_mobileB | Validate and normalize an Iranian mobile number to 09xxxxxxxxx. |
| normalize_persian_textB | Normalize Arabic letter variants to Persian, clean spacing, and convert digits to Persian. |
| to_persian_digitsC | Convert any digits in a string to Persian digits. |
| number_to_persian_wordsB | Write a non-negative integer in Persian words, e.g. for invoices. |
| convert_rial_tomanB | Convert between rial and toman (1 toman = 10 rial). |
| bank_from_cardB | Identify the Iranian bank from a card number (first 6 digits / BIN). |
| bank_from_shebaB | Identify the Iranian bank from a Sheba (IBAN) number (3-digit bank code). |
| mobile_operatorB | Detect the mobile operator (MCI/Irancell/Rightel) of an Iranian mobile number. |
| landline_provinceC | Find the province of an Iranian landline number from its area code. |
| validate_postal_codeC | Validate an Iranian 10-digit postal code. |
| persian_words_to_numberB | Convert Persian number words to a number, e.g. 'دویست و پنجاه هزار' -> 250000. |
| format_jalali_dateC | Format a Jalali date. Tokens: YYYY YY MMMM MM M DD D dddd. |
| parse_jalali_dateB | Parse text like '1403/05/09', '۱۴۰۳-۵-۹' or '9 مرداد 1403' into a Jalali date. |
| jalali_addB | Add days, months and/or years to a Jalali date (month overflow clamps to month length). |
| jalali_diffA | Days between two Jalali dates plus a Persian relative description. |
| slugify_persianC | Create a URL slug from Persian/Latin text. |
| sanitize_persian_textB | Fix ZWNJ (half-space) for می/نمی and plural suffixes, Persian punctuation and spacing, Arabic letter variants. |
| calculate_vatB | VAT helper. Rate (percent) must be supplied. mode 'exclusive' = amount excludes tax, 'inclusive' = amount includes tax. |
| format_number_groupedB | Group digits in threes (200000 -> 200,000 or ۲۰۰٬۰۰۰). Accepts Persian/Arabic digits. |
| parse_grouped_numberA | Strip separators and Persian/Arabic digits to a clean number, e.g. '۲۰۰٬۰۰۰' -> '200000'. |
| price_to_persian_wordsB | Amount in Persian words with unit, e.g. 200000 toman -> 'دویست هزار تومان'. Toman may have one decimal digit (tenths = rials). |
| price_input_snippetB | 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. |
| rtl_guidelinesA | Full RTL frontend guidelines for Persian/Arabic UIs (also available as prompt and resource 'rtl-frontend-guidelines'). |
| rtl_audit_cssB | 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_cssB | Convert physical CSS (and React style objects) to logical properties. |
| rtl_convert_tailwindB | Convert Tailwind physical utilities to logical ones (ml-4 -> ms-4, pr-2 -> pe-2, text-left -> text-start). |
| rtl_starter_snippetC | Minimal RTL-ready setup for html, css, tailwind, nextjs, react or vue. |
| persian_relative_timeA | Persian relative time like '۳ روز پیش' or '۲ ساعت دیگر'. Pass an ISO timestamp; 'now' defaults to the current time. Months = 30 days, years = 365 days. |
| jalali_month_gridA | 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_rangeA | 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. |
| persian_ordinalB | Persian ordinal words: 3 -> سوم, 21 -> بیست و یکم, 30 -> سیام. 1 gives اول (set firstAsYekom for یکم). |
| persian_fuzzy_searchA | 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_sortA | Sort strings in Persian alphabetical order (ا ب پ ت ... ی). Digits first (numeric), then Persian, then Latin. Ignores ZWNJ and Arabic/Persian letter variants. |
| fix_keyboard_layoutA | 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. |
| validate_legal_national_idB | Validate an 11-digit Iranian legal-entity national ID (شناسه ملی شخص حقوقی / company ID) with its checksum. |
| csv_export_safeA | 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. |
| persian_font_presetB | 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. |
| iran_provincesA | 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). |
| persian_text_statsA | Character, letter, digit, ZWNJ, word, sentence and paragraph counts for Persian/mixed text, plus reading time. wordsPerMinute is an adjustable assumption (default 180). |
| detect_text_directionA | Detect text direction (first-strong and dominant script, mixed flag) and optionally wrap the text bidi-safely: Unicode isolates (FSI/RLI/LRI) or HTML / dir=auto. Use for usernames, product names and mixed Persian/English strings. |
| truncate_persian_textB | Truncate text to maxLength (ellipsis included) without breaking words, ZWNJ-joined words, surrogate pairs or diacritics. mode 'word' (default) or 'char'. |
| persian_lorem_ipsumA | Deterministic Persian placeholder text (seeded, original word list; not real prose) for mockups. |
| format_iran_phoneC | 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_short_numberB | Short Persian number form: 2500000 -> '۲٫۵ میلیون', 1200 -> '۱٫۲ هزار' (style 'latin' gives 2.5M). Optional unit like تومان. |
| decimal_to_persian_wordsC | Decimals, percents and fractions in Persian words: '12.5' -> 'دوازده ممیز پنج دهم', percent adds درصد, fraction '3/4' -> 'سه چهارم'. |
| jalali_ageA | Age (years, months, days, total days) from a Jalali birth date. asOf defaults to today. |
| validate_jalali_dateA | Form validation for a Jalali date with readable reasons: month/day ranges (leap-aware), min, max and notFuture checks. Never throws. |
| iran_business_daysA | 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_holidaysA | 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. |
| parse_iran_addressB | Heuristically extract province, city (province capitals only), valid postal code, and plaque/unit/floor numbers from a Persian address string. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| rtl-frontend-guidelines | Guidelines for building RTL-first Persian frontends (load before designing UI). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| rtl-frontend-guidelines | RTL frontend guidelines for Persian UIs |
TDQS
Scored across 56 tools
Most tools have clearly distinct purposes, but several clusters overlap: normalize_persian_text vs sanitize_persian_text, and the multiple number-to-words/formatting tools (number_to_persian_words, price_to_persian_words, decimal_to_persian_words, format_short_number). Descriptions help, but with 56 tools an agent may still hesitate between adjacent normalization/formatting utilities.
Names are uniformly snake_case and descriptive, with no camelCase mixing. The only minor inconsistency is that some are verb_noun (validate_*, format_*, parse_*) while others are noun-based (iran_provinces, persian_text_stats, rtl_starter_snippet), but the pattern remains predictable.
56 tools is far above the recommended 3–15 range and exceeds the 25+/50+ thresholds for overload. Even though the server covers a broad utility domain, this many separate tools creates selection overhead and agent confusion.
The surface is very comprehensive for Persian/Iranian development: text normalization, Jalali dates, numbers, banking/ID validators, phone data, and RTL frontend utilities. Gaps remain around official/lunar holiday dates and some edge cases (e.g., negative number words), but core workflows are well covered.