En esta página
Servidor en TypeScript
Especificación MCP 2026-07-28 · revisada el 15 de octubre de 2026
Construye nortia-pedidos con el SDK oficial v2 de TypeScript: tool, resources y prompt, servido por stdio y por Streamable HTTP sin estado, y probado con un cliente y con el Inspector.
Qué aprenderás
- Montar un proyecto TypeScript con el SDK oficial v2 y servir la versión 2026-07-28 del protocolo
- Registrar una tool con esquema de entrada y de salida, un resource fijo, uno con plantilla y un prompt
- Servir el mismo servidor por stdio y por Streamable HTTP sin estado, y explicar qué vive entre peticiones
- Decidir qué fallo debe llegar al modelo como isError y cuál al cliente como error de protocolo
- Probar el servidor con un cliente mínimo y con el Inspector por línea de comandos
Contenido de la lección
- 01 El problema
- 02 Proyecto, dependencias y repositorio de datos
- 03 La fábrica: una tool, dos resources y un prompt
- 04 Servir por stdio y por Streamable HTTP
- 05 Cliente mínimo y manejo de errores
- 06 El Inspector por línea de comandos
- 07 En producción
- 08 Lo siguiente: llevarlo a producción
Además: quiz de comprobación y desafío práctico.
Extracto
En la lección anterior el agente de soporte de Nortia resolvía una incidencia apoyándose en tres servidores que ya existían. Ahora te toca escribir el primero: nortia-pedidos, el servidor MCP que permite consultar pedidos y el estado de sus envíos.
El encargo llega con condiciones. España y México son inquilinos distintos y una consulta no puede cruzar de uno a otro. Cada acceso a un pedido debe dejar rastro. La ingeniera de plataforma quiere lanzarlo en su portátil como proceso local, y soporte lo necesita detrás de una URL para su agente. Por último, PostgreSQL no se conecta hasta el nivel Avanzado, así que el servidor debe funcionar hoy con datos en memoria y no cambiar cuando llegue la base de datos real.
Fin del extracto · la lección sigue con 7 secciones más
Artículos relacionados
- MCP Guías
- Servidores Guías
Migrar un servidor MCP a 2026-07-28: guía con TypeScript y Python
- Servidores Ecosistema
Los servidores MCP de Inditex por dentro: qué hacen bien y qué no
- Servidores Guías
Crear un servidor MCP en Python (2026): tutorial sin estado
Preguntas frecuentes
¿Cómo se crea un servidor MCP en TypeScript?
Con el SDK oficial v2, dividido en varios paquetes (@modelcontextprotocol/server, /client, /node y /express), Zod 4.2 o superior para los esquemas y Node 22 o superior con módulos ES. El servidor se define dentro de una fábrica, una función que devuelve un McpServer con sus primitivas registradas mediante registerTool, registerResource y registerPrompt, y se sirve con serveStdio por stdio o con createMcpHandler por Streamable HTTP, que ejecuta la fábrica en cada petición. En la lección se construye así nortia-pedidos y se prueba con un cliente mínimo y con el Inspector.
¿Cómo migrar un servidor MCP del SDK de TypeScript v1 a v2?
Hay que pasar del paquete único a los nuevos (/server, /client, /node, /express), cambiar server.tool(), .resource() y .prompt() por registerTool, registerResource y registerPrompt con esquemas de Zod 4, y usar ProtocolError donde antes estaba McpError. Lo que más se pasa por alto es el transporte: server.connect(new StdioServerTransport()) compila, pero se queda en la versión 2025-11-25, así que para la versión actual hay que usar serveStdio(fábrica) o createMcpHandler(fábrica). El codemod npx @modelcontextprotocol/codemod@latest v1-to-v2 . actualiza imports y registros, pero en la prueba que recoge la lección no hizo ese cambio de transporte ni actualizó Zod.
¿Cómo probar un servidor MCP con el Inspector desde la terminal?
El MCP Inspector (@modelcontextprotocol/inspector) incluye un modo --cli para automatizar: le indicas en un archivo cómo arrancar el servidor y cada comprobación (listar tools, llamar a una, leer un resource) es un solo comando. Tres detalles a tener en cuenta: por defecto usa versiones con handshake y hay que pasar --protocol-era modern para probar 2026-07-28; el código de salida no es 0 cuando el resultado trae isError: true; y --tool-arg deduce los tipos, así que para fijarlos es mejor --tool-args-json.