Amounts in words (Arabic cheque grammar), number formatting, Arabic text tools, date parsing.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
API key from [email protected] (catalogue and free tools work without it)
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Convert an amount in a currency to words for cheques, invoices and contracts, in 56 languages. Arabic output applies number–noun agreement (درهم واحد / درهمان / ثلاثة دراهم / أحد عشر درهماً) and the correct minor unit (فلس، هللة، قرش…); English uses CLDR currency names. style='cheque' adds the customary wrapper. Example: amount 1250.50, currency 'AED', language 'ar', style 'cheque'. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
Amount as number or numeric string, e.g. 1234567.89 or '١٢٣٤٫٥٠'.
ISO 4217 code: AED, SAR, USD, EUR…
cheque wraps the phrase the way cheques/contracts do ('… only' / 'فقط … لا غير').
Language of the words: 'en', 'ar', 'fr', 'de', 'es', 'hi', 'ur'… (56 languages; list_languages).
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http text-number-toolkit https://textkit.noahsarch.tech/mcp
Headers
X-API-Key (optional, not in the config above): API key from [email protected] (catalogue and free tools work without it)Convert an amount in a currency to words for cheques, invoices and contracts, in 56 languages. Arabic output applies number–noun agreement (درهم واحد / درهمان / ثلاثة دراهم / أحد عشر درهماً) and the correct minor unit (فلس، هللة، قرش…); English uses CLDR currency names. style='cheque' adds the customary wrapper. Example: amount 1250.50, currency 'AED', language 'ar', style 'cheque'. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| style | string | cheque wraps the phrase the way cheques/contracts do ('… only' / 'فقط … لا غير'). |
| amount* | any | Amount as number or numeric string, e.g. 1234567.89 or '١٢٣٤٫٥٠'. |
| currency* | string | ISO 4217 code: AED, SAR, USD, EUR… |
| language | string | Language of the words: 'en', 'ar', 'fr', 'de', 'es', 'hi', 'ur'… (56 languages; list_languages). |
{
"type": "object",
"title": "amount_to_wordsArguments",
"required": [
"amount",
"currency"
],
"properties": {
"style": {
"enum": [
"plain",
"cheque"
],
"type": "string",
"title": "Style",
"default": "plain",
"description": "cheque wraps the phrase the way cheques/contracts do ('… only' / 'فقط … لا غير')."
},
"amount": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Amount",
"description": "Amount as number or numeric string, e.g. 1234567.89 or '١٢٣٤٫٥٠'."
},
"currency": {
"type": "string",
"title": "Currency",
"description": "ISO 4217 code: AED, SAR, USD, EUR…"
},
"language": {
"type": "string",
"title": "Language",
"default": "en",
"description": "Language of the words: 'en', 'ar', 'fr', 'de', 'es', 'hi', 'ur'… (56 languages; list_languages)."
}
}
}Rewrite digits between Western (0-9), Arabic-Indic (٠-٩) and Persian/Urdu (۰-۹) anywhere in a text, leaving everything else untouched. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| to* | string | western 0-9 | arabic_indic ٠-٩ | persian ۰-۹. |
| text* | string |
{
"type": "object",
"title": "convert_digitsArguments",
"required": [
"text",
"to"
],
"properties": {
"to": {
"enum": [
"western",
"arabic_indic",
"persian"
],
"type": "string",
"title": "To",
"description": "western 0-9 | arabic_indic ٠-٩ | persian ۰-۹."
},
"text": {
"type": "string",
"title": "Text",
"description": ""
}
}
}Proportions of writing systems in a text (latin, arabic, cyrillic, han…), dominant script, RTL/LTR direction, mixed-script flag, which digit systems appear, and hints such as Persian/Urdu-specific letters. Free. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| text* | string |
{
"type": "object",
"title": "detect_scriptArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text",
"description": ""
}
}
}Locale-correct display of a decimal, currency amount or percentage using CLDR rules: grouping (1,234,567 / 12,34,567 / 1.234.567 / 1 234 567), decimal mark, currency symbol placement, Arabic-Indic digits for ar_* locales. Example: number 1234567.891, locale 'en_IN', style 'currency', currency 'INR'. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| style | string | |
| locale* | string | CLDR locale: 'en', 'en_IN' (lakh grouping), 'ar_AE' (Arabic-Indic digits), 'de_DE', 'fr_CH'… |
| number* | any | Number to format. |
| currency | any | ISO 4217 code when style=currency. |
| decimals | any | Force a number of decimal places; default = locale/currency rule. |
| numbering | string | Digit system: locale default (ar_EG → Arabic-Indic, ar_AE → Western), or force latn / arab. |
{
"type": "object",
"title": "format_numberArguments",
"required": [
"number",
"locale"
],
"properties": {
"style": {
"enum": [
"decimal",
"currency",
"percent"
],
"type": "string",
"title": "Style",
"default": "decimal",
"description": ""
},
"locale": {
"type": "string",
"title": "Locale",
"description": "CLDR locale: 'en', 'en_IN' (lakh grouping), 'ar_AE' (Arabic-Indic digits), 'de_DE', 'fr_CH'…"
},
"number": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Number",
"description": "Number to format."
},
"currency": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Currency",
"default": null,
"description": "ISO 4217 code when style=currency."
},
"decimals": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Decimals",
"default": null,
"description": "Force a number of decimal places; default = locale/currency rule."
},
"numbering": {
"enum": [
"locale",
"latn",
"arab"
],
"type": "string",
"title": "Numbering",
"default": "locale",
"description": "Digit system: locale default (ar_EG → Arabic-Indic, ar_AE → Western), or force latn / arab."
}
}
}Languages available for words, the curated Arabic-grammar currencies, and notes on locales. Free. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
No arguments.
{
"type": "object",
"title": "list_languagesArguments",
"properties": {}
}Clean Arabic text for matching, search and storage: strip diacritics and tatweel, unify alef forms, optional ة→ه and ى→ي, Western digits, Latin punctuation, whitespace. Reports exactly which rules changed the text. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| text* | string | |
| unify_alef | boolean | آ أ إ ٱ → ا. |
| strip_tatweel | boolean | Remove kashida/tatweel elongation. |
| strip_tashkeel | boolean | Remove diacritics (fatha, damma, shadda…). |
| digits_to_western | boolean | ٠-٩/۰-۹ → 0-9. |
| taa_marbuta_to_haa | boolean | ة → ه (search normalisation; changes spelling). |
| alef_maqsura_to_yaa | boolean | ى → ي (search normalisation; changes spelling). |
| collapse_whitespace | boolean | |
Cardinal, ordinal or year wording of a number in 56 languages (en, ar, fr, de, es, pt, it, nl, tr, ru, hi, ur, id, ja, ko…). Example: number 2026, language 'en', to 'year' → 'twenty twenty-six'. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| to | string | cardinal (default) | ordinal (1st, الأول) | year (nineteen ninety-nine). |
| number* | any | Number (integers or decimals; Arabic-Indic digits accepted). |
| language | string | Target language code (56 supported). |
{
"type": "object",
"title": "number_to_wordsArguments",
"required": [
"number"
],
"properties": {
"to": {
"enum": [
"cardinal",
"ordinal",
"year"
],
"type": "string",
"title": "To",
"default": "cardinal",
"description": "cardinal (default) | ordinal (1st, الأول) | year (nineteen ninety-nine)."
},
"number": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "integer"
}
],
"title": "Number",
"description": "Number (integers or decimals; Arabic-Indic digits accepted)."
},
"language": {
"type": "string",
"title": "Language",
"default": "en",
"description": "Target language code (56 supported)."
}
}
}Turn a date written in natural language or local numeric formats into an ISO date/datetime: '3 mars 2026', '12.11.2026', 'next month', 'غداً', 'in 3 weeks', and Hijri dates such as '15 رمضان 1447' or '1 Muharram 1448' (converted by Umm al-Qura). Returns precision (day/month/year/time), the detected language and the relative base used. Pass languages and date_order when known. Example: text '١٥ رمضان ١٤٤٧'. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| text* | string | A date as humans write it: '3 mars 2026', '12/11/2026', 'غداً', 'in 3 weeks', '15 رمضان 1447', '2026-11-12T10:00'. |
| timezone | any | IANA zone for the result, e.g. 'Asia/Dubai'. |
| languages | any | Language codes to try, e.g. ['en','ar','fr']. Strongly recommended for speed and accuracy. |
| date_order | any | Order for ambiguous numeric dates. Pass it whenever you know the source country. |
| prefer_future | boolean | Resolve ambiguous relative dates forward (deadlines) rather than backward. |
| relative_base | any | ISO datetime that relative phrases ('tomorrow', 'in 3 days') count from. Default: now. |
Turn '1.234,56', '١٬٢٣٤٫٥٦', '12 345,6' or '1,234.56' into an exact decimal, using the locale's separators first and a clearly flagged heuristic when they do not match. Example: text '1.234,56', locale 'de'. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| text* | string | Number as written by a human: '1.234,56', '١٬٢٣٤٫٥٦', '12 345,6', '1,234.56'. |
| locale | string | Locale whose separators to assume first; a heuristic fallback handles mismatches and says so. |
{
"type": "object",
"title": "parse_numberArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text",
"description": "Number as written by a human: '1.234,56', '١٬٢٣٤٫٥٦', '12 345,6', '1,234.56'."
},
"locale": {
"type": "string",
"title": "Locale",
"default": "en",
"description": "Locale whose separators to assume first; a heuristic fallback handles mismatches and says so."
}
}
}Deterministic romanisation of any script to plain ASCII (Cyrillic, Greek, CJK, Devanagari, Thai, Arabic…) for slugs, sorting, matching and systems that reject non-ASCII. Not an official spelling: for Arabic names the result is a consonant skeleton and is flagged low confidence. Response: result plus data_confidence, estimated_items[], sources[], data_version, warnings[]; deterministic (no AI inside), nothing logged.
| Argument | Type | Description |
|---|---|---|
| text* | string | Text in any script (Cyrillic, Greek, CJK, Arabic, Devanagari…). |
{
"type": "object",
"title": "transliterateArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text",
"description": "Text in any script (Cyrillic, Greek, CJK, Arabic, Devanagari…)."
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Oct 31, 2026.
| punctuation_to_latin |
| boolean |
| ، ؛ ؟ ٪ ٫ ٬ → , ; ? % . , |
{
"type": "object",
"title": "normalize_arabicArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text",
"description": ""
},
"unify_alef": {
"type": "boolean",
"title": "Unify Alef",
"default": true,
"description": "آ أ إ ٱ → ا."
},
"strip_tatweel": {
"type": "boolean",
"title": "Strip Tatweel",
"default": true,
"description": "Remove kashida/tatweel elongation."
},
"strip_tashkeel": {
"type": "boolean",
"title": "Strip Tashkeel",
"default": true,
"description": "Remove diacritics (fatha, damma, shadda…)."
},
"digits_to_western": {
"type": "boolean",
"title": "Digits To Western",
"default": true,
"description": "٠-٩/۰-۹ → 0-9."
},
"taa_marbuta_to_haa": {
"type": "boolean",
"title": "Taa Marbuta To Haa",
"default": false,
"description": "ة → ه (search normalisation; changes spelling)."
},
"alef_maqsura_to_yaa": {
"type": "boolean",
"title": "Alef Maqsura To Yaa",
"default": false,
"description": "ى → ي (search normalisation; changes spelling)."
},
"collapse_whitespace": {
"type": "boolean",
"title": "Collapse Whitespace",
"default": true,
"description": ""
},
"punctuation_to_latin": {
"type": "boolean",
"title": "Punctuation To Latin",
"default": false,
"description": "، ؛ ؟ ٪ ٫ ٬ → , ; ? % . ,"
}
}
}{
"type": "object",
"title": "parse_dateArguments",
"required": [
"text"
],
"properties": {
"text": {
"type": "string",
"title": "Text",
"description": "A date as humans write it: '3 mars 2026', '12/11/2026', 'غداً', 'in 3 weeks', '15 رمضان 1447', '2026-11-12T10:00'."
},
"timezone": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Timezone",
"default": null,
"description": "IANA zone for the result, e.g. 'Asia/Dubai'."
},
"languages": {
"anyOf": [
{
"type": "array",
"items": {
"type": "string"
}
},
{
"type": "null"
}
],
"title": "Languages",
"default": null,
"description": "Language codes to try, e.g. ['en','ar','fr']. Strongly recommended for speed and accuracy."
},
"date_order": {
"anyOf": [
{
"enum": [
"DMY",
"MDY",
"YMD"
],
"type": "string"
},
{
"type": "null"
}
],
"title": "Date Order",
"default": null,
"description": "Order for ambiguous numeric dates. Pass it whenever you know the source country."
},
"prefer_future": {
"type": "boolean",
"title": "Prefer Future",
"default": false,
"description": "Resolve ambiguous relative dates forward (deadlines) rather than backward."
},
"relative_base": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Relative Base",
"default": null,
"description": "ISO datetime that relative phrases ('tomorrow', 'in 3 days') count from. Default: now."
}
}
}