MCP SGF Server

Procesa archivos SGF (Smart Game Format) para extraer información de partidas y generar diagramas visuales del tablero.

Documentación

Servidor MCP SGF

Un servidor Model Context Protocol (MCP) para procesar archivos SGF (Smart Game Format). Extrae información de partidas y genera diagramas visuales de tablero.

Características

  • Extrae información completa de la partida de archivos SGF
  • Genera diagramas visuales de tablero con temas y formatos personalizables
  • Alto rendimiento: ≤200ms para información de partida, ≤500ms para diagramas
  • Validación robusta con manejo detallado de errores
  • Modo estricto de TypeScript con 100% de seguridad de tipos
  • 91.73% de cobertura de pruebas con 139 pruebas exhaustivas
  • Múltiples formatos de salida: soporte para PNG y SVG
  • Temas personalizables: estilos clásico, moderno y minimalista

Inicio Rápido

NPX (Recomendado)

Inicia el servidor MCP al instante sin instalación:

npx mcp-sgf

El servidor se iniciará y escuchará conexiones del protocolo MCP en stdio.

Instalación

Instala globalmente para uso repetido:

npm install -g mcp-sgf
mcp-sgf

Configuración de Desarrollo

Clona y configura para desarrollo:

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

Configuración del Cliente

Para usar este servidor con clientes compatibles con MCP (Claude Desktop, etc.), añade la siguiente configuración:

Configuración de Claude Desktop (claude_desktop_config.json):

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

Alternativa con instalación local:

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

Uso

El servidor MCP SGF proporciona dos herramientas principales que se pueden invocar mediante el protocolo MCP:

1. Extraer Información de la Partida (get-sgf-info)

Extrae metadatos completos de archivos SGF, incluyendo información de jugadores, reglas de juego y 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])"
  }
}

Respuesta:

{
  "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. Generar Diagramas de Tablero (get-sgf-diagram)

Crea diagramas visuales de tablero que muestran posiciones de juego con apariencia personalizable.

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

Respuesta:

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

La respuesta incluye datos de imagen codificados en base64 con el tipo MIME especificado.

Opciones de Configuración

Herramienta de Información de Partida

ParámetroTipoRequeridoDescripción
sgfContentstring✓Contenido completo del archivo SGF

Herramienta de Diagramas

ParámetroTipoRequeridoPredeterminadoDescripción
sgfContentstring✓-Contenido completo del archivo SGF
moveNumbernumber✗finalMovimiento específico a mostrar (basado en 1)
startMovenumber✗-Inicio del rango de movimientos (basado en 1)
endMovenumber✗-Fin del rango de movimientos (basado en 1)
widthnumber✗600Ancho de imagen (100-2000)
heightnumber✗600Alto de imagen (100-2000)
coordLabelsboolean✗trueMostrar etiquetas de coordenadas
moveNumbersboolean✗trueMostrar números de movimientos
themestring✗classicTema visual
formatstring✗pngFormato de salida

Temas Soportados

  • classic: Tablero de madera tradicional con piedras clásicas
  • modern: Apariencia limpia y contemporánea
  • minimal: Diseño simplificado para mayor claridad

Formatos Soportados

  • png: Formato rasterizado, ideal para visualizar y compartir
  • svg: Formato vectorial, escalable y editable

Tamaños de Tablero Soportados

  • Rango: Tableros de 1×1 a 361×361
  • Comunes: 9×9, 13×13, 19×19
  • Automático: Detección de tamaño desde el contenido SGF

Desarrollo

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

Integración con Clientes

Ejemplos JSON del Protocolo MCP

Al integrar programáticamente, usa estos formatos de mensajes JSON:

Listar Herramientas Disponibles:

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

Llamar a la Herramienta Obtener Información 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])"
    }
  }
}

Llamar a la Herramienta Obtener Diagrama 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"
    }
  }
}

Estructura del Proyecto

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

Pruebas

# 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

Aseguramiento de Calidad

  • TypeScript: Modo estricto con 100% de cobertura de tipos
  • ESLint: Cero advertencias con reglas estrictas
  • Prettier: Formato de código consistente
  • Vitest: Umbral de cobertura del 95% aplicado
  • Rendimiento: Objetivos de tiempo de respuesta validados

Manejo de Errores

El servidor proporciona manejo exhaustivo de errores con tipos de error específicos:

Tipos de Error

TipoDescripción
INVALID_FORMATEl contenido SGF no tiene un formato válido
INVALID_PARAMETERSParámetros inválidos o faltantes
PARSING_ERRORFallo al analizar el contenido SGF
UNSUPPORTED_GAMETipo de juego no soportado
FILE_TOO_LARGEEl archivo SGF excede los límites de tamaño

Ejemplo de Respuesta de Error

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

Licencia

Licencia MIT - consulta el archivo LICENSE para más detalles.

Documentación