StreamableHTTP es la solución de MCP a un problema fundamental: algunas funcionalidades de MCP requieren que el servidor haga solicitudes al cliente, pero HTTP hace que esto sea complicado. Exploremos cómo StreamableHTTP resuelve esta limitación y cuándo podrías necesitar romper esa solución alternativa.
El problema central
Algunas funciones de MCP como el sampling, las notificaciones y el logging dependen de que el servidor inicie solicitudes hacia el cliente. Sin embargo, HTTP está diseñado para que los clientes hagan solicitudes a los servidores, no al revés. StreamableHTTP resuelve esto con una ingeniosa solución alternativa usando Server-Sent Events (SSE).
Cómo funciona StreamableHTTP
La magia ocurre a través de un proceso de varios pasos que establece conexiones persistentes entre el cliente y el servidor.

Configuración inicial de la conexión
El proceso comienza como cualquier conexión MCP:
- El cliente envía una
Initialize Requestal servidor - El servidor responde con un
Initialize Resultque incluye un encabezado especialmcp-session-id - El cliente envía una
Initialized Notificationcon el ID de sesión
Este ID de sesión es crucial: identifica de manera única al cliente y debe incluirse en todas las solicitudes futuras.
La solución alternativa con SSE
Después de la inicialización, el cliente puede hacer una solicitud GET para establecer una conexión de Server-Sent Events. Esto crea una respuesta HTTP de larga duración que el servidor puede usar para transmitir mensajes de vuelta al cliente en cualquier momento.

Esta conexión SSE es la clave para permitir la comunicación de servidor a cliente. El servidor ahora puede enviar solicitudes, notificaciones y otros mensajes a través de este canal persistente.
Llamadas a herramientas y conexiones SSE duales
Cuando el cliente hace una llamada a una herramienta, las cosas se vuelven más complejas. El sistema crea dos conexiones SSE separadas:

- Conexión SSE primaria: Se usa para solicitudes iniciadas por el servidor y permanece abierta indefinidamente
- Conexión SSE específica de la herramienta: Se crea para cada llamada a una herramienta y se cierra automáticamente cuando se envía el resultado de la herramienta
Enrutamiento de mensajes
Diferentes tipos de mensajes se enrutan a través de diferentes conexiones:
- Notificaciones de progreso: Se envían a través de la conexión SSE primaria
- Mensajes de logging y resultados de herramientas: Se envían a través de la conexión SSE específica de la herramienta

Indicadores de configuración que rompen la solución alternativa
StreamableHTTP incluye dos opciones de configuración importantes:
stateless_httpjson_response
Establecer estas en True puede romper el mecanismo de la solución alternativa con SSE. Es posible que quieras habilitar estos indicadores en ciertos escenarios, pero hacerlo limita la funcionalidad completa de MCP que depende de la comunicación de servidor a cliente.
Puntos clave
StreamableHTTP es más complejo que otros transportes de MCP porque tiene que resolver las limitaciones de HTTP. La solución alternativa basada en SSE habilita la funcionalidad completa de MCP sobre HTTP, pero entender el modelo de conexión dual es crucial para la depuración y la optimización.
Al construir aplicaciones MCP con StreamableHTTP, recuerda que los IDs de sesión son obligatorios para todas las solicitudes posteriores a la inicialización, y que el sistema gestiona automáticamente múltiples conexiones SSE para manejar diferentes tipos de comunicación de servidor a cliente.