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
- Petición
initialize:- Recibe en
params:protocolVersion(ej."2025-06-18"),capabilitiesyclientInfo.
- Recibe en
- 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
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"capabilities": {},
"clientInfo": { "name": "tests", "version": "1" }
}
}
Formato de Salida
{
"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
- Detecta el método
"initialize":- Extrae
protocolVersiondeparams(por defecto"2025-06-18").
- Extrae
- Construye el objeto
result:json { "protocolVersion": "2025-06-18", "capabilities": { "tools": {}, "resources": {} }, "serverInfo": { "name": "shipcode-mcp", "version": "1.0.0" } } - 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
initializeconserverInfoy capacidades detoolsyresources. - ✅ 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.
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.