国际象棋引擎MCP服务器
模型上下文协议(MCP)服务器为AI助手提供专业级的国际象棋分析,使用 长筒鱼 (α-β)和可选 莉拉国际象棋零/Lc0 (神经网络)。两个引擎共享相同的工具界面,并在配置Lc0时并排运行。
特性
Stockfish工具(始终可用)
| 工具 | 说明 |
|---|---|
sf_analyse_position | 分析任何位置(FEN→ 评估+最佳移动+顶线) |
sf_analyse_game | 完整游戏分析(PGN→ 逐个移动评估,准确率%,错误计数) |
sf_lookup_opening | 按名称或ECO代码搜索打开的数据库 |
sf_identify_opening | 从移动或PGN中识别开口 |
sf_generate_puzzle | 从位置生成战术谜题 |
Lc0工具(启用时 LC0_WEIGHTS_PATH 已设置)
| 工具 | 说明 |
|---|---|
lc0_analyse_position | 用Lc0神经网络分析位置 |
lc0_analyse_game | 使用Lc0评估的完整游戏分析 |
lc0_generate_puzzle | 使用Lc0的评估生成战术谜题 |
快速开始
选项1:Docker(推荐)
# Stockfish only
docker build -t chess-mcp-server .
docker run -i chess-mcp-server
# With Lc0 (mount weights file)
docker run -i \
-e LC0_WEIGHTS_PATH=/weights/lc0.pb.gz \
-v /path/to/weights:/weights \
chess-mcp-server
# Or with docker compose
docker compose up --build选项2:本地Node.js
先决条件:Node.js 22+,已安装Stockfish二进制文件。
# Install Stockfish
# macOS: brew install stockfish
# Ubuntu: sudo apt install stockfish
# Windows: download from https://stockfishchess.org/download/
# Install dependencies and build
npm install
npm run build
# Run (Stockfish only)
npm start
# Run with Lc0
LC0_WEIGHTS_PATH=/path/to/lc0.pb.gz npm start配置
鱼类环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
STOCKFISH_PATH | stockfish | Stockfish二进制文件的路径 |
STOCKFISH_THREADS | 2 | CPU线程数 |
STOCKFISH_HASH | 128 | 哈希表大小(MB) |
Lc0环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
LC0_WEIGHTS_PATH | *(未设置)* | 通往a的道路 .pb.gz 权重文件-- 需要启用Lc0 |
LC0_PATH | lc0 | Lc0二进制文件的路径 |
LC0_BACKEND | *(自动)* | Lc0后端: cuda, metal, cpu等等。 |
LC0_THREADS | 2 | Lc0的CPU线程数 |
LC0_HASH | 128 | Lc0的哈希表大小(MB) |
注: 这 depth Lc0工具的参数通过指数表在内部映射到节点计数(深度1处有100个节点→ 1 000 000 因为MCTS深度与α-β深度不可比。Claude桌面集成
添加到您的 claude_desktop_config.json:
Docker(仅限Stockfish)
{
"mcpServers": {
"chess": {
"command": "docker",
"args": ["run", "-i", "--rm", "chess-mcp-server"]
}
}
}Docker(Stockfish+Lc0)
{
"mcpServers": {
"chess": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "LC0_WEIGHTS_PATH=/weights/lc0.pb.gz",
"-v", "/path/to/weights:/weights",
"chess-mcp-server"
]
}
}
}本地Node.js
{
"mcpServers": {
"chess": {
"command": "node",
"args": ["/path/to/chess-mcp-server/dist/index.js"],
"env": {
"STOCKFISH_PATH": "stockfish",
"STOCKFISH_THREADS": "2",
"STOCKFISH_HASH": "256",
"LC0_PATH": "lc0",
"LC0_WEIGHTS_PATH": "/path/to/lc0.pb.gz"
}
}
}
}用法示例
长筒鱼
“分析此位置:rnbqkbnr/ppppppp/8/8/4P3/8/PPP1PPP/rnbqkbnr b KQkq-0 1”
“回顾这个游戏:1。e4 e5 2。Qh5 Nc6 3。Nf3 g6 4。Qh4 Be7。.."
“什么是任性的女王袭击?”
“什么是1。e4 e5 2。Nf3 Nc6 3。Bc4?"
“从这个位置创建一个战术谜题:\[FEN\]”
Lc0
“神经网络对这个位置有什么看法?”
“用Lc0分析这款游戏,并与Stockfish进行比较:1。e4 e5。.."
“在此位置使用Lc0查找战术:\[FEN\]”
建筑
src/
├── index.ts # MCP server entry, tool registration (Stockfish + Lc0)
├── types.ts # TypeScript interfaces (UciEngine, UciLine, UciScore, …)
├── constants.ts # Thresholds, defaults, LC0_DEPTH_TO_NODES mapping
├── schemas/
│ └── index.ts # Zod input validation schemas
├── services/
│ ├── engine.ts # BaseUciEngine, StockfishEngine, Lc0Engine
│ ├── chess-utils.ts # chess.js wrapper (PGN/FEN/SAN/openings)
│ └── formatting.ts # Markdown output formatting
└── tools/
├── analyse-position.ts # Single position analysis
├── analyse-game.ts # Full game analysis + accuracy model
├── openings.ts # Opening lookup & identification
└── puzzle.ts # Tactic puzzle generation两台发动机均执行 UciEngine 接口,在工具层可互换——所有工具函数都接受 UciEngine 参数,所以 sf_* 和 lc0_* 工具与不同的引擎实例共享相同的逻辑。
发展
npm install # Install dependencies
npm run build # Compile TypeScript → dist/
npm test # Run unit tests (Vitest, ~125 tests)
npm run lint # ESLint许可证
麻省理工学院
