The Uzbek language MCP server: transliteration (Latin ↔ Cyrillic), number-to-words, text normalization, slugify, plus live Uzbekistan data (CBU currency rates, public holidays, weather). Built on Laravel MCP.
Strong foundation with 10 well-defined tools using Laravel MCP framework. All tools have clear, descriptive names starting with action verbs (transliterate, normalize, number-to-words, slugify, date-to-words, phone-normalize, stir-validate, currency-rate, public-holidays, weather). Descriptions are detailed (100-250 chars typical) and explain WHAT, WHEN, and WHY. Input schemas are properly typed with enums, format constraints, and descriptions. All tools marked @IsReadOnly. However, output schemas are not explicitly documented in the visible code, responses are inferred from handle() implementations. Error handling is present but inconsistent: CurrencyRateTool provides actionable errors ('No rate found for currency...'), but others lack recovery guidance. Parameter descriptions are thorough (e.g., 'tutuq belgisi with U+02BC'), exceeding baseline quality. No security issues detected, no credentials in parameters, all external calls use Http facade with timeouts and retries.
Get the official exchange rate of a currency against the Uzbek soʻm from the Central Bank of Uzbekistan (cbu.uz), optionally for a past date, and optionally convert an amount of that currency into soʻm. Returns the rate, daily change and the date the rate applies to.
Spell an ISO date in written Uzbek, e.g. 2026-08-15 becomes "ikki ming yigirma oltinchi yil oʻn beshinchi avgust". Useful for contracts, invoices and official documents where the date must appear in words. Optionally prepend the weekday or render in the Cyrillic script. Offline and deterministic.
Canonicalise Uzbek Latin text: fixes apostrophes so Oʻ/Gʻ use U+02BB and the tutuq belgisi uses U+02BC, normalises Unicode to NFC, and (optionally) collapses repeated whitespace. Use this to clean text typed with straight quotes or backticks before storing or comparing it.
Spell out an integer in written Uzbek (e.g. 1250 → "bir ming ikki yuz ellik"). Useful for sum-in-words on invoices and documents. Optionally append a currency unit such as "soʻm" and render the result in the Cyrillic script.
Parse an Uzbek phone number written any of the usual ways (+998 90 123 45 67, 998901234567, 8 90 123-45-67, 90 123 45 67) and return it in E.164, international and local formats, plus the operator or region the 2-digit prefix belongs to. Offline and deterministic. Number portability means the operator names the allocated range, not necessarily the current carrier.
Output schemas not explicitly documented. While handle() methods return Response::json() with structured payloads, the response field structure is not declared in schema() method or docstrings. LLMs cannot plan downstream tool calls without knowing what fields to expect.
Error handling lacks recovery guidance in most tools. CurrencyRateTool provides actionable errors ('No rate found...'), but DateToWordsTool, PhoneNormalizeTool, and others return generic validation errors without suggesting next steps or alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
List the official public holidays of Uzbekistan for a given year (Uzbek and English names, ISO dates). The eight fixed-date holidays are returned for any year; the two Islamic holidays (Ramazon hayit, Qurbon hayit) follow the lunar calendar and are only included for years present in the built-in decree table.
Generate an ASCII URL slug from Uzbek text in either script (e.g. "Oʻzbekiston Respublikasi" → "ozbekiston-respublikasi"). Cyrillic is transliterated to Latin, the Oʻ/Gʻ mark and tutuq belgisi are stripped, and the result is lower-cased and hyphenated.
Check that an Uzbek taxpayer number (STIR / INN) has the right shape — exactly 9 digits — and return it normalised and grouped as it appears on an invoice. This validates the SHAPE ONLY: it catches a missing digit, a stray character or a placeholder, and it does NOT verify that the number is issued or belongs to a given company. Only the State Tax Committee register can tell you that; never refuse a customer on this check alone.
Transliterate Uzbek text between the Latin and Cyrillic scripts using the official 1995 national alphabet (Oʻ/Gʻ written with U+02BB, the tutuq belgisi with U+02BC). Set direction to "auto" to detect the source script automatically, or force "to_cyrillic" / "to_latin".
Get the current weather and today's forecast for a city in Uzbekistan via Open-Meteo (no API key). Major Uzbek cities are recognised by name in Latin or Cyrillic (e.g. Toshkent, Samarqand, Buxoro); other names are geocoded automatically. You may also pass explicit latitude/longitude.
No pagination or result limits documented for tools returning lists (public-holidays, weather forecast). If weather returns multi-day forecasts, no limit is stated. Large result sets risk context window exhaustion.
phone-normalize and stir-validate lack examples of valid input formats in descriptions. While maxLength constraints exist, LLMs benefit from format hints like '(+998 90 123 45 67 or 998901234567)' to avoid malformed calls.
weather tool accepts both city name and explicit lat/lon but does not document mutual exclusivity or precedence. If both are provided, which takes priority? This ambiguity can cause silent misuse.