Volver a vídeos

Episodio 001 · Tutoriales de IA

Actualiza tu servidor MCP al modelo sin sesión

Una migración ejecutable desde sesiones MCP ligadas a la conexión hacia contexto por petición, identificadores explícitos y autorizados, compatibilidad entre versiones y cinco pruebas de salida.

Por Hamza Diaz
5 min de vídeo3 min de lectura

Nota de campo

Para adoptar MCP 2026-07-28, elimina las sesiones del protocolo, Mcp-Session-Id y la dependencia moderna de initialize. Incluye la versión y las capacidades en cada petición, implementa server/discover y expresa la continuidad de negocio necesaria mediante identificadores opacos y autorizados enviados como argumentos normales. Aísla el camino initialize heredado y exige que pasen las cinco pruebas entre conexiones y usuarios.

Qué nos dice la prueba

Para adoptar MCP 2026-07-28, elimina las sesiones del protocolo, Mcp-Session-Id y la dependencia moderna de initialize. Incluye la versión y las capacidades en cada petición, implementa server/discover y expresa la continuidad de negocio necesaria mediante identificadores opacos y autorizados enviados como argumentos normales. Aísla el camino initialize heredado y exige que pasen las cinco pruebas entre conexiones y usuarios.

Transcripción

Si tu servidor MCP todavía crea una sesión, devuelve Mcp-Session-Id y espera notifications/initialized, conserva el diseño anterior. La actualización a 2026-07-28 no consiste en esconder esa misma sesión en Redis. Consiste en que cada petición se pueda interpretar por sí sola.

Este es el resultado final: la llamada incluye la versión del protocolo y las capacidades del cliente dentro de _meta; en HTTP también incluye MCP-Protocol-Version. El servidor valida, ejecuta y responde sin depender de memoria asociada a la conexión. Cuando un proceso sí necesita continuidad, el servidor entrega un identificador explícito y el cliente lo envía como argumento en la siguiente herramienta.

El changelog oficial marca dos rupturas. Desaparecen las sesiones del protocolo y la cabecera Mcp-Session-Id en Streamable HTTP. Además, tools/list, resources/list y prompts/list ya no pueden variar según la conexión. También desaparece, para la revisión moderna, el intercambio initialize y notifications/initialized. La versión y las capacidades pasan a metadatos de cada petición. Eso es lo normativo. Nuestra decisión de arquitectura es mantener solo el estado de negocio necesario, con propietario, caducidad y permisos visibles.

Migremos un servidor que crea informes. Antes, el manejador leía Mcp-Session-Id, buscaba un objeto de sesión y guardaba ahí el borrador. Eliminamos el lector de cabecera, el middleware de sesión, la tabla de sesiones y el indicador initialized. En su lugar añadimos un validador común que lee _meta.io.modelcontextprotocol/protocolVersion y clientCapabilities. En HTTP contrastamos la versión con MCP-Protocol-Version. Si no está soportada, devolvemos UnsupportedProtocolVersionError y la lista admitida; no elegimos otra versión en silencio.

La herramienta create_report devuelve ahora reportHandle, por ejemplo rpt_7K2. No es una sesión disfrazada: es una referencia explícita al informe. update_report exige ese argumento. El servidor comprueba que pertenece al usuario, aplica caducidad y guarda únicamente el estado que requiere el informe. El valor debe ser opaco e imposible de adivinar; nunca debe revelar una clave de base de datos.

Añadimos server/discover para anunciar versiones, capacidades e identidad. Durante una transición, un servidor de doble compatibilidad puede reconocer las peticiones modernas por _meta y aislar el camino antiguo basado en initialize. Lo importante es que las listas modernas no dependan de una sesión heredada.

Probamos cinco cosas: tools/list funciona sin initialize ni cabecera de sesión; otra conexión recibe el mismo catálogo; create_report produce un identificador y update_report solo funciona con él, incluso desde otra conexión; una versión no admitida devuelve el error correcto; y el camino moderno no necesita notifications/initialized. Como prueba de seguridad, dos usuarios trabajan a la vez y ninguno puede usar el identificador del otro.

Aprobamos solo con cinco de cinco: sin Mcp-Session-Id, sin dependencia moderna de initialize, metadatos por petición, identificadores explícitos y autorizados, y pruebas entre conexiones. Stateless no significa “sin estado de negocio”; significa que el protocolo no oculta ese estado en una conexión. Adjunta las fuentes oficiales y fija tus pruebas a 2026-07-28. Si necesitas diseñar una transición segura, Optijara puede ayudarte con la frontera de compatibilidad y las pruebas.