Construye tu propio servidor MCP
Etapa 2 de 5v2 · a3b31b17

Negocia la sesión MCP

Implementa initialize y anuncia la identidad y capacidades del servidor.

Constrúyelo en tu lenguaje

El tester trata tu programa como una caja negra: sirve cualquier lenguaje. Estos son los más cómodos para este proyecto.

Negociación Inicial del Protocolo MCP (Initialize Handshake)

Antes de invocar herramientas o recursos, el cliente MCP debe realizar un apretón de manos (handshake) mediante el método initialize, informando su versión del protocolo y recibiendo las capacidades del servidor.

Modelo mental: Parámetros y Respuesta de Initialize

  1. Petición initialize:
    • Recibe en params: protocolVersion (ej. "2025-06-18"), capabilities y clientInfo.
  2. Respuesta del Servidor:
    • protocolVersion: Debe reflejar la versión negociada ("2025-06-18").
    • capabilities: Las funcionalidades soportadas por el servidor: {"tools": {}, "resources": {}}.
    • serverInfo: Información de identidad del servidor: {"name": "shipcode-mcp", "version": "1.0.0"}.

Tu objetivo en esta etapa

Procesar el método "initialize" y responder con los metadatos de capacidades e información del servidor.

Formato de Entrada

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "initialize",
  "params": {
    "protocolVersion": "2025-06-18",
    "capabilities": {},
    "clientInfo": { "name": "tests", "version": "1" }
  }
}

Formato de Salida

json
{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "protocolVersion": "2025-06-18",
    "capabilities": { "tools": {}, "resources": {} },
    "serverInfo": { "name": "shipcode-mcp", "version": "1.0.0" }
  }
}

Qué debes hacer paso a paso

  1. Detecta el método "initialize":
    • Extrae protocolVersion de params (por defecto "2025-06-18").
  2. Construye el objeto result:
    json
    {
      "protocolVersion": "2025-06-18",
      "capabilities": {
        "tools": {},
        "resources": {}
      },
      "serverInfo": {
        "name": "shipcode-mcp",
        "version": "1.0.0"
      }
    }
    
  3. Emite la respuesta: Envía la respuesta JSON-RPC con el mismo id. Continúa atendiendo peticiones subsecuentes (como "ping").

Criterios de aceptación

  • ✅ Responde a initialize con serverInfo y capacidades de tools y resources.
  • ✅ Mantiene compatibilidad con el método ping.

Versión soportada

Este proyecto implementa 2025-06-18. Devuelve esa versión si el cliente la solicita y también como alternativa si solicita una versión distinta. No reflejes una versión que no implementas. El cliente decide si acepta la alternativa. Después del handshake envía notifications/initialized, que no genera respuesta. Cierra limpiamente al recibir EOF.

MCP lifecycle.

Formato de salida y errores

Los ejemplos multilínea se muestran así para facilitar la lectura. Emite JSON compacto, sin espacios opcionales, con las propiedades en el orden de los ejemplos de salida y un salto de línea final. No escribas logs en stdout. Las pruebas comparan texto exacto.

Soluciones

Ver soluciones · Se abre en una pestaña nueva