Construye tu propio servidor MCP
Etapa 1 de 5v1 · ba1b6c9f

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. 1 o "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 en result: {"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

json
{ "jsonrpc": "2.0", "id": 1, "method": "ping" }

Formato de Salida

json
{ "jsonrpc": "2.0", "id": 1, "result": {} }

Qué debes hacer paso a paso

  1. Lee línea por línea: Configura un lector de líneas sobre stdin (por ejemplo, con readline en Node.js o iterando sobre líneas en Python/Rust/Go).
  2. Parsea cada línea como JSON:
    • Extrae jsonrpc, id y method.
  3. Maneja el método "ping":
    • Construye el objeto de respuesta: { jsonrpc: "2.0", id: req.id, result: {} }.
  4. Serializa y emite la respuesta: Escribe la cadena JSON en stdout seguida de un salto de línea (\n).

Criterios de aceptación

  • ✅ Responde con jsonrpc: "2.0" y el mismo id recibido.
  • ✅ Para el método "ping", devuelve result: {}.
  • ✅ 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.

Soluciones

Ver soluciones · Se abre en una pestaña nueva