Cargando

El transporte HTTP streamable permite que los clientes MCP se conecten a servidores alojados de forma remota a través de conexiones HTTP. A diferencia del transporte estándar de E/S, que requiere que tanto el cliente como el servidor estén en la misma máquina, este transporte abre posibilidades para servidores MCP públicos a los que cualquiera puede acceder.

El cliente MCP en tu computadora y el servidor MCP en una máquina remota, comunicándose en ambas direcciones a través del transporte HTTP streamable.

Sin embargo, hay una advertencia importante: algunas configuraciones pueden limitar significativamente la funcionalidad de tu servidor MCP. Si tu aplicación funciona perfectamente con el transporte estándar de E/S de forma local pero falla al implementarse con el transporte HTTP, esto probablemente sea la causa.

El cliente MCP y un servidor MCP remoto intercambian JSON a través de HTTP, lo que hace que los cuatro patrones de comunicación sean desafiantes.

Configuraciones que importan

Dos configuraciones clave controlan cómo se comporta el transporte HTTP streamable:

  • stateless_http - Controla la gestión del estado de la conexión
  • json_response - Controla el manejo del formato de respuesta

Por defecto, ambas configuraciones son false, pero ciertos escenarios de implementación pueden obligarte a establecerlas en true. Cuando están habilitadas, estas configuraciones pueden romper funcionalidades principales como las notificaciones de progreso, el registro (logging) y las solicitudes iniciadas por el servidor.

El desafío de la comunicación HTTP

Para entender por qué existen estas limitaciones, necesitamos revisar cómo funciona la comunicación HTTP. En el HTTP estándar:

El cliente HTTP envía un POST a https://my-server.com/api y el servidor responde; esto aplica a todas las solicitudes HTTP, no solo a MCP.

  • Los clientes pueden iniciar solicitudes a los servidores fácilmente (el servidor tiene una URL conocida)
  • Los servidores pueden responder a estas solicitudes fácilmente
  • Los servidores no pueden iniciar solicitudes a los clientes fácilmente (los clientes no tienen URLs conocidas)
  • Los patrones de respuesta del cliente de vuelta al servidor se vuelven problemáticos

El servidor no conoce la dirección del cliente, y una nota agrega que esto aplica a todas las solicitudes HTTP, no solo con MCP.

Tipos de mensajes MCP afectados

Esta limitación de HTTP impacta patrones de comunicación específicos de MCP. Los siguientes tipos de mensajes se vuelven difíciles de implementar con HTTP simple:

  • Solicitudes iniciadas por el servidor: Solicitudes de Create Message, solicitudes de List Roots
  • Notificaciones: Notificaciones de progreso, notificaciones de registro (logging), notificaciones de inicialización, notificaciones de cancelación

Estas son exactamente las funcionalidades que se rompen cuando habilitas las configuraciones HTTP restrictivas. Las barras de progreso desaparecen, el registro deja de funcionar y las solicitudes de muestreo iniciadas por el servidor fallan.

La solución del HTTP streamable

El transporte HTTP streamable sí proporciona una solución ingeniosa para sortear las limitaciones de HTTP, pero viene con compensaciones. Cuando te ves obligado a usar stateless_http=True o json_response=True, básicamente le estás diciendo al transporte que opere dentro de las restricciones de HTTP en lugar de sortearlas.

Marcas de verificación en las solicitudes del cliente y las respuestas del servidor, una cruz en las solicitudes iniciadas por el servidor, un signo de interrogación en las respuestas del cliente.

Comprender estas limitaciones te ayuda a tomar decisiones informadas sobre:

  • Qué transporte usar para diferentes escenarios de implementación
  • Cómo diseñar tu servidor MCP para manejar con elegancia las restricciones de HTTP
  • Cuándo aceptar una funcionalidad reducida a cambio de los beneficios del alojamiento remoto

La clave está en saber que estas restricciones existen y planificar la arquitectura de tu servidor MCP en consecuencia. Si tu aplicación depende en gran medida de solicitudes iniciadas por el servidor o de notificaciones en tiempo real, es posible que debas reconsiderar tu elección de transporte o implementar patrones de comunicación alternativos.