- MCP(Model Context Protocol) proporciona una forma de integración estandarizada para que los LLM interactúen con el mundo exterior
- Recientemente han aparecido estándares similares como ACP de IBM y A2A de Google, y las implementaciones de MCP junto con las herramientas relacionadas están creciendo rápidamente
- Sin embargo, se señalan problemas de prácticas de ingeniería inmaduras, como confusión en el diseño, documentación insuficiente y falta de una especificación real del protocolo
- Los métodos de transporte propuestos actualmente, como HTTP+SSE y Streamable HTTP, aumentan la complejidad y los problemas de seguridad, y se recomienda usar WebSocket como alternativa
- Los protocolos más recientes están añadiendo inconsistencia y una complejidad excesiva en autorización y gestión de sesiones
Revisión de MCP y tendencias recientes
- MCP es un protocolo abierto creado para estandarizar cómo las aplicaciones proporcionan contexto a los modelos de lenguaje grandes (LLM)
- En el último mes, MCP ha surgido como un estándar clave para convertir a los LLM en agentes, y su uso e implementación se están expandiendo rápidamente
- Están apareciendo con rapidez estándares ortodoxos con objetivos similares, como ACP de IBM y A2A de Google
Problemas en las prácticas de ingeniería y en la especificación del protocolo
- En varios puntos se hace evidente el bajo nivel de implementación real y documentación
- Las grandes empresas tecnológicas invierten enormes recursos en el entrenamiento de modelos, pero sus SDK y documentación tienen baja calidad y generan confusión entre los usuarios
- MCP muestra problemas parecidos: parte de su diseño es poco razonable y faltan especificaciones, ejemplos y lineamientos
Debate sobre los protocolos de transporte
Método de transporte stdio
- Stdio es un método tradicional que conecta directamente en local al servidor MCP y al cliente mediante tuberías (
stdout, stdin)
- Hay menos manejo complejo de sockets y menos problemas dependientes del sistema operativo, y permite una configuración del entorno sencilla con variables de entorno y flujos de entrada/salida
Métodos HTTP+SSE / Streamable HTTP
- Con la intención de adaptarse a la era web y responder también a entornos basados en HTTP, se adoptaron los métodos HTTP+SSE y Streamable HTTP
- Sin embargo, aunque buscan reemplazar a WebSocket, estos métodos terminan generando más ambigüedad, confusión de diseño y complejidad
- Como una misma sesión y conexión pueden crearse y cerrarse de varias formas, esto impone una gran carga sobre la gestión de estado y la seguridad del servidor
Dificultades en casos reales de implementación de servidores/clientes MCP
- Se notan claramente carencias de soporte en varios lenguajes, como la ausencia de un SDK oficial para Go
- La documentación y la especificación son poco claras, por lo que muchas veces hay que implementar mediante ingeniería inversa
- Aunque los servidores de ejemplo son en su mayoría de Python y JavaScript, aplicarlos en entornos de producción es difícil por problemas de dependencias y portabilidad
- Al implementar un servidor, SSE/Streamable HTTP intenta hacerse pasar por sockets, pero en la práctica es difícil mantener de forma consistente el estado de sesión y conexión, y se requiere infraestructura adicional como colas de mensajes
Estructura y problemas de HTTP+SSE y Streamable HTTP
Modo HTTP+SSE
- El cliente abre una sesión SSE con el servidor y, al hacer solicitudes de escritura a un endpoint separado, el servidor devuelve una respuesta 202 y envía la respuesta a través de la conexión SSE existente
- Se requiere mantener la sincronización de la conexión de sesión y del estado, pero este proceso está mal documentado y su complejidad operativa es muy alta
Modo Streamable HTTP
- La creación de sesión, la apertura de SSE y la entrega de respuestas se mezclan de varias maneras, por lo que un mismo flujo de solicitud~respuesta no mantiene consistencia
- La coexistencia de múltiples gestiones de estado y distintos endpoints y encabezados se convierte en un obstáculo serio para la implementación real y la escalabilidad
Implicaciones generales
- Junto con el aumento de la complejidad técnica, crecen la carga cognitiva y el mantenimiento para los desarrolladores, y surgen problemas de incompatibilidad y comportamiento impredecible entre distintas implementaciones de servidores y clientes
- El servidor debe rastrear todo el estado y la situación de las conexiones, y en entornos distribuidos se vuelve aún más difícil escalar de forma eficiente y sincronizar el estado
Implicaciones de seguridad
- Los métodos de conexión y sesión, variados y granulares, aumentan las vulnerabilidades de seguridad en la gestión de estado, como secuestro de sesión, ataques de repetición y denegación de servicio (DoS)
- Los múltiples puntos de entrada y formas de respuesta amplían la superficie de ataque y pueden permitir ocultar actividad maliciosa mediante flujos no previstos
Confusión en el protocolo de autorización
- La especificación actual aplica reglas inconsistentes, como exigir OAuth2 solo cuando el transporte es HTTP, mientras que en el transporte STDIO se permite usar variables de entorno de forma arbitraria
- Esto genera confusión y falta de lógica, por ejemplo al forzar una implementación compleja de OAuth2 únicamente para el transporte HTTP
Propuestas de mejora
- Se necesita simplificar hacia un solo protocolo JSON RPC, centrando los métodos de transporte de forma práctica únicamente en Stdio y WebSocket
- Lo deseable es mapear las variables del entorno Stdio a encabezados en HTTP, y la entrada y salida a los flujos bidireccionales de WebSocket, respectivamente
- Así se pueden eliminar el seguimiento innecesario de sesiones, la gestión de estado y una gran cantidad de manejo de excepciones
- WebSocket debería convertirse en la opción estándar para todo transporte basado en HTTP, y también puede resolver los complejos problemas de sincronización de estado
Comparación con protocolos alternativos y tendencias del mercado
- ACP de IBM y A2A de Google ofrecen un diseño de transporte más simple y funciones de descubrimiento de agentes en términos de interoperabilidad entre agentes
- Pero, en esencia, en su mayoría pueden integrarse como herramientas separadas dentro del entorno de construcción de MCP
- Como la continua aparición de nuevos protocolos puede derivar en una proliferación de estándares, priorizar la simplicidad del transporte es importante para el crecimiento de la industria
1 comentarios
Opiniones en Hacker News
agents.jsonen la raíz web y que los agentes lo resuelvan automáticamente mediante conversación semántica. En ese caso, HTTP terminaría siendo la entrada y salida estándar de los agentes.