Pular para o conteúdo
Tutorial

MCP SSE obsoleto: migre para Streamable HTTP antes que seu servidor seja interrompido

| 8 min read

O transporte MCP SSE atingiu o fim de sua vida útil em 1º de abril de 2026. Migre para Streamable HTTP com um manipulador sem estado, nova instância por solicitação e um caminho de retomada de sessão; código para Node, Python e Cloudflare Workers.

Data center with network switches representing stateless MCP transport
Photo by Taylor Vick on Unsplash

O transporte de eventos enviados pelo servidor MCP atingiu o fim da vida útil em 1º de abril de 2026. As bibliotecas cliente ainda envia suporte SSE para compatibilidade com versões anteriores, mas a próxima versão secundária do protocolo base remove-o, e o registro público do MCP agora rejeita novas listagens somente de SSE. Se o seu servidor MCP ainda responde em /sse e /messages, você tem uma janela de migração, não uma janela para sempre.

O SSE manteve uma conexão TCP aberta por cliente. Duas cópias do seu servidor MCP atrás de uma carga o balanceador produziu sessões de divisão cerebral; o dimensionamento horizontal exigia roteamento fixo que a maioria balanceadores de carga gerenciados não podem se expressar de forma clara. HTTP streamable usa solicitação-resposta padrão ciclos com fluxos recuperáveis ​​opcionais, o que significa que qualquer instância pode responder a qualquer solicitação e todo CDN do mundo já sabe como armazená-lo em cache e roteá-lo.

Aqui está o caminho completo da migração: o código do servidor antes e depois, um padrão de armazenamento de dados para ferramentas com estado, uma implementação Cloudflare Workers, um equivalente FastAPI e um .well-known arquivo de metadados para que os clientes possam descobrir seu servidor sem abrir um conexão primeiro.

Etapa 1: excluir o manipulador SSE

O código antigo se parece com isso. Duas rotas, um mapa de sessão mantido na memória do processo e um mapa de transporte que mantém a resposta aberta até que o cliente se desconecte:

Todos os problemas com o SSE aparecem nesse trecho. O transports O mapa é apenas visível para um processo; reinicie o servidor e todas as sessões abertas serão encerradas; dimensionar horizontalmente e metade dos seus clientes acessa um servidor que nunca ouviu falar deles. Arranque-o.

Etapa 2: instalar HTTP streamável

O novo manipulador é menor. Uma rota responde GET e POST; cada solicitação gera um novo par servidor e transporte; o coletor de lixo limpa quando a resposta é fechada:

Três chaves são importantes. sessionIdGenerator: undefined desativa a fixação da sessão, então o transporte é totalmente apátrida. enableJsonResponse: true retorna um único JSON body para ferramentas que não emitem progresso, o que mantém o caminho rápido e armazenável em cache. O res.on("close") a limpeza evita vazamentos de soquete na desconexão antecipada do cliente.

Etapa 3: Remover o estado da sessão da memória do processo

Um manipulador sem estado não significa um produto sem estado. Ferramentas de longa duração ainda precisam ser relatadas progresso em várias solicitações. Coloque esse estado no Redis, um objeto durável, DynamoDB ou Postgres; leia na entrada, escreva na saída:

O Mcp-Session-Id o cabeçalho, se presente, identifica a sessão lógica; o manipulador usa-o como uma chave de armazenamento de dados. UM Last-Event-Id cabeçalho do cliente permite que o transporte retoma um fluxo após uma desconexão sem reiniciar a chamada da ferramenta. Ambos os cabeçalhos são opcional; ferramentas sem estado podem ignorá-las completamente.

Etapa 4: implantar sem servidor

HTTP streamable desbloqueia o que o SSE bloqueou: executar um servidor MCP no Cloudflare Workers, AWS Lambda, Vercel Functions ou Fly Machines. Aqui está o servidor Cloudflare Workers completo em 40 linhas, atingindo o endpoint de pesquisa de IP do Botoi como uma ferramenta de exemplo:

Sem mapa de sessão, sem temporizadores em segundo plano, sem pings de manutenção de atividade. O Worker gira sob demanda, responde a solicitação e desliga. Um Worker lida com qualquer número de clientes paralelos porque há nenhum estado mutável compartilhado. Inicializações a frio para servidores MCP em Workers atingem menos de 5 ms para a maioria superfícies de ferramentas; no Lambda eles ficam de 50 a 200 ms frios.

Etapa 5: migração Python com FastAPI

Os servidores Python têm o mesmo formato. O manipulador FastAPI constrói o servidor MCP por solicitação e delegados ao transporte:

O padrão é o mesmo em todas as linguagens: construir o servidor por solicitação, entregar a solicitação HTTP ao transporte, devolva tudo o que o transporte produz. Os tempos de execução da linguagem são diferentes; a arquitetura não.

Etapa 6: publicar uma placa de servidor para descoberta

Uma das lacunas que o roteiro para 2026 preenche é a descoberta sem conexão. Registros e os rastreadores costumavam precisar de um aperto de mão ao vivo para saber o que seu servidor fazia. Servir um documento JSON em /.well-known/mcp/server-card.json e os clientes podem aprender o URL de transporte, esquema de autenticação e capacidade definida antes de se conectarem:

Esta é a parte que permite que as plataformas de agentes indexem seu servidor sem investigá-lo. Autenticação0 para Agentes, Cloudflare Agent Cloud e o registro público MCP consomem esse formato; adicione uma vez e seu servidor se tornará listável.

