llm-chess-mcp
llm-chess-mcp
MCP-среда для игры в шахматы, которая позволяет LLM играть, анализировать и адаптировать свою силу, не перекладывая каждое решение на движок.
Вместо возврата единственного лучшего хода она предоставляет объективную силу (Stockfish), вероятность человеческого хода (Maia3) и статистику реальных партий (Lichess), чтобы LLM могла сама выбирать, как играть. LLM отвечает за стратегию и суждения; MCP-сервер выполняет все вычисления.
Движки
Движок | Роль | Среда выполнения |
Stockfish 18 (WASM) | Объективная оценка, лучшие ходы, multipv | Внутри процесса (npm |
Maia3 5M (ONNX) | Вероятности человеческих ходов в зависимости от Elo | Внутри процесса ( |
Lichess explorer | Статистика реальных человеческих партий | HTTP (требуется токен) |
Всё выполняется внутри процесса Node — на этапе развёртывания не требуется внешний процесс движка или среда Python. Опубликованный пакет включает модель Maia3 5M; другие варианты экспорта не являются вариантами выполнения, если их ONNX-файлы не предоставлены отдельно.
Related MCP server: Chess MCP
Установка
Требуется Node.js 20 или новее.
Установка не требуется — запустите напрямую через npx:
npx -y llm-chess-mcpМодель Maia3 уже включена, поэтому не нужно устанавливать Python, torch или бинарные файлы движка. npx загружает пакет при первом запуске и кэширует его.
Чтобы установить его постоянно, вместо этого:
npm install -g llm-chess-mcpСборка из исходников
pnpm install
pnpm build
pnpm testpnpm test:unit запускает набор модульных тестов. pnpm test:e2e сначала выполняет сборку, затем запускает тесты транспорта MCP. pnpm check выполняет полный локальный контроль; перед публикацией используйте pnpm release:check.
Поддержка
Архитектура описывает границы среды выполнения и сервисов.
Локальные команды проверки качества:
pnpm typecheck
pnpm test:coverage
pnpm contract:check
pnpm check
pnpm test:packagepnpm test:stress запускает короткую проверку параллельности с реальным движком. pnpm test:live обращается к Lichess только при установленном LICHESS_TOKEN; в противном случае он пропускается без сетевого запроса.
Экспорт Maia3 в ONNX (только на этапе сборки)
Этот шаг требует Python + PyTorch один раз. Он загружает контрольную точку Maia3, проверяет реimplementation на соответствие оригиналу и экспортирует models/maia3-5m.onnx.
uv venv .venv-maia3 --python 3.13
uv pip install --python .venv-maia3/bin/python -r scripts/requirements.txt
uv pip install --python .venv-maia3/bin/python "maia3 @ git+https://github.com/CSSLab/maia3.git@1e13597c42d4858b7cfd7cfdae01e297263364b2"
pnpm export:maia3 # -> models/maia3-5m.onnxПолученный файл .onnx фиксируется/включается в пакет; конечным пользователям никогда не нужны Python или torch.
Токен Lichess (необязательно)
Обозреватель дебютов теперь требует аутентификации. Создайте персональный токен доступа на https://lichess.org/account/oauth/token/create и укажите его в .env:
cp .env.example .env
# set LICHESS_TOKEN=...Без токена opening_explorer возвращает уведомление об отключении; все остальные инструменты работают.
Фильтры обозревателя строгие. Скорости: ultraBullet, bullet, blitz, rapid, classical и correspondence; диапазоны рейтинга: 0, 1000, 1200, 1400, 1600, 1800, 2000, 2200 и 2500. masters не принимает ни один из фильтров. Недействительные фильтры отклоняются локально. Временные сбои (сеть, таймаут, 429 и 5xx) повторяются один раз в пределах общего бюджета в 12 секунд; недействительные запросы и другие ответы 4xx не повторяются.
Настройка в вашем MCP-клиенте
opencode
Добавьте в opencode.json (проект) или ~/.config/opencode/opencode.json (глобально):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"llm-chess-mcp": {
"type": "local",
"command": ["npx", "-y", "llm-chess-mcp"],
"enabled": true,
"environment": {
"LICHESS_TOKEN": "your-token"
}
}
}
}Claude Code
Добавьте в .mcp.json (проект) или ~/.claude.json (глобально) или выполните:
claude mcp add llm-chess-mcp -- npx -y llm-chess-mcp{
"mcpServers": {
"llm-chess-mcp": {
"command": "npx",
"args": ["-y", "llm-chess-mcp"],
"env": {
"LICHESS_TOKEN": "your-token"
}
}
}
}Codex CLI
Добавьте в ~/.codex/config.toml:
[mcp_servers.llm-chess-mcp]
command = "npx"
args = ["-y", "llm-chess-mcp"]
[mcp_servers.llm-chess-mcp.env]
LICHESS_TOKEN = "your-token"Или через CLI:
codex mcp add llm-chess-mcp --command npx --args -y llm-chess-mcp --env LICHESS_TOKEN=your-tokenИнструменты
Инструмент | Описание |
| Создать игру (опционально из FEN), возвращает |
| Удалить игру и освободить её сессию |
| Авторитетное состояние: FEN, очередь, ревизия, флаги шаха/мата/ничьей, история, последний ход, рокировка (опционально ASCII) |
| Сделать ход (SAN или UCI) — единственный изменяющий инструмент, с защитой от устаревшей позиции |
| Все легальные ходы с метаданными |
| Экспортировать игру в PGN |
| Импортировать PGN в новую игру |
| Линии Stockfish multipv (cp/mate/WDL + PV), пресет |
| Вероятности человеческих ходов Maia3 при целевом Elo |
| Оценить один или несколько ходов + cpLoss + классификация |
| Основной инструмент: объединённые кандидаты (объективные + человеческие + дебютные) |
| Удобный слой: кандидаты, ранжированные по стратегическому намерению |
| Статистика человеческих партий Lichess |
Формат результатов
structuredContent — это канонический успешный результат. Сбои на уровне обработчика устанавливают isError и предоставляют structuredContent.error. Сбои схемы ввода генерируются MCP SDK до обработчика и используют его стандартный текстовый результат isError без structuredContent. В противном случае content — это лишь краткое человекочитаемое резюме, и его нельзя разбирать как данные.
Соглашения о счёте
Оценки Stockfish даны с точки зрения стороны, делающей ход: положительный cp означает, что сторона, делающая ход, лучше;
mate Nозначает, что сторона, делающая ход, ставит мат за N ходов.wdl— это[win, draw, loss]в промилле для стороны, делающей ход.move_candidatesвозвращаетmoverCp(точка зрения делающего ход — чем выше, тем лучше для игрока, выбирающего ход) иwhiteCp(фиксированная точка зрения белых), чтобы знак никогда не менялся.move_evaluateсообщает оценку с точки зрения делающего ход, а такжеcpLoss(потерянные сотые пешки по сравнению с лучшим ходом) и классификацию:best / excellent / good / inaccuracy / mistake / blunder.maia3Prob— это вероятность человеческого хода, а не качество хода. Ход с высокой вероятностью может быть объективно плохим.
Структура кандидатов
move_candidates возвращает каждого кандидата с тремя независимыми аспектами:
{
"uci": "g1f3",
"san": "Nf3",
"objective": { "rank": 1, "moverCp": 55, "whiteCp": 55, "cpLoss": 0, "moverMate": null, "wdl": [153, 844, 3] },
"human": { "maia3Prob": 0.62, "selfElo": 1500, "opponentElo": 1500 },
"opening": { "status": "available", "games": 18421, "frequency": 0.31 }
}objective— Stockfish: сила движка, никогда не смешивается с человечностью.moverCp— с точки зрения делающего ход (чем выше, тем лучше для выбирающего).human— условная вероятность Maia3 при целевом Elo.opening— эмпирическая частота Lichess (другой сигнал, чем Maia3).
opening.status может быть available, no_data (API работает, но нет партий в этой позиции), unavailable (таймаут/429/401) или disabled (нет токена). Результаты Stockfish + Maia3 возвращаются всегда, независимо от этого.
move_candidates также возвращает moveSensitivity, описывающий, насколько резко меняется оценка между лучшими линиями движка:
{ "moveSensitivity": { "level": "high", "topMoveSpreadCp": 245 } }level может быть low (разброс <80cp), medium (80–200cp) или high (≥200cp). Высокая чувствительность означает, что выбор среди правдоподобных альтернатив может существенно изменить оценку — это полезно для решения, стоит ли ослабить игру или играть точно.
Уровни анализа
Инструменты Stockfish принимают пресет analysis_level вместо сырых параметров UCI:
Уровень | Глубина | MultiPV |
| 8 | 5 |
| 15 | 8 |
| 22 | 10 |
Явные переопределения depth/multipv по-прежнему доступны для продвинутого использования.
Защита от устаревшей позиции
Каждое чтение состояния возвращает revision. game_play_move требует expected_revision; если игра продвинулась с момента вашего последнего чтения, ход отклоняется:
{ "error": { "code": "STALE_POSITION", "message": "position changed: expected revision 2, current 3" } }Ограничения выполнения
Сохраняется до 1 000 игровых сессий; неактивные сессии истекают через один час.
move_evaluateпринимает не более 10 ходов за вызов.Импортируемые PGN ограничены 1 МиБ и 4 096 полуходами.
Stockfish принимает до 32 активных или поставленных в очередь анализов.
Намерения
move_candidates_by_intent ранжирует кандидатов для выбранного намерения. Это удобный слой поверх move_candidates; фиксированные пороги ниже являются эвристическими значениями по умолчанию, а не источником истины:
Намерение | Значение |
| Самый сильный ход движка |
| Сильный по движку, но правдоподобный для человека |
| Наиболее типичный для человека при целевом Elo |
| Смесь силы и человечности |
| Правдоподобные для человека ходы, которые умеренно снижают преимущество, не меняя ожидаемый результат |
| Правдоподобные для человека неточности, которые существенно улучшают шансы соперника |
Этот инструмент ранжирует кандидатов, но не выбирает ход. Используйте возвращённые сигналы и контекст разговора для принятия окончательного решения — не сопоставляйте уровень игрока механически с намерением.
Пример потока
Обычный цикл игры состоит из трёх вызовов:
create_game→game_idmove_candidates→ выберите ходgame_play_move(сexpected_revision) → зафиксируйте его
Углубляйтесь только при необходимости:
position_analyze— объективные лучшие линииhuman_move_distribution— что сыграл бы человек с данным Eloopening_explorer— статистика реальных партийmove_evaluate— оцените конкретный ход (или сравните несколько)
Проверка ONNX Maia3
Экспортированная модель ONNX проходит регрессионное тестирование против исходной реализации Maia3 на фиксированных позициях и парах Elo:
.venv-maia3/bin/python scripts/verify_maia3.py --model 5mОна проверяет согласованность ходов top-1/top-k и максимальную ошибку вероятности для обнаружения регрессий экспорта/выполнения. Встроенный maia3-5m.onnx проходит с 100% согласованностью top-1 и top-5 и максимальной ошибкой вероятности < 1e-4.
Проверка пакета
Артефакты пакета проверяются локально; этот проект намеренно не имеет размещённого CI-процесса.
Запустите pnpm check для детерминированного офлайн-контроля. Используйте pnpm test:package, чтобы упаковать проект, установить архив в чистую временную директорию и запустить установленный бинарник llm-chess-mcp против реальных сред выполнения Stockfish и Maia. pnpm release:check выполняет обе проверки, а также аудит производственных зависимостей и пробный запуск манифеста пакета.
Лицензия и атрибуция
Этот проект лицензирован под AGPL-3.0 (см. LICENSE).
Он включает и зависит от сторонних компонентов:
Компонент | Лицензия | Источник |
Maia3 (Chessformer) | AGPL-3.0 | UofT CSSLab — Monroe et al., Chessformer: унифицированная архитектура для моделирования шахмат (ICLR 2026) |
Stockfish (через npm | GPL-3.0 | Разработчики Stockfish |
MIT | Microsoft | |
BSD-2-Clause | Jeff Hlywa |
Встроенная модель Maia3 (models/maia3-5m.onnx) получена из
UofTCSSLab/Maia3-5M на b6559de2398d7140b985f28fd2c19fb5e47ddabe.
Экспорт в ONNX выполняется на этапе сборки (scripts/export_maia3.py); во время выполнения
не исполняется никакой Python-код Maia3.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that lets your AI talk to Stockfish. Because apparently we needed to make chess engines even more accessible to our silicon overlords.15MIT
- AlicenseNot gradedqualityDmaintenanceA powerful chess engine and game server built with the Model Context Protocol (MCP). Play chess against AI, analyze positions, and integrate chess functionality into your AI applications.281ISC
- AlicenseAqualityBmaintenanceA hybrid AI chess coach MCP server that uses Stockfish for grounded evaluation and LLM for natural-language coaching, enabling game analysis, weakness diagnosis, and personalized drills from your own games.61MIT
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for AI dialogue using various LLM models via AceDataCloud
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/prepaser/llm-chess-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server