MCP SGF服务器
A. 模型上下文协议(MCP) 用于处理SGF(智能游戏格式)文件的服务器。使用提取游戏信息并生成可视化棋盘图。
特性
- 提取全面的游戏信息 从SGF文件
- 生成可视化电路板图 具有可定制的主题和格式
- 高性能:游戏信息≤200ms,图表≤500ms
- 稳健的验证 具有详细的错误处理
- TypeScript严格模式 100%类型安全
- 91.73%的测试覆盖率 139项综合测试
- 多种输出格式:PNG和SVG支持
- 可定制的主题:经典、现代和简约风格
快速开始
NPX(推荐)
无需安装即可立即启动MCP服务器:
npx mcp-sgf服务器将启动并监听stdio上的MCP协议连接。
安装
全局安装以供重复使用:
npm install -g mcp-sgf
mcp-sgf开发设置
克隆并设置开发:
git clone
cd mcp-sgf
npm install
npm run build
npm start客户端配置
要将此服务器与MCP兼容的客户端(Claude Desktop等)一起使用,请添加以下配置:
Claude桌面配置(claude_desktop_config.json):
{
"mcpServers": {
"sgf": {
"command": "npx",
"args": ["mcp-sgf"]
}
}
}本地安装的替代方案:
{
"mcpServers": {
"sgf": {
"command": "mcp-sgf"
}
}
}用法
MCP SGF服务器提供了两个可以通过MCP协议调用的主要工具:
1.提取游戏信息(get-sgf-info)
从SGF文件中提取全面的元数据,包括玩家信息、游戏规则和结果。
{
"tool": "get-sgf-info",
"arguments": {
"sgfContent": "(;FF[4]GM[1]SZ[19]PB[Lee Sedol]PW[AlphaGo]BR[9p]WR[-]KM[7.5]RE[W+R]DT[2016-03-09];B[pd];W[dp];B[cd];W[qp])"
}
}答复:
{
"success": true,
"data": {
"gameInfo": {
"playerBlack": "Lee Sedol",
"playerWhite": "AlphaGo",
"blackRank": "9p",
"whiteRank": "-",
"boardSize": 19,
"komi": 7.5,
"result": "W+R",
"date": "2016-03-09",
"fileFormat": 4,
"gameType": 1
},
"metadata": {
"totalMoves": 4,
"boardSize": 19,
"hasValidStructure": true
},
"warnings": []
}
}2.生成电路板图(get-sgf-diagram)
创建可视化棋盘图,显示具有可定制外观的游戏位置。
{
"tool": "get-sgf-diagram",
"arguments": {
"sgfContent": "(;FF[4]GM[1]SZ[19];B[pd];W[dp];B[cd];W[qp];B[ed];W[fq])",
"moveNumber": 4,
"width": 800,
"height": 800,
"theme": "modern",
"coordLabels": true,
"moveNumbers": false,
"format": "png"
}
}答复:
{
"success": true,
"data": {
"mimeType": "image/png",
"width": 800,
"height": 800,
"movesCovered": 4,
"boardSize": 19,
"parameters": {
"moveNumber": 4,
"format": "png",
"theme": "modern"
}
}
}响应包括具有指定MIME类型的base64编码图像数据。
配置选项
游戏信息工具
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
sgfContent | string | ✓ | 完成SGF文件内容 |
图表工具
| 参数 | 类型 | 必填 | 默认 | 说明 |
|---|---|---|---|---|
sgfContent | string | ✓ | - | 完成SGF文件内容 |
moveNumber | 编号 | ✗ | final | 要显示的具体移动(基于1) |
startMove | 编号 | ✗ | - | 移动范围的开始(从1开始) |
endMove | 编号 | ✗ | - | 移动范围结束(从1开始) |
width | 编号 | ✗ | 600 | 图像宽度(100-2000) |
height | 编号 | ✗ | 600 | 图像高度(100-2000) |
coordLabels | boolean | ✗ | true | 显示坐标标签 |
moveNumbers | boolean | ✗ | true | 显示移动数字 |
theme | string | ✗ | 经典 | 视觉主题 |
format | string | ✗ | png | 输出格式 |
支持的主题
classic:传统木板配经典石材modern:干净、现代的外观minimal:简化设计,清晰明了
支持格式
png:光栅格式,最适合查看和共享svg:矢量格式,可缩放和可编辑
支持的电路板尺寸
- 范围:1×1至361×361板
- 共同: 9×9, 13×13, 19×19
- 自动:从SGF内容中检测大小
发展
脚本
npm run build # Build TypeScript to JavaScript
npm run dev # Development mode with watch
npm test # Run all tests with coverage
npm run lint # ESLint checking
npm run format # Prettier formatting
npm run type-check # TypeScript type checking客户端集成
MCP协议JSON示例
在以编程方式集成时,请使用以下JSON消息格式:
列出可用工具:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}呼叫获取SGF信息工具:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "get-sgf-info",
"arguments": {
"sgfContent": "(;FF[4]GM[1]SZ[19]PB[Lee Sedol]PW[AlphaGo]BR[9p]WR[-]KM[7.5]RE[W+R]DT[2016-03-09];B[pd];W[dp];B[cd];W[qp])"
}
}
}调用获取SGF图工具:
{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "get-sgf-diagram",
"arguments": {
"sgfContent": "(;FF[4]GM[1]SZ[19];B[pd];W[dp];B[cd];W[qp];B[ed];W[fq])",
"moveNumber": 4,
"width": 800,
"height": 800,
"theme": "modern",
"format": "png"
}
}
}项目结构
mcp-sgf/
├── src/
│ ├── index.ts # MCP server entry point
│ ├── tools/ # MCP tool implementations
│ │ ├── getSgfInfo.ts # Game information extraction
│ │ └── getSgfDiagram.ts # Diagram generation
│ ├── utils/ # Utility functions
│ │ ├── sgfParser.ts # SGF parsing logic
│ │ ├── diagramRenderer.ts # Image generation
│ │ └── validation.ts # Input validation
│ └── types/
│ └── sgf.ts # TypeScript type definitions
├── tests/ # Comprehensive test suite
├── docs/ # Documentation
└── package.json # Dependencies and scripts测试
# Run all tests
npm test
# Run specific test suite
npm test tests/getSgfInfo.test.ts
# Run with coverage report
npm test -- --coverage
# Run performance tests
npm test tests/performance.test.ts质量保证
- TypeScript:严格模式,100%类型覆盖
- ESLint:零警告,严格规则
- 更漂亮:一致的代码格式
- 速度:强制执行95%的覆盖率阈值
- 演出:响应时间目标已验证
错误处理
服务器提供具有特定错误类型的全面错误处理:
错误类型
| 类型 | 描述 |
|---|---|
INVALID_FORMAT | SGF内容格式无效 |
INVALID_PARAMETERS | 参数无效或缺失 |
PARSING_ERROR | 解析SGF内容失败 |
UNSUPPORTED_GAME | 不支持游戏类型 |
FILE_TOO_LARGE | SGF文件超出大小限制 |
错误响应示例
{
"success": false,
"error": {
"type": "INVALID_FORMAT",
"message": "Invalid SGF format. SGF files must start with '(' and end with ')' and contain at least one property.",
"details": {}
}
}许可证
MIT许可证-请参阅 许可证 文件以获取详细信息。
