Skip to main content
Glama
FEDOR-help

keyboard-layout-mcp

by FEDOR-help
README.md
# keyboard-layout-mcp

MCP-сервер распознавания и перевода раскладок клавиатуры. Понимает любую из
раскладок en (QWERTY), ru (ЙЦУКЕН), de (QWERTZ), fr (AZERTY), исправляет текст,
набранный «не в той» раскладке, и вдобавок умеет предиктивный ввод T9 — цифры
→ слова, как на старом смартфоне.

## Возможности

- **convert** — перевод текста между раскладками: `convert("руддщ", "ru", "en")` → `hello`.
- **fix** — автоисправление «съехавшей» раскладки: `fix("ghbdtn")` → `привет`.
- **detect** — определение раскладки текста с ранжированным списком кандидатов.
- **t9** — предиктивный ввод: `t9("43556")` → `hello`, `t9("564236")` → `привет`.
- **t9_a2z** — буквы на цифровой клавише (2-9, 0 = пробел).

## Установка

Требуется **Python 3.14+** и пакет `mcp` (`pip install "mcp>=2.2"`).

```bash
git clone https://github.com/FEDOR-help/keyboard-layout-mcp.git
cd keyboard-layout-mcp
pip install -r requirements.txt
python server/main.py
```

### Подключение к opencode (`opencode.jsonc`)

```jsonc
"mcp": {
  "keyboard-layout-mcp": {
    "type": "local",
    "command": ["python", "server/main.py"],
    "environment": { "PYTHONUTF8": "1", "PYTHONIOENCODING": "utf-8" }
  }
}
```

После перезапуска инструменты доступны как `keyboard-layout-mcp_*`.

## Инструменты

| Инструмент | Назначение |
|---|---|
| `server_info` | Информация о сервере и раскладках. |
| `list_layouts` | Список раскладок: en, ru, de, fr. |
| `convert_layout` | Перевод `text` из `from_layout` в `to_layout`. |
| `detect` | Определение раскладки текста. |
| `fix` | Автоисправление «съехавшей» раскладки. |
| `t9` | Подбор слов по цифрам (`lang` = en \| ru \| auto). |
| `t9_a2z` | Буквы на цифровой клавише. |

Все инструменты — read-only, с аннотациями MCP (`readOnlyHint`,
`idempotentHint`, `openWorldHint`).

## Модель данных

- `server/main.py` — раскладки (`LAYOUTS`), частоты букв (`FREQ`), оценка
  «естественности» текста (частоты + доля гласных + бонус за длину).
- `server/t9_data.py` — цифровые раскладки T9 (`T9_EN`, `T9_RU`) и частотные
  словари (`WORDS_EN`, `WORDS_RU`). При импорте строится индекс
  `T9_INDEX[lang][код] -> [слова]`.

Словарь легко расширяется: добавьте слово в конец `WORDS_EN` / `WORDS_RU`.

## Проверка

```python
import asyncio, sys
sys.path.insert(0, ".")
from server import main

async def run():
    res = await main.mcp.call_tool("t9", {"sequence": "43556", "lang": "auto"})
    print("".join(c.text or "" for c in res.content if hasattr(c, "text")))

asyncio.run(run())
```

## Лицензия

MIT — см. [LICENSE](LICENSE).