Voltar as noticias
MCP agora é sem estado. A sessão apenas mudou.
MCP ProtocolAltaEN

MCP agora é sem estado. A sessão apenas mudou.

Dev.to - MCP·23 de agosto de 2026

MCP sem estado deletou a sessão do protocolo. A continuidade se embala no blob que o cliente envia de volta na nova tentativa. O post de agosto da Cloudflare chamou a reescrita de um protocolo totalmente sem estado com o qual um Worker pode se comunicar sem um Objeto Durável. Essa frase é verdadeira para o handshake. É a leitura errada de elicitação, carrinhos e tokens.

Sem estado foi a manchete que venderam

HUD dividido com um cartão WORKER escurecido e slot de SESSÃO vazio à esquerda, um carimbo ESTADO SEM ESTADO brilhante à direita

O carimbo é verdadeiro para o handshake, e o slot vazio ainda está desenhado embaixo.

A documentação convidou o modelo ingênuo. O changelog de 2026-07-28 remove initialize, Mcp-Session-Id, e sessões de protocolo do HTTP Streamable. O post de lançamento do projeto MCP disse que o núcleo mudou de um protocolo bidirecional com estado para requisição/resposta. Um balanceador de carga round-robin pode aceitar qualquer POST.

Essa é a leitura que muitas pessoas queriam em 2025, quando um servidor remoto bem comportado significava sessões fixas, streams mantidos e replay de mensagens. O post da Cloudflare é direto ao afirmar que McpAgent não é mais necessário para falar o protocolo. Um Worker com createMcpHandler é suficiente para ferramentas, prompts e recursos.

Acredite nessa manchete para o transporte. Então olhe para o que ainda precisa voltar na próxima chamada. A sessão não desapareceu. Ela mudou de bolso.

punkpeye disse no tópico HN da especificação que uma grande parte dos bugs do gateway de Glama veio da persistência do estado do servidor. Essa dor era real. A reescrita responde a isso para a camada de protocolo, que é por isso que a manchete caiu tão limpa. O trabalho restante é decidir qual estado era teatro de protocolo e qual estado ainda é um carrinho.

O handshake ainda acontece, um POST depois

Um cartão de vidro POST carregando três chips teal com as letras VERSION, CLIENT e CAPS

A identidade não saiu. Ela acompanha cada chamada agora.

A versão barata de sem estado é que o payload do handshake saiu. Não saiu. Cada requisição agora carrega io.modelcontextprotocol/protocolVersion e io.modelcontextprotocol/clientCapabilities em _meta. A identidade do cliente é um DEVER em cada chamada. A identidade do servidor carimba o resultado.

server/discover existe para clientes que querem capacidades antecipadamente. É opcional. A cláusula de sem estado da especificação é a parte que as pessoas pulam. Um servidor NÃO DEVE inferir versão, identidade ou capacidades de uma requisição anterior na mesma conexão.

Um Mcp-Session-Id restante não é um presente de compatibilidade. O HTTP Streamable diz para ignorá-lo e não criar ou ecoar um. GET e DELETE no endpoint MCP respondem com 405. O antigo cabeçalho de sessão é lixo.

Esse não é o argumento do imposto de byte do Todo Servidor MCP Sem Estado Reconstrói Estado em Algum Lugar. Esse post mediu _meta em relação ao handshake que ele substituiu. O ponto aqui é mais restrito. A identidade nunca saiu do fio. Ela apenas parou de viver na gaveta de um balconista.

O stream aberto se tornou uma nova tentativa

À esquerda um stream quebrado e escurecido rotulado STREAM MORTO, à direita uma cápsula teal selada rotulada ESTADO DA REQUISIÇÃO em um caminho de RETRY

O stream aberto morreu. O cliente carrega a mala de volta.

É aqui que a sessão realmente se moveu. A antiga elicitação precisava de um stream SSE mantido para que o servidor pudesse disparar elicitation/create durante a chamada. Esse stream era a parte pegajosa que as pessoas construíam Objetos Duráveis para manter aquecidos. Timeouts, instâncias drenadas e tabelas de replay eram o imposto.

Requisições Multi Round-Trip matam esse canal. O servidor retorna resultType: "input_required" com inputRequests. O cliente coleta a resposta e tenta novamente a ferramenta, prompt ou recurso original. O id do JSON-RPC DEVE mudar. Os dois POSTs são requisições independentes.

Independentes, exceto pela mala. A especificação permite que o servidor codifique o contexto necessário em requestState, uma string opaca que o cliente DEVE ecoar byte a byte. A documentação oficial do TypeScript é mais direta do que a especificação. createMcpHandler constrói um servidor fresco por requisição. inputResponses mantém apenas a última rodada. requestState é a única memória entre rodadas.

Você vai encontrar isso na primeira vez que uma ferramenta de deploy pedir confirmação, depois uma segunda pergunta sobre o ambiente. A rodada dois não tem mais o formulário da rodada um sentado em um mapa no Worker. Se você precisasse daquela confirmação mais tarde, ela teria que ser selada em requestState na saída.

O SDK oficial diz para criar apenas o que as rodadas anteriores já provaram. Trate o blob como controlado por um atacante. HMAC, vincule principal, método e um curto TTL. O codec que eles enviam é assinado, não criptografado, então mantenha segredos fora dele.

POST /mcp HTTP/1.1
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: deploy

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"deploy","arguments":{"env":"prod"},"inputResponses":{"confirm":{"action":"accept","content":{"ok":true}}},"requestState":"AEAD-protected blob","_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientCapabilities":{"elicitation":{"form":{}}}}}}

Esse segundo POST pode cair em um isolate diferente. Nada no protocolo exige que o primeiro Worker para de

Contexto Triplo Up

A transição para um protocolo sem estado pode otimizar o desempenho e a escalabilidade de aplicações web no Brasil. Empresas que adotarem essa abordagem poderão reduzir a complexidade de gerenciamento de sessões, melhorando a eficiência operacional.

Noticias relacionadas

Gostou do conteudo?

Receba toda semana as principais novidades sobre WebMCP.