SGF文件处理服务器

MCP协议服务器,用于处理SGF(智能游戏格式)文件,提取游戏信息并生成可视化的棋盘图。

  • by ragnar-johannsson
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ragnar-johannsson/mcp-sgf

使用说明

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 <repository-url>
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许可证-请参阅 许可证 文件以获取详细信息。

文档