Verifique a migração

Antes de inverter o DNS, execute o inspetor ou faça curl no novo endpoint. O primeiro emerge um UI com todas as ferramentas e recursos expostos; a segunda confirma que o formato do fio está correto:

Um sucesso tools/list resposta com seu catálogo completo de ferramentas significa que o servidor está viver. Se a resposta voltar como text/event-stream quando você espera JSON, o transporte tem enableJsonResponse desabilitado; vire a bandeira.

Mantenha os dois transportes rodando em caminhos diferentes por uma semana após a transição: /sse como o velho ouvinte, /mcp como o novo. Emita uma linha de log a cada momento em que um cliente se conecta /sse com seu agente de usuário. Quando o registro fica silencioso, você pode excluir o manipulador antigo. A maioria das bibliotecas cliente fornece suporte HTTP Streamable entre Dezembro de 2025 e fevereiro de 2026; espere uma longa cauda de instalações antigas do Cursor e do Claude Desktop.

O que permanece igual, o que muda

Preocupação Transporte SSE HTTP streamável
Modelo de conexão Um de longa duração por cliente Resposta de solicitação, fluxo opcional
Balanceamento de carga Sessões fixas necessárias Qualquer instância responde a qualquer solicitação
Estado da sessão Memória em processo Datastore digitado no ID da sessão
Ajuste sem servidor Bloqueado por limites de duração da conexão Nativa
Streaming de progresso Padrão Ativar por meio do cabeçalho Aceitar
Descoberta Aperto de mão ao vivo /.well-known/mcp/server-card.json
Invocação de ferramenta JSON-RPC sobre quadros SSE JSON-RPC sobre corpo HTTP

Principais conclusões

  • SSE está obsoleto, não removido. Os clientes ainda aceitam até 2026, mas novos servidores e listagens de registro exigem HTTP Streamable.
  • Crie novos por solicitação. Nenhum mapa de sessão em processo; deixe o objeto do servidor viva apenas enquanto o RPC durar.
  • Envie o estado para um armazenamento de dados. Redis, objetos duráveis ​​ou Postgres digitados no Mcp-Session-Id cabeçalho.
  • Serverless está de volta à mesa. Trabalhadores Cloudflare, Lambda, Vercel Funções; nenhum deles apoiou bem a ESS de longa duração.
  • Publique uma placa de servidor. /.well-known/mcp/server-card.json faz seu servidor detectável sem uma conexão.

O servidor MCP do Botoi é fornecido em Streamable HTTP em api.botoi.com/mcp com 49 ferramentas selecionadas para pesquisa de IP, validação de e-mail, DNS, hashing, assinatura JWT e QR geração. A fonte é licenciada pelo MIT e reflete o padrão acima; leia o documentos de configuração para Configurações de Claude Desktop, Claude Code, Cursor, VS Code e Windsurf.

FAQ

O MCP SSE foi removido ou apenas obsoleto?
Obsoleto em 1º de abril de 2026; o suporte de tempo de execução ainda existe em bibliotecas de cliente para compatibilidade com versões anteriores, mas novos servidores MCP e listagens de registro exigem HTTP Streamable. O roteiro para 2026 remove totalmente o SSE do protocolo base na próxima versão secundária; comece sua migração agora e não na remoção.
Por que o MCP abandonou o SSE?
O SSE mantinha uma conexão TCP aberta por cliente e dificultava o dimensionamento horizontal. Dois servidores SSE idênticos atrás de um balanceador de carga round-robin produziram sessões split-brain: o estado da ferramenta armazenado no servidor A era invisível para o servidor B. O HTTP streamable usa ciclos curtos de solicitação-resposta com fluxos recuperáveis ​​opcionais, de modo que balanceadores de carga e CDNs roteiam cada solicitação sem fixar um cliente a uma instância.
O que é nova instância por solicitação?
Cada solicitação recebida constrói um novo objeto de servidor MCP, manipula o RPC e descarta a instância. Nenhum estado na memória entre as solicitações. O estado que precisa persistir (tokens de progresso, sessões de ferramentas) reside em um armazenamento de dados que o manipulador lê na entrada e grava na saída. Isso permite que você execute o mesmo servidor em uma plataforma sem servidor, como Cloudflare Workers ou AWS Lambda, sem o limite de duração da conexão de 15 minutos.
Ainda preciso de WebSockets para saída da ferramenta de streaming?
Não. O HTTP Streamable inclui um fluxo opcional no estilo SSE dentro de uma resposta POST padrão para ferramentas que emitem resultados parciais. A diferença do SSE antigo é que o fluxo reside dentro de uma solicitação HTTP e termina com a chamada da ferramenta. Você não mantém um soquete aberto entre chamadas de ferramenta.
Como faço para testar um servidor HTTP Streamable localmente?
Use o inspetor MCP oficial (npx @modelcontextprotocol/inspector) que agora fala ambos os transportes. Ou enrole o endpoint com um corpo JSON-RPC e um cabeçalho Accept: text/event-stream; você verá uma única resposta JSON ou um fluxo de eventos, dependendo se a ferramenta emite progresso. O resumo da sessão pode ser testado com os cabeçalhos Mcp-Session-Id e Last-Event-Id.

Comece a construir com botoi

150+ endpoints de API para consultas, processamento de texto, geração de imagens e utilitários para desenvolvedores. Plano gratuito, sem cartão de crédito.