国际象棋引擎分析服务器

一个提供专业级国际象棋分析服务的模型上下文协议(MCP)服务器,支持Stockfish和Leela Chess Zero引擎。

  • by alegerber
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 alegerber/Stockfish-MCP-Server

使用说明

国际象棋引擎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(推荐)

# Published image (Stockfish + Lc0 + Maia-1900 baked in; linux/amd64 + arm64)
docker run -i ghcr.io/alegerber/stockfish-lc0-mcp:latest

# …or build it yourself — Stockfish only
docker build -t stockfish-lc0-mcp .
docker run -i stockfish-lc0-mcp

# With Lc0 (mount weights file)
docker run -i \
  -e LC0_WEIGHTS_PATH=/weights/lc0.pb.gz \
  -v /path/to/weights:/weights \
  stockfish-lc0-mcp

# Or with docker compose
docker compose up --build

选项2:npm(npx)

先决条件:Node.js 22+和本地安装的Stockfish——请参阅下面的安装命令 选项3npm包确实如此 不 捆绑引擎——Docker镜像就是这么做的。

npx stockfish-lc0-mcp

选项3:本地Node.js(源代码)

先决条件:Node.js 22+(CI在LTS 22、24、26上测试),安装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", "stockfish-lc0-mcp"]
    }
  }
}

Docker(Stockfish+Lc0)

{
  "mcpServers": {
    "chess": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "LC0_WEIGHTS_PATH=/weights/lc0.pb.gz",
        "-v", "/path/to/weights:/weights",
        "stockfish-lc0-mcp"
      ]
    }
  }
}

npm(npx)

需要本地安装的Stockfish(请参阅 快速开始).集 STOCKFISH_PATH 显式:GUI启动的客户端(例如macOS上的Claude Desktop)不会继承您的shell PATH,所以光秃秃的 stockfish 即使查找失败 brew install stockfish 成功。

{
  "mcpServers": {
    "chess": {
      "command": "npx",
      "args": ["-y", "stockfish-lc0-mcp"],
      "env": {
        "STOCKFISH_PATH": "/opt/homebrew/bin/stockfish"
      }
    }
  }
}

本地Node.js

{
  "mcpServers": {
    "chess": {
      "command": "node",
      "args": ["/path/to/stockfish-lc0-mcp/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, 150+ tests)
npm run lint         # ESLint

许可证

麻省理工学院