MCP SGF Server

Processa arquivos SGF (Smart Game Format) para extrair informações de jogos e gerar diagramas visuais do tabuleiro.

Documentação

MCP SGF Server

Um servidor Model Context Protocol (MCP) para processar arquivos SGF (Smart Game Format). Extraia informações do jogo e gere diagramas visuais do tabuleiro.

Recursos

  • Extraia informações abrangentes do jogo de arquivos SGF
  • Gere diagramas visuais do tabuleiro com temas e formatos personalizáveis
  • Alto desempenho: ≤200ms para informações do jogo, ≤500ms para diagramas
  • Validação robusta com tratamento detalhado de erros
  • Modo estrito TypeScript com 100% de segurança de tipos
  • 91,73% de cobertura de testes com 139 testes abrangentes
  • Múltiplos formatos de saída: suporte a PNG e SVG
  • Temas personalizáveis: estilos clássico, moderno e minimalista

Início Rápido

NPX (Recomendado)

Inicie o servidor MCP instantaneamente sem instalação:

npx mcp-sgf

O servidor iniciará e aguardará conexões do protocolo MCP no stdio.

Instalação

Instale globalmente para uso repetido:

npm install -g mcp-sgf
mcp-sgf

Configuração de Desenvolvimento

Clone e configure para desenvolvimento:

git clone <repository-url>
cd mcp-sgf
npm install
npm run build
npm start

Configuração do Cliente

Para usar este servidor com clientes compatíveis com MCP (Claude Desktop, etc.), adicione a seguinte configuração:

Configuração do Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "sgf": {
      "command": "npx",
      "args": ["mcp-sgf"]
    }
  }
}

Alternativa com instalação local:

{
  "mcpServers": {
    "sgf": {
      "command": "mcp-sgf"
    }
  }
}

Uso

O servidor MCP SGF fornece duas ferramentas principais que podem ser chamadas via protocolo MCP:

1. Extrair Informações do Jogo (get-sgf-info)

Extraia metadados abrangentes de arquivos SGF, incluindo informações dos jogadores, regras do jogo e resultados.

{
  "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])"
  }
}

Resposta:

{
  "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. Gerar Diagramas do Tabuleiro (get-sgf-diagram)

Crie diagramas visuais do tabuleiro mostrando posições do jogo com aparência personalizável.

{
  "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"
  }
}

Resposta:

{
  "success": true,
  "data": {
    "mimeType": "image/png",
    "width": 800,
    "height": 800,
    "movesCovered": 4,
    "boardSize": 19,
    "parameters": {
      "moveNumber": 4,
      "format": "png",
      "theme": "modern"
    }
  }
}

A resposta inclui dados de imagem codificados em base64 com o tipo MIME especificado.

Opções de Configuração

Ferramenta de Informações do Jogo

ParâmetroTipoObrigatórioDescrição
sgfContentstring✓Conteúdo completo do arquivo SGF

Ferramenta de Diagrama

ParâmetroTipoObrigatórioPadrãoDescrição
sgfContentstring✓-Conteúdo completo do arquivo SGF
moveNumbernumber✗finalMovimento específico a exibir (base 1)
startMovenumber✗-Início do intervalo de movimentos (base 1)
endMovenumber✗-Fim do intervalo de movimentos (base 1)
widthnumber✗600Largura da imagem (100-2000)
heightnumber✗600Altura da imagem (100-2000)
coordLabelsboolean✗trueMostrar rótulos de coordenadas
moveNumbersboolean✗trueMostrar números dos movimentos
themestring✗classicTema visual
formatstring✗pngFormato de saída

Temas Suportados

  • classic: Tabuleiro de madeira tradicional com pedras clássicas
  • modern: Aparência limpa e contemporânea
  • minimal: Design simplificado para clareza

Formatos Suportados

  • png: Formato raster, ideal para visualização e compartilhamento
  • svg: Formato vetorial, escalável e editável

Tamanhos de Tabuleiro Suportados

  • Intervalo: tabuleiros de 1×1 a 361×361
  • Comuns: 9×9, 13×13, 19×19
  • Automático: detecção de tamanho a partir do conteúdo SGF

Desenvolvimento

Scripts

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

Integração com o Cliente

Exemplos JSON do Protocolo MCP

Ao integrar programaticamente, use estes formatos de mensagem JSON:

Listar Ferramentas Disponíveis:

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/list"
}

Chamar Ferramenta Get SGF Info:

{
  "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])"
    }
  }
}

Chamar Ferramenta Get SGF Diagram:

{
  "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"
    }
  }
}

Estrutura do Projeto

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

Testes

# 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

Garantia de Qualidade

  • TypeScript: Modo estrito com 100% de cobertura de tipos
  • ESLint: Zero avisos com regras estritas
  • Prettier: Formatação de código consistente
  • Vitest: Limite de 95% de cobertura aplicado
  • Desempenho: Metas de tempo de resposta validadas

Tratamento de Erros

O servidor fornece tratamento abrangente de erros com tipos de erro específicos:

Tipos de Erro

TipoDescrição
INVALID_FORMATO conteúdo SGF não está em formato válido
INVALID_PARAMETERSParâmetros inválidos ou ausentes
PARSING_ERRORFalha ao analisar o conteúdo SGF
UNSUPPORTED_GAMETipo de jogo não suportado
FILE_TOO_LARGEO arquivo SGF excede os limites de tamanho

Exemplo de Resposta de Erro

{
  "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": {}
  }
}

Licença

Licença MIT - consulte o arquivo LICENSE para obter detalhes.

Documentação