MCP SSE en desuso: migre a Streamable HTTP antes de que su servidor falle
El transporte MCP SSE llegó al final de su vida útil el 1 de abril de 2026. Migre a HTTP Streamable con un controlador sin estado, instancia nueva por solicitud y una ruta de reanudación de sesión; código para trabajadores de Node, Python y Cloudflare.
El transporte de eventos enviados por el servidor MCP llegó al final de su vida útil el 1 de abril de 2026. Las bibliotecas cliente aún
incluye soporte SSE para compatibilidad con versiones anteriores, pero la próxima versión menor del protocolo base
lo elimina y el registro público de MCP ahora rechaza nuevos listados exclusivos de SSE. Si su servidor MCP
todavía responde en /sse y /messages, tienes una ventana de migración, no
a forever window.
SSE mantuvo abierta una conexión TCP por cliente. Dos copias de su servidor MCP detrás de una carga el equilibrador produjo sesiones de cerebro dividido; El escalado horizontal requería un enrutamiento adhesivo que la mayoría Los balanceadores de carga administrados no pueden expresarse limpiamente. HTTP transmitible utiliza solicitud-respuesta estándar ciclos con flujos reanudables opcionales, lo que significa que cualquier instancia puede responder a cualquier solicitud y todas las CDN del mundo ya saben cómo almacenarlas en caché y enrutarlas.
Aquí está la ruta de migración completa: el código del servidor antes y después, un patrón de almacén de datos para
herramientas con estado, una implementación de Cloudflare Workers, un equivalente FastAPI y un
.well-known archivo de metadatos para que los clientes puedan descubrir su servidor sin abrir un
conexión primero.
Paso 1: eliminar el controlador SSE
El código antiguo se ve así. Dos rutas, un mapa de sesión mantenido en la memoria del proceso y un transporte. que mantiene la respuesta abierta hasta que el cliente se desconecta:
Todos los problemas con SSE aparecen en ese fragmento. El transports El mapa es solo
visible para un proceso; reinicie el servidor y todas las sesiones abiertas finalizarán; escalar horizontalmente y
la mitad de sus clientes acceden a un servidor que nunca ha oído hablar de ellos. Sácalo.
Paso 2: Instale HTTP transmitible
El nuevo controlador es más pequeño. Una ruta responde tanto a GET como a POST; cada solicitud genera una nueva par de servidor y transporte; el recolector de basura limpia cuando se cierra la respuesta:
Tres claves importan. sessionIdGenerator: undefined opta por no fijar la sesión para que
el transporte es totalmente apátrida. enableJsonResponse: true devuelve un solo JSON
cuerpo para herramientas que no emiten progreso, lo que mantiene la ruta rápida y almacenable en caché. El
res.on("close") La limpieza evita fugas de socket en la desconexión temprana del cliente.
Paso 3: sacar el estado de la sesión de la memoria del proceso
Un controlador sin estado no significa un producto sin estado. Las herramientas de larga duración aún deben informar progreso en múltiples solicitudes. Coloque ese estado en Redis, un objeto duradero, DynamoDB o Postgres; léelo al entrar, escríbelo al salir:
La Mcp-Session-Id el encabezado, si está presente, identifica la sesión lógica; el manejador
lo utiliza como clave de almacén de datos. A Last-Event-Id encabezado del cliente permite que el
El transporte reanuda una transmisión después de una desconexión sin reiniciar la llamada de la herramienta. Ambos encabezados son
opcional; las herramientas sin estado pueden ignorarlos por completo.
Paso 4: implementar sin servidor
Streamable HTTP desbloquea lo que SSE bloqueó: ejecutar un servidor MCP en Cloudflare Workers, AWS Lambda, Funciones Vercel o Máquinas Fly. Aquí está el servidor completo de Cloudflare Workers en 40 líneas, utilizando el punto final de búsqueda de IP de Botoi como una herramienta de muestra:
Sin mapa de sesión, sin temporizadores en segundo plano, sin pings de mantenimiento. El Trabajador gira a pedido, responde la solicitud y se apaga. Un trabajador maneja cualquier número de clientes paralelos porque hay ningún estado mutable compartido. Los arranques en frío para servidores MCP en Workers registran menos de 5 ms para la mayoría superficies de herramientas; en Lambda están entre 50 y 200 ms fríos.
Paso 5: migración de Python con FastAPI
Los servidores Python tienen la misma forma. El controlador FastAPI construye el servidor MCP por solicitud y delega al transporte:
El patrón es el mismo en todos los idiomas: crear un servidor por solicitud, entregar la solicitud HTTP al transporte, devolver lo que el transporte produzca. Los tiempos de ejecución del idioma difieren; la arquitectura no lo hace.
Paso 6: publicar una tarjeta de servidor para su descubrimiento
Una de las brechas que cierra la hoja de ruta 2026 es el descubrimiento sin conexión. Registros y
Los rastreadores solían necesitar un protocolo de enlace en vivo para saber qué hacía su servidor. Entregar un documento JSON en
/.well-known/mcp/server-card.json y los clientes pueden aprender la URL de transporte,
esquema de autenticación y capacidad establecida antes de conectarse:
Esta es la pieza que permite a las plataformas de agentes indexar su servidor sin necesidad de sondearlo. Auth0 para Los agentes, Cloudflare Agent Cloud y el registro público de MCP consumen este formato; agregarlo una vez y su servidor estará listable.
Verificar la migración
Antes de invertir DNS, ejecute el inspector o realice curl contra el nuevo punto final. La primera superficie un UI con todas las herramientas y recursos expuestos; el segundo confirma que el formato del cable es correcto:
Una exitosa tools/list respuesta con su catálogo completo de herramientas significa que el servidor está
vivir. Si la respuesta es como text/event-stream cuando esperas JSON, el
el transporte tiene enableJsonResponse desactivado; voltear la bandera.
Mantenga ambos transportes circulando en rutas diferentes durante una semana después de su transición:
/sse Como la vieja oyente, /mcp como el nuevo. Emitir una línea de registro cada
momento en que un cliente se conecta /sse con su agente de usuario. Cuando el registro se silencia, usted
Puede eliminar el controlador anterior. La mayoría de las bibliotecas cliente enviaron soporte HTTP Streamable entre
diciembre de 2025 y febrero de 2026; Espere una larga cola de instalaciones antiguas de Cursor y Claude Desktop.
Lo que sigue igual, lo que cambia.
| Inquietud | transporte ESS | HTTP transmitible |
|---|---|---|
| Modelo de conexión | Un longevo por cliente | Solicitud-respuesta, flujo opcional |
| Equilibrio de carga | Se requieren sesiones pegajosas | Cualquier instancia responde a cualquier solicitud. |
| Estado de sesión | Memoria en proceso | Almacén de datos codificado en el ID de sesión |
| Ajuste sin servidor | Bloqueado por límites de duración de la conexión | Nativa |
| Transmisión de progreso | Por defecto | Registrarse a través del encabezado Aceptar |
| Descubrimiento | apretón de manos en vivo | /.well-known/mcp/server-card.json |
| Invocación de herramienta | JSON-RPC sobre tramas SSE | JSON-RPC sobre cuerpo HTTP |
Conclusiones clave
- SSE está en desuso, no eliminado. Los clientes todavía lo aceptan hasta 2026, pero nuevo Los servidores y los listados de registro requieren Streamable HTTP.
- Construya nuevo según solicitud. Sin mapas de sesiones en proceso; dejar que el servidor se oponga vive sólo el tiempo que dura el RPC.
-
Enviar estado a un almacén de datos. Redis, Durable Objects o Postgres con clave en el
Mcp-Session-Idencabezamiento. - Serverless está de vuelta sobre la mesa. Trabajadores de Cloudflare, Lambda, Vercel Funciones; ninguno de ellos apoyó bien la ESS de larga duración.
-
Publicar una tarjeta de servidor.
/.well-known/mcp/server-card.jsonhace su servidor es reconocible sin conexión.
El servidor MCP de Botoi se envía en Streamable HTTP en api.botoi.com/mcp con 49 herramientas seleccionadas para búsqueda de IP, validación de correo electrónico, DNS, hash, firma JWT y QR generación. La fuente tiene licencia del MIT y refleja el patrón anterior; leer el documentos de configuración para Configuraciones de Claude Desktop, Claude Code, Cursor, VS Code y Windsurf.
FAQ
- ¿Se eliminó MCP SSE o simplemente quedó obsoleto?
- Obsoleto a partir del 1 de abril de 2026; El soporte de tiempo de ejecución todavía existe en las bibliotecas cliente para compatibilidad con versiones anteriores, pero los nuevos servidores MCP y listados de registro requieren Streamable HTTP. La hoja de ruta para 2026 elimina por completo el SSE del protocolo base en la próxima versión menor; comience su migración ahora en lugar de en el momento de la eliminación.
- ¿Por qué MCP abandonó la ESS?
- SSE mantuvo abierta una conexión TCP por cliente e hizo que el escalado horizontal fuera doloroso. Dos servidores SSE idénticos detrás de un equilibrador de carga por turnos produjeron sesiones de cerebro dividido: el estado de la herramienta almacenado en el servidor A era invisible para el servidor B. HTTP streaming utiliza ciclos cortos de solicitud-respuesta con flujos reanudables opcionales, por lo que los balanceadores de carga y las CDN enrutan cada solicitud sin fijar un cliente a una instancia.
- ¿Qué es una nueva instancia por solicitud?
- Cada solicitud entrante construye un nuevo objeto de servidor MCP, maneja el RPC y descarta la instancia. No hay estado en memoria entre solicitudes. El estado que debe persistir (tokens de progreso, sesiones de herramientas) reside en un almacén de datos que el controlador lee al entrar y escribe al salir. Esto le permite ejecutar el mismo servidor en una plataforma sin servidor como Cloudflare Workers o AWS Lambda sin que se aplique el límite de duración de la conexión de 15 minutos.
- ¿Aún necesito WebSockets para la salida de la herramienta de streaming?
- No. Streamable HTTP incluye una transmisión de estilo SSE opcional dentro de una respuesta POST estándar para herramientas que emiten resultados parciales. La diferencia con el antiguo SSE es que la transmisión se encuentra dentro de una solicitud HTTP y finaliza con la llamada a la herramienta. No mantiene un socket abierto entre llamadas a herramientas.
- ¿Cómo pruebo un servidor HTTP Streamable localmente?
- Utilice el inspector MCP oficial (npx @modelcontextprotocol/inspector) que ahora habla ambos transportes. O enrolle el punto final con un cuerpo JSON-RPC y un encabezado Aceptar: texto/flujo de eventos; Verá una única respuesta JSON o un flujo de eventos dependiendo de si la herramienta emite progreso. El currículum de la sesión se puede probar con los encabezados Mcp-Session-Id y Last-Event-Id.
Empieza a construir con botoi
150+ endpoints de API para consultas, procesamiento de texto, generacion de imagenes y utilidades para desarrolladores. Plan gratuito, sin tarjeta de credito.