PHPackages                             shaxzodbek-uzb/uzbek-mcp - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. shaxzodbek-uzb/uzbek-mcp

ActiveProject[Utility &amp; Helpers](/categories/utility)

shaxzodbek-uzb/uzbek-mcp
========================

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.

00PHPCI passing

Since Jun 20Pushed todayCompare

[ Source](https://github.com/shaxzodbek-uzb/uzbek-mcp)[ Packagist](https://packagist.org/packages/shaxzodbek-uzb/uzbek-mcp)[ RSS](/packages/shaxzodbek-uzb-uzbek-mcp/feed)WikiDiscussions main Synced today

READMEChangelogDependenciesVersions (1)Used By (0)

Uzbek MCP 🇺🇿
============

[](#uzbek-mcp-)

> The first [Model Context Protocol](https://modelcontextprotocol.io) server for the **Uzbek language** — give Claude (and any MCP client) native Uzbek text abilities, plus a few handy live Uzbekistan data feeds.

[![CI](https://github.com/shaxzodbek-uzb/uzbek-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/shaxzodbek-uzb/uzbek-mcp/actions/workflows/ci.yml)[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](LICENSE)[![PHP 8.3+](https://camo.githubusercontent.com/c625f9110e52b20c52e78dd7521c1e7b4c925a48e85be6c2170469a618c9d2e9/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e332532422d3737376262342e737667)](https://www.php.net/)[![Built with Laravel MCP](https://camo.githubusercontent.com/41894b5a414d51cfc32b607c22cd393a580e58fbd94f44f0050958c490028238/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d4d43502d6666326432302e737667)](https://github.com/laravel/mcp)

LLMs are notoriously shaky at Uzbek — they mangle Latin ↔ Cyrillic transliteration, get the `oʻ`/`gʻ` apostrophes wrong, and can't spell out a number in Uzbek for an invoice. **Uzbek MCP** gives them deterministic, offline tools that get it right, following the official 1995 national alphabet. It also ships a small set of no-API-key Uzbekistan data tools (currency, holidays, weather).

There is already a healthy ecosystem of Uzbek *fintech / data* MCP servers (payments, e-invoicing, statistics). Uzbek MCP fills the empty **language** niche, and is the only one built on PHP / [Laravel MCP](https://github.com/laravel/mcp).

---

Tools
-----

[](#tools)

ToolWhat it doesExample`transliterate`Convert Uzbek between Latin and Cyrillic (auto-detects direction)`Oʻzbekiston` ⇄ `Ўзбекистон``normalize-text`Fix apostrophes (`oʻ`/`gʻ` → U+02BB, tutuq belgisi → U+02BC), Unicode → NFC, collapse whitespace`o'zbek` → `oʻzbek``number-to-words`Spell an integer in written Uzbek (great for sum-in-words on invoices)`1250` → `bir ming ikki yuz ellik``slugify`ASCII URL slug from Uzbek text in either script`Oʻzbekiston Respublikasi` → `ozbekiston-respublikasi``currency-rate`Official CBU exchange rate vs the soʻm, with optional date + amount conversion`USD ×100` → `1 208 556 soʻm``public-holidays`Official Uzbek public holidays for a year (uz + en, ISO dates)`2026` → 10 holidays`weather`Current weather + today's forecast for an Uzbek city (Open-Meteo)`Samarqand` → `28.8°C`The language tools are **offline and deterministic** (no network, no keys). The data tools call public APIs ([cbu.uz](https://cbu.uz), [open-meteo.com](https://open-meteo.com)) and need **no API key**.

---

Quick start
-----------

[](#quick-start)

### Requirements

[](#requirements)

- PHP **8.3+** (with the `mbstring` extension; `intl` recommended)
- [Composer](https://getcomposer.org)

### Install

[](#install)

```
git clone https://github.com/shaxzodbek-uzb/uzbek-mcp.git
cd uzbek-mcp
composer install
cp .env.example .env
php artisan key:generate
```

That's it — the server runs over stdio with `php artisan mcp:start uzbek`.

### Connect to Claude Desktop

[](#connect-to-claude-desktop)

Add this to your `claude_desktop_config.json` (use the **absolute** path to `artisan`):

```
{
  "mcpServers": {
    "uzbek": {
      "command": "php",
      "args": ["/absolute/path/to/uzbek-mcp/artisan", "mcp:start", "uzbek"]
    }
  }
}
```

Restart Claude Desktop and ask it, for example: *"Transliterate 'Oʻzbekiston Respublikasi' to Cyrillic"* or *"Spell out 1 250 000 soʻm in Uzbek"*.

### Connect to Claude Code

[](#connect-to-claude-code)

```
claude mcp add uzbek -- php /absolute/path/to/uzbek-mcp/artisan mcp:start uzbek
```

### Use it over HTTP

[](#use-it-over-http)

The same server is also exposed at `POST /mcp/uzbek` (rate-limited). Serve it with `php artisan serve` and point a remote MCP client at `http://127.0.0.1:8000/mcp/uzbek`. **Add authentication middleware before exposing this publicly** — see `routes/ai.php`.

### Inspect it interactively

[](#inspect-it-interactively)

```
php artisan mcp:inspector uzbek
```

---

Examples
--------

[](#examples)

```
// transliterate
{ "text": "Salom dunyo" }                         → "Салом дунё"
{ "text": "Ўзбекистон", "direction": "to_latin" } → "Oʻzbekiston"

// number-to-words
{ "number": 1250 }                                → "bir ming ikki yuz ellik"
{ "number": 1250, "currency": "soʻm" }            → "bir ming ikki yuz ellik soʻm"
{ "number": 1250, "script": "cyrillic" }          → "бир минг икки юз эллик"

// normalize-text
{ "text": "o'zbek  tili" }                        → "oʻzbek tili"

// slugify
{ "text": "Toshkent shahri" }                     → "toshkent-shahri"

// currency-rate
{ "currency": "USD", "amount": 100 }              → { rate, converted_sum, date, ... }

// public-holidays
{ "year": 2026 }                                  → { holidays: [ … ] }

// weather
{ "city": "Buxoro" }                              → { current, today, condition, ... }
```

---

About the transliteration
-------------------------

[](#about-the-transliteration)

Uzbek MCP implements the **official 1995 Latin alphabet** (the 2018/2021 `Ó`/`Ǵ` diacritic reforms were never adopted into law). It is careful about the details most tools get wrong:

- `Oʻ` and `Gʻ` use **U+02BB** (modifier letter turned comma) — straight quotes, backticks and curly quotes on input are accepted and normalized.
- The **tutuq belgisi** (glottal stop, Cyrillic `ъ`) uses **U+02BC** (modifier letter apostrophe) — a *different* character from the `Oʻ`/`Gʻ` mark.
- Cyrillic `е` → `ye` word-initially / after a vowel / after `ъ`,`ь`, otherwise `e`.
- Cyrillic `ц` → `ts` after a vowel, otherwise `s`.

A few mappings are inherently lossy (Latin `e` ← `е`/`э`, `ц` → `ts`/`s`, `ь` is dropped), so a Cyrillic → Latin → Cyrillic round-trip is not guaranteed for every input, but well-formed text round-trips cleanly.

---

Development
-----------

[](#development)

```
composer test              # run the PHPUnit suite (40 tests)
composer lint              # format with Laravel Pint
./vendor/bin/pint --test   # check formatting without changing files
```

The Uzbek logic lives in framework-agnostic classes under [`app/Support/Uzbek`](app/Support/Uzbek) (`Transliterator`, `NumberConverter`, `TextHelper`, `Holidays`, `Cities`, `WeatherCodes`); the thin MCP wrappers are in [`app/Mcp`](app/Mcp).

---

Contributing
------------

[](#contributing)

Contributions are very welcome — extra city coordinates, lunar-holiday years, transliteration edge cases, or new tools. See [CONTRIBUTING.md](CONTRIBUTING.md).

License
-------

[](#license)

[MIT](LICENSE) © Shaxzodbek Qambaraliyev

###  Health Score

20

—

LowBetter than 13% of packages

Maintenance65

Regular maintenance activity

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity11

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

### Community

Maintainers

![](https://www.gravatar.com/avatar/52601832881370c15b8c88de19f249fa511d46114d02d0a9d1fe2e51e2cb2f16?d=identicon)[Shaxzodbek](/maintainers/Shaxzodbek)

---

Tags

aiclaudelaravellatin-cyrillicmcpmodel-context-protocolphptransliterationuzbekuzbekistan

### Embed Badge

![Health badge](/badges/shaxzodbek-uzb-uzbek-mcp/health.svg)

```
[![Health](https://phpackages.com/badges/shaxzodbek-uzb-uzbek-mcp/health.svg)](https://phpackages.com/packages/shaxzodbek-uzb-uzbek-mcp)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
