- MCP (Model Context Protocol) fornece uma forma padronizada de integração para que LLMs interajam com o mundo externo
- Recentemente, padrões semelhantes como ACP da IBM e A2A do Google surgiram, e implementações do MCP e ferramentas relacionadas estão aumentando rapidamente
- No entanto, práticas de engenharia ainda imaturas, como confusão no design, documentação insuficiente e falta de uma especificação real do protocolo, são apontadas como problemas
- Os meios de transporte atualmente propostos, como HTTP+SSE e Streamable HTTP, aumentam a complexidade e os problemas de segurança, e o uso de WebSocket é recomendado como alternativa
- Os protocolos mais recentes estão adicionando inconsistência e complexidade excessiva em autorização e gerenciamento de sessão
Revisão do MCP e das tendências recentes
- O MCP é um protocolo aberto criado para padronizar como aplicações fornecem contexto a modelos de linguagem de grande porte (LLMs)
- No último mês, o MCP emergiu como um padrão central para transformar LLMs em agentes, e seu uso e implementação vêm se espalhando rapidamente
- Assim como o ACP da IBM e o A2A do Google, padrões mais ortodoxos com objetivos semelhantes estão surgindo em ritmo acelerado
Problemas de práticas de engenharia e da especificação do protocolo
- O baixo nível de implementação real e de documentação aparece em vários pontos
- Grandes empresas de tecnologia investem pesado no treinamento de modelos, mas SDKs e documentação continuam fracos, causando confusão aos usuários
- O MCP também mostra problemas semelhantes, com partes do design pouco razoáveis e falta de especificações, exemplos e diretrizes
Discussão sobre o protocolo de transporte
Método de transporte via stdio
- Stdio é a forma tradicional de conectar diretamente, em ambiente local, servidor e cliente MCP por meio de pipes (
stdout, stdin)
- Há menos tratamento complexo de sockets e menos problemas específicos de sistema operacional, permitindo uma configuração de ambiente simples com variáveis de ambiente e streams de entrada e saída
Métodos HTTP+SSE / Streamable HTTP
- Com a intenção de também atender ao mundo web, foram adotados os métodos HTTP+SSE e Streamable HTTP
- Porém, embora tentem substituir o WebSocket, esses métodos acabam gerando ainda mais ambiguidade, confusão de design e complexidade
- Como uma mesma sessão e conexão pode ser criada e encerrada de várias formas, isso se torna um grande peso para o gerenciamento de estado e para a segurança no servidor
Dificuldades em casos reais de implementação de servidor/cliente MCP
- A falta de suporte em várias linguagens, como a ausência de um SDK oficial em Go, se destaca
- Como a documentação e a especificação não são claras, muitas vezes é preciso implementar por meio de engenharia reversa
- Mesmo que os servidores de exemplo sejam em sua maioria baseados em Python e JavaScript, questões de dependência e portabilidade dificultam o uso em ambientes profissionais
- Na implementação do servidor, SSE/Streamable HTTP tenta se passar por socket, mas na prática é difícil manter de forma consistente o estado da sessão e da conexão, além de exigir infraestrutura separada, como filas de mensagens
Estrutura e problemas de HTTP+SSE e Streamable HTTP
Modo HTTP+SSE
- O cliente abre uma sessão SSE com o servidor e, ao fazer uma requisição de escrita para um endpoint separado, o servidor retorna uma resposta 202 e envia a resposta pela conexão SSE já existente
- Isso exige conexão de sessão e manutenção da sincronização de estado, mas o processo é mal documentado e tem complexidade operacional muito alta
Modo Streamable HTTP
- Criação de sessão, abertura de SSE e entrega de resposta se misturam de várias formas, fazendo com que um único fluxo de requisição-resposta perca consistência
- A mistura de múltiplos estados, vários endpoints e diferentes formas de cabeçalhos cria obstáculos graves para a implementação prática e a escalabilidade
Implicações gerais
- Com o aumento da complexidade técnica, cresce também a carga cognitiva e de manutenção dos desenvolvedores, e surgem problemas de incompatibilidade e comportamento imprevisível entre diferentes implementações de servidor e cliente
- O servidor precisa rastrear todos os estados e situações de conexão, e em ambientes distribuídos a escalabilidade eficiente e a sincronização de estado ficam ainda mais difíceis
Implicações de segurança
- Formas microscópicas e variadas de conexão/sessão aumentam vulnerabilidades de segurança ligadas ao gerenciamento de estado, como sequestro de sessão, ataques de repetição e negação de serviço (DoS)
- Múltiplos pontos de entrada e formas de resposta ampliam a superfície de ataque e podem permitir a ocultação de atividade maliciosa por meio de fluxos não intencionais
Confusão no protocolo de autorização
- A especificação atual aplica regras inconsistentes, como exigir OAuth2 apenas para transporte HTTP, enquanto no transporte STDIO permite o uso arbitrário de variáveis de ambiente
- Há confusão e incoerência, como por que apenas o transporte HTTP é forçado a implementar OAuth2 complexo
Sugestões de melhoria
- É necessário simplificar para um único protocolo JSON RPC, com os meios de transporte centrados, na prática, apenas em Stdio e WebSocket
- Uma abordagem desejável é mapear as variáveis do ambiente Stdio para cabeçalhos no ambiente HTTP e mapear entrada e saída para os streams bidirecionais do WebSocket
- Isso permite eliminar rastreamento de sessão desnecessário, gerenciamento de estado e inúmeras exceções
- O WebSocket deveria se tornar a escolha padrão para todos os transportes baseados em HTTP, além de resolver os problemas complexos de sincronização de estado
Comparação com protocolos alternativos e tendências de mercado
- O ACP da IBM e o A2A do Google oferecem um design de transporte mais simples e recursos de descoberta de agentes no aspecto de interoperabilidade entre agentes
- Mas, em essência, na maioria dos casos eles podem ser integrados como ferramentas separadas dentro de um ambiente construído sobre MCP
- Como o surgimento contínuo de novos protocolos pode levar ao risco de proliferação de padrões, priorizar a simplicidade do transporte é importante para o crescimento da indústria
1 comentários
Comentários do Hacker News
agents.jsonna raiz web e deixar que agentes resolvessem tudo sozinhos por meio de uma conversa semântica; no fim, o HTTP vira a entrada e saída padrão dos agentes