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).This server cannot be deployed
Maintenance
ActivityMaintained
ResponsivenessNo issues