{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-05T19:27:30.355Z","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp","markdownUrl":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp.md","server":{"slug":"amirjld-parsi-mcp","name":"Parsi MCP","registryName":"io.github.amirjld/parsi-mcp","description":"Offline Persian/Iran tools: Jalali dates, validators, Persian text, price inputs, RTL frontend.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"parsi-mcp","type":"npm","identifier":"parsi-mcp","withdrawn":false,"url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp","version":"0.3.0","transport":"stdio","scoredAt":"2026-11-05T10:14:57.351Z"},"score":{"total":74,"tier":"medium","status":"scored","weekDelta":3,"history":[{"date":"2026-11-05","total":74},{"date":"2026-11-04","total":74},{"date":"2026-11-03","total":73},{"date":"2026-11-02","total":73},{"date":"2026-11-01","total":73},{"date":"2026-10-31","total":72},{"date":"2026-10-30","total":72},{"date":"2026-10-29","total":71},{"date":"2026-10-28","total":71},{"date":"2026-10-27","total":70},{"date":"2026-10-26","total":70},{"date":"2026-10-25","total":69},{"date":"2026-10-24","total":69},{"date":"2026-10-23","total":68},{"date":"2026-10-22","total":68},{"date":"2026-10-21","total":67},{"date":"2026-10-20","total":67},{"date":"2026-10-19","total":66},{"date":"2026-10-18","total":66}]},"categories":[{"name":"Supply Chain Security","score":98,"verdict":"partial","reasons":["No malware found by supply-chain analysis.","No known CVEs affecting this package version or its production dependencies.","No install/post-install scripts declared.","30 of 93 dependencies flagged as unhealthy."],"codes":[{"code":"supplychain.malware_clean","args":{}},{"code":"cve.none","args":{}},{"code":"installscript.none","args":{}},{"code":"dephealth.assessed","args":{"deps":"93","unhealthy":"30"}}]},{"name":"Provenance & Transparency","score":45,"verdict":"fail","reasons":["Source repository is publicly reachable at the declared URL.","Provenance check failed: no build-provenance attestation is published.","Clear OSI-approved license (MIT).","Actively maintained (last published 18 days ago).","Disclosure check failed: no security disclosure policy was found in the source repository."],"codes":[{"code":"provenance.repo_verified","args":{}},{"code":"provenance.none","args":{}},{"code":"license.osi","args":{"spdx":"MIT"}},{"code":"maintenance.recent","args":{"age_days":"18"}},{"code":"disclosure.absent","args":{}}]},{"name":"Schema Quality & AI Usability","score":75,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (fair).","Tool/resource definitions use about 3195 tokens (~56/item across 57 items; 56 tools + 1 resources), lean.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"fair"}},{"code":"schema.footprint_lean","args":{"avg":"56","items":"57","tools":"56","tokens":"3195","resources":"1"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":60,"verdict":"partial","reasons":["Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"18"}}]},{"name":"Tool Coverage","score":69,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","7% of tool parameters carry a description."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"7"}}]},{"name":"Tool Safety","score":75,"verdict":"fail","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; \"truncate_persian_text\" implies \"truncate\" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.","An AI judge read all 57 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_undeclared","args":{"pct":"0","tool":"truncate_persian_text","verb":"truncate","declared":"none","annotated":"0","destructive":"1"}},{"code":"toolsafety.manipulation_clean","args":{"units":"57","judged":"57"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"parsi-mcp","type":"npm","identifier":"parsi-mcp","withdrawn":false,"score":74,"current":true,"url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp","markdownUrl":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp.md"}],"facts":[{"label":"Registry","value":"npm"},{"label":"Package","value":"parsi-mcp"},{"label":"Version","value":"0.3.0"},{"label":"Transport","value":"stdio"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"gregorian_to_jalali","title":null,"description":"Convert a Gregorian date to the Jalali (Persian) calendar.","inputs":[{"name":"day","type":"integer","required":true,"description":null},{"name":"month","type":"integer","required":true,"description":null},{"name":"year","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"jalali_to_gregorian","title":null,"description":"Convert a Jalali (Persian) date to the Gregorian calendar.","inputs":[{"name":"day","type":"integer","required":true,"description":null},{"name":"month","type":"integer","required":true,"description":null},{"name":"year","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":47},{"name":"jalali_year_info","title":null,"description":"Leap-year status and month length for a Jalali year.","inputs":[{"name":"month","type":"integer","required":false,"description":null},{"name":"year","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":36},{"name":"validate_national_id","title":null,"description":"Validate an Iranian national ID (code melli) using its checksum.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":31},{"name":"validate_card_number","title":null,"description":"Validate a 16-digit Iranian bank card number (Luhn).","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"validate_sheba","title":null,"description":"Validate an Iranian Sheba (IBAN) number.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"normalize_mobile","title":null,"description":"Validate and normalize an Iranian mobile number to 09xxxxxxxxx.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"normalize_persian_text","title":null,"description":"Normalize Arabic letter variants to Persian, clean spacing, and convert digits to Persian.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"to_persian_digits","title":null,"description":"Convert any digits in a string to Persian digits.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":28},{"name":"number_to_persian_words","title":null,"description":"Write a non-negative integer in Persian words, e.g. for invoices.","inputs":[{"name":"value","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":34},{"name":"convert_rial_toman","title":null,"description":"Convert between rial and toman (1 toman = 10 rial).","inputs":[{"name":"amount","type":"number","required":true,"description":null},{"name":"from","type":"string","required":true,"description":null},{"name":"to","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"bank_from_card","title":null,"description":"Identify the Iranian bank from a card number (first 6 digits / BIN).","inputs":[{"name":"card","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":32},{"name":"bank_from_sheba","title":null,"description":"Identify the Iranian bank from a Sheba (IBAN) number (3-digit bank code).","inputs":[{"name":"sheba","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":38},{"name":"mobile_operator","title":null,"description":"Detect the mobile operator (MCI/Irancell/Rightel) of an Iranian mobile number.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"landline_province","title":null,"description":"Find the province of an Iranian landline number from its area code.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":31},{"name":"validate_postal_code","title":null,"description":"Validate an Iranian 10-digit postal code.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":26},{"name":"persian_words_to_number","title":null,"description":"Convert Persian number words to a number, e.g. 'دویست و پنجاه هزار' -> 250000.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":43},{"name":"format_jalali_date","title":null,"description":"Format a Jalali date. Tokens: YYYY YY MMMM MM M DD D dddd.","inputs":[{"name":"day","type":"integer","required":true,"description":null},{"name":"month","type":"integer","required":true,"description":null},{"name":"pattern","type":"string","required":false,"description":null},{"name":"persianDigits","type":"boolean","required":false,"description":null},{"name":"year","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":67},{"name":"parse_jalali_date","title":null,"description":"Parse text like '1403/05/09', '۱۴۰۳-۵-۹' or '9 مرداد 1403' into a Jalali date.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":53},{"name":"jalali_add","title":null,"description":"Add days, months and/or years to a Jalali date (month overflow clamps to month length).","inputs":[{"name":"day","type":"integer","required":true,"description":null},{"name":"days","type":"integer","required":false,"description":null},{"name":"month","type":"integer","required":true,"description":null},{"name":"months","type":"integer","required":false,"description":null},{"name":"year","type":"integer","required":true,"description":null},{"name":"years","type":"integer","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":71},{"name":"jalali_diff","title":null,"description":"Days between two Jalali dates plus a Persian relative description.","inputs":[{"name":"from","type":"object","required":true,"description":null},{"name":"to","type":"object","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"slugify_persian","title":null,"description":"Create a URL slug from Persian/Latin text.","inputs":[{"name":"separator","type":"string","required":false,"description":null},{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":35},{"name":"sanitize_persian_text","title":null,"description":"Fix ZWNJ (half-space) for می/نمی and plural suffixes, Persian punctuation and spacing, Arabic letter variants.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"calculate_vat","title":null,"description":"VAT helper. Rate (percent) must be supplied. mode 'exclusive' = amount excludes tax, 'inclusive' = amount includes tax.","inputs":[{"name":"amount","type":"number","required":true,"description":null},{"name":"mode","type":"string","required":true,"description":null},{"name":"ratePercent","type":"number","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"format_number_grouped","title":null,"description":"Group digits in threes (200000 -> 200,000 or ۲۰۰٬۰۰۰). Accepts Persian/Arabic digits.","inputs":[{"name":"digits","type":"string","required":false,"description":null},{"name":"separator","type":"string","required":false,"description":null},{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":59},{"name":"parse_grouped_number","title":null,"description":"Strip separators and Persian/Arabic digits to a clean number, e.g. '۲۰۰٬۰۰۰' -> '200000'.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":44},{"name":"price_to_persian_words","title":null,"description":"Amount in Persian words with unit, e.g. 200000 toman -> 'دویست هزار تومان'. Toman may have one decimal digit (tenths = rials).","inputs":[{"name":"amount","type":"string","required":true,"description":null},{"name":"unit","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":62},{"name":"price_input_snippet","title":null,"description":"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.","inputs":[{"name":"variant","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":54},{"name":"rtl_guidelines","title":null,"description":"Full RTL frontend guidelines for Persian/Arabic UIs (also available as prompt and resource 'rtl-frontend-guidelines').","inputs":[],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":33},{"name":"rtl_audit_css","title":null,"description":"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.","inputs":[{"name":"code","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"rtl_convert_css","title":null,"description":"Convert physical CSS (and React style objects) to logical properties.","inputs":[{"name":"css","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":29},{"name":"rtl_convert_tailwind","title":null,"description":"Convert Tailwind physical utilities to logical ones (ml-4 -> ms-4, pr-2 -> pe-2, text-left -> text-start).","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":48},{"name":"rtl_starter_snippet","title":null,"description":"Minimal RTL-ready setup for html, css, tailwind, nextjs, react or vue.","inputs":[{"name":"framework","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":37},{"name":"persian_relative_time","title":null,"description":"Persian relative time like '۳ روز پیش' or '۲ ساعت دیگر'. Pass an ISO timestamp; 'now' defaults to the current time. Months = 30 days, years = 365 days.","inputs":[{"name":"now","type":"string","required":false,"description":null},{"name":"persianDigits","type":"boolean","required":false,"description":null},{"name":"timestamp","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":74},{"name":"jalali_month_grid","title":null,"description":"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.","inputs":[{"name":"month","type":"integer","required":true,"description":null},{"name":"weekStart","type":"string","required":false,"description":null},{"name":"year","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":71},{"name":"jalali_period_range","title":null,"description":"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.","inputs":[{"name":"date","type":"object","required":true,"description":null},{"name":"period","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":68},{"name":"persian_ordinal","title":null,"description":"Persian ordinal words: 3 -> سوم, 21 -> بیست و یکم, 30 -> سیام. 1 gives اول (set firstAsYekom for یکم).","inputs":[{"name":"firstAsYekom","type":"boolean","required":false,"description":null},{"name":"value","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":66},{"name":"persian_fuzzy_search","title":null,"description":"Fuzzy-match a query against candidate strings, treating Arabic/Persian letter variants (ي/ی, ك/ک, آ/ا), diacritics, ZWNJ and digit styles as equal. Returns ranked matches with scores.","inputs":[{"name":"candidates","type":"array","required":true,"description":null},{"name":"limit","type":"integer","required":false,"description":null},{"name":"query","type":"string","required":true,"description":null},{"name":"threshold","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":87},{"name":"persian_sort","title":null,"description":"Sort strings in Persian alphabetical order (ا ب پ ت ... ی). Digits first (numeric), then Persian, then Latin. Ignores ZWNJ and Arabic/Persian letter variants.","inputs":[{"name":"items","type":"array","required":true,"description":null},{"name":"order","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":63},{"name":"fix_keyboard_layout","title":null,"description":"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.","inputs":[{"name":"direction","type":"string","required":false,"description":null},{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":69},{"name":"validate_legal_national_id","title":null,"description":"Validate an 11-digit Iranian legal-entity national ID (شناسه ملی شخص حقوقی / company ID) with its checksum.","inputs":[{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45},{"name":"csv_export_safe","title":null,"description":"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.","inputs":[{"name":"bom","type":"boolean","required":false,"description":null},{"name":"delimiter","type":"string","required":false,"description":null},{"name":"excelSafe","type":"boolean","required":false,"description":null},{"name":"rows","type":"array","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":83},{"name":"persian_font_preset","title":null,"description":"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.","inputs":[{"name":"font","type":"string","required":true,"description":null},{"name":"selector","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":71},{"name":"iran_provinces","title":null,"description":"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).","inputs":[{"name":"query","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":52},{"name":"persian_text_stats","title":null,"description":"Character, letter, digit, ZWNJ, word, sentence and paragraph counts for Persian/mixed text, plus reading time. wordsPerMinute is an adjustable assumption (default 180).","inputs":[{"name":"text","type":"string","required":true,"description":null},{"name":"wordsPerMinute","type":"number","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":64},{"name":"detect_text_direction","title":null,"description":"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.","inputs":[{"name":"text","type":"string","required":true,"description":null},{"name":"wrap","type":"string","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":81},{"name":"truncate_persian_text","title":null,"description":"Truncate text to maxLength (ellipsis included) without breaking words, ZWNJ-joined words, surrogate pairs or diacritics. mode 'word' (default) or 'char'.","inputs":[{"name":"ellipsis","type":"string","required":false,"description":null},{"name":"maxLength","type":"integer","required":true,"description":null},{"name":"mode","type":"string","required":false,"description":null},{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":80},{"name":"persian_lorem_ipsum","title":null,"description":"Deterministic Persian placeholder text (seeded, original word list; not real prose) for mockups.","inputs":[{"name":"paragraphs","type":"integer","required":false,"description":null},{"name":"seed","type":"integer","required":false,"description":null},{"name":"sentencesPerParagraph","type":"integer","required":false,"description":null},{"name":"wordsPerSentence","type":"integer","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":66},{"name":"format_iran_phone","title":null,"description":"Display formats for an Iranian mobile (0912 345 6789, +98 912 345 6789, E.164) or landline (021-12345678). Accepts Persian digits, +98, 0098.","inputs":[{"name":"persianDigits","type":"boolean","required":false,"description":null},{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":77},{"name":"format_short_number","title":null,"description":"Short Persian number form: 2500000 -> '۲٫۵ میلیون', 1200 -> '۱٫۲ هزار' (style 'latin' gives 2.5M). Optional unit like تومان.","inputs":[{"name":"maxFraction","type":"integer","required":false,"description":null},{"name":"persianDigits","type":"boolean","required":false,"description":null},{"name":"style","type":"string","required":false,"description":null},{"name":"unit","type":"string","required":false,"description":null},{"name":"value","type":"number","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":90},{"name":"decimal_to_persian_words","title":null,"description":"Decimals, percents and fractions in Persian words: '12.5' -> 'دوازده ممیز پنج دهم', percent adds درصد, fraction '3/4' -> 'سه چهارم'.","inputs":[{"name":"halfAsNim","type":"boolean","required":false,"description":null},{"name":"mode","type":"string","required":false,"description":null},{"name":"value","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":79},{"name":"jalali_age","title":null,"description":"Age (years, months, days, total days) from a Jalali birth date. asOf defaults to today.","inputs":[{"name":"asOf","type":null,"required":false,"description":"Jalali date as {year,month,day} or text like '1405/07/24'"},{"name":"birth","type":null,"required":true,"description":"Jalali date as {year,month,day} or text like '1405/07/24'"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":86},{"name":"validate_jalali_date","title":null,"description":"Form validation for a Jalali date with readable reasons: month/day ranges (leap-aware), min, max and notFuture checks. Never throws.","inputs":[{"name":"date","type":"object","required":true,"description":null},{"name":"max","type":null,"required":false,"description":"Jalali date as {year,month,day} or text like '1405/07/24'"},{"name":"min","type":null,"required":false,"description":"Jalali date as {year,month,day} or text like '1405/07/24'"},{"name":"notFuture","type":"boolean","required":false,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":108},{"name":"iran_business_days","title":null,"description":"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.","inputs":[{"name":"date","type":null,"required":true,"description":"Jalali date as {year,month,day} or text like '1405/07/24'"},{"name":"days","type":"integer","required":false,"description":null},{"name":"holidays","type":"array","required":false,"description":"Extra Jalali holiday dates you supply, e.g. '1405/01/01'"},{"name":"includeFixedSolarHolidays","type":"boolean","required":false,"description":null},{"name":"op","type":"string","required":true,"description":null},{"name":"to","type":null,"required":false,"description":"Jalali date as {year,month,day} or text like '1405/07/24'"},{"name":"weekend","type":"string","required":false,"description":"Weekend days; default friday only"}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":179},{"name":"iran_holidays","title":null,"description":"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.","inputs":[{"name":"year","type":"integer","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":89},{"name":"parse_iran_address","title":null,"description":"Heuristically extract province, city (province capitals only), valid postal code, and plaque/unit/floor numbers from a Persian address string.","inputs":[{"name":"text","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":false,"hasExamples":false,"tokenEstimate":45}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-05T10:14:57.000Z","track":"package","endpoint":null,"declaredUrl":null,"truncated":false,"tls":null,"dnssec":null,"auth":null,"httpsRedirect":null,"transports":[],"provenance":{"outcome":"none","label":"No attestation","reason":null,"reasonLabel":null,"discovery":null,"discoveryLabel":null,"sourceRepo":null,"attestationSkipped":null,"attestationSkippedLabel":null},"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":{"nodes":93,"partial":false,"deprecated":null,"stale":30,"noRepo":null}},"mismatches":[],"changelog":{"trackingSince":"2026-10-18","recent":[{"id":"chg_01a1a60b-f19c-73d2-881b-db1651ae9327","kind":"score.total_changed","summary":"Trust score (73 → 74)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a1a60b-f19c-73d2-881b-db1651ae9327"},{"id":"chg_01a1969a-93ba-7dd9-9a07-14949f24e483","kind":"score.total_changed","summary":"Trust score (72 → 73)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-11-01","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a1969a-93ba-7dd9-9a07-14949f24e483"},{"id":"chg_01a18c46-20e3-7248-9402-14fc83ab1870","kind":"score.total_changed","summary":"Trust score (71 → 72)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-30","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a18c46-20e3-7248-9402-14fc83ab1870"},{"id":"chg_01a1871f-4232-7890-ac5b-97a35471b8ca","kind":"check.reverified","summary":"Security disclosure (unverified → fail)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-29","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a1871f-4232-7890-ac5b-97a35471b8ca"},{"id":"chg_01a181f9-505d-7ba5-bf65-4ec9d6938b5d","kind":"check.unverifiable","summary":"Security disclosure (fail → unverified)","materiality":"functional","direction":"regression","scoreDelta":null,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a181f9-505d-7ba5-bf65-4ec9d6938b5d"},{"id":"chg_01a181f9-5065-747f-8bf6-ce719aa5213f","kind":"score.total_changed","summary":"Trust score (70 → 71)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-28","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a181f9-5065-747f-8bf6-ce719aa5213f"},{"id":"chg_01a177ac-47e8-7949-9a2e-08e98475e644","kind":"score.total_changed","summary":"Trust score (69 → 70)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-26","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a177ac-47e8-7949-9a2e-08e98475e644"},{"id":"chg_01a16d5f-2d17-78cf-b37f-b76146d02e00","kind":"score.total_changed","summary":"Trust score (68 → 69)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-24","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a16d5f-2d17-78cf-b37f-b76146d02e00"},{"id":"chg_01a16312-5c77-7c38-8e9e-099d6ddb463f","kind":"score.total_changed","summary":"Trust score (67 → 68)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-22","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a16312-5c77-7c38-8e9e-099d6ddb463f"},{"id":"chg_01a158c6-43ca-7501-b12f-fe1d80c24b1a","kind":"score.total_changed","summary":"Trust score (66 → 67)","materiality":"functional","direction":"improvement","scoreDelta":1,"occurredOn":"2026-10-20","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a158c6-43ca-7501-b12f-fe1d80c24b1a"},{"id":"chg_01a14f8c-585c-7188-8c3e-7a8d8c8a25bd","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a14f8c-585c-7188-8c3e-7a8d8c8a25bd"},{"id":"chg_01a14f87-5321-7916-8a55-96b64c05a81d","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-10-18","url":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp#chg-chg_01a14f87-5321-7916-8a55-96b64c05a81d"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp","markdown":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp.md","changelogJson":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/amirjld-parsi-mcp/parsi-mcp.xml","external":[{"label":"npm package","href":"https://www.npmjs.com/package/parsi-mcp"},{"label":"Socket report","href":"https://socket.dev/npm/package/parsi-mcp"},{"label":"Repository","href":"https://github.com/amirjld/parsi-mcp"}]}}