Habla JSON-RPC
Procesa peticiones ping delimitadas por líneas y conserva sus identificadores.
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.
Bucle Base de Mensajes JSON-RPC 2.0 (Ping)
El protocolo Model Context Protocol (MCP) utiliza JSON-RPC 2.0 como capa de transporte sobre la entrada y salida estándar (stdin y stdout), separando cada mensaje con un salto de línea (\n).
Modelo mental: Mensajes JSON-RPC sobre stdin/stdout
- Petición del cliente: Llega por stdin como una línea con formato
{"jsonrpc": "2.0", "id": 1, "method": "ping"}. - Identificador (
id): Puede ser un número o una cadena (ej.1o"p-2"). La respuesta debe incluir exactamente el mismo identificador. - Respuesta estándar: Para el método
"ping", el servidor responde con un objeto vacío enresult:{"jsonrpc": "2.0", "id": <mismoId>, "result": {}}.
Tu objetivo en esta etapa
Leer mensajes JSON línea por línea desde stdin, procesar peticiones con método "ping" y emitir la respuesta correspondiente por stdout terminada en salto de línea.
Formato de Entrada
{ "jsonrpc": "2.0", "id": 1, "method": "ping" }
Formato de Salida
{ "jsonrpc": "2.0", "id": 1, "result": {} }
Qué debes hacer paso a paso
- Lee línea por línea: Configura un lector de líneas sobre
stdin(por ejemplo, conreadlineen Node.js o iterando sobre líneas en Python/Rust/Go). - Parsea cada línea como JSON:
- Extrae
jsonrpc,idymethod.
- Extrae
- Maneja el método
"ping":- Construye el objeto de respuesta:
{ jsonrpc: "2.0", id: req.id, result: {} }.
- Construye el objeto de respuesta:
- Serializa y emite la respuesta: Escribe la cadena JSON en
stdoutseguida de un salto de línea (\n).
Criterios de aceptación
- ✅ Responde con
jsonrpc: "2.0"y el mismoidrecibido. - ✅ Para el método
"ping", devuelveresult: {}. - ✅ Soporta identificadores numéricos y alfanuméricos.
Cómo empezar y comprobar tu avance
Abre el README de la plantilla de tu lenguaje y ejecuta desde su raíz el comando build de shipcode.yml, si existe, seguido de run. La plantilla está incompleta: al principio debe fallar con un diagnóstico de implementación pendiente. Después de desarrollar esta etapa, usa shipcode test; conserva los comportamientos de las etapas anteriores y usa shipcode submit cuando pasen.
Puedes usar una biblioteca JSON para el sobre de entrada y salida. Esa biblioteca no debe resolver el algoritmo del proyecto. Si tu lenguaje no incluye JSON, añade una dependencia documentada y ajusta el comando build de shipcode.yml; comprueba la instalación en una carpeta limpia.
Los fragmentos con Math, .shift() o notación similar expresan ideas de algoritmo; no requieren JavaScript. Adáptalos a los tipos y bibliotecas de tu lenguaje. Un byte no equivale siempre a un carácter: en formatos binarios cuenta bytes y declara la codificación.
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.