Episódio 001 · Tutoriais de IA
Atualize seu servidor MCP para a especificação sem sessão
Uma migração executável de sessões MCP ligadas à conexão para contexto por requisição, identificadores explícitos e autorizados, compatibilidade entre versões e cinco testes de liberação.
Nota de campo
Para adotar o MCP 2026-07-28, remova as sessões do protocolo, Mcp-Session-Id e a dependência moderna de initialize. Envie versão e capacidades em cada requisição, implemente server/discover e represente a continuidade de negócio necessária com identificadores opacos e autorizados passados como argumentos comuns. Isole a rota initialize legada e exija aprovação nos cinco testes entre conexões e usuários.
O que o teste nos mostra
Para adotar o MCP 2026-07-28, remova as sessões do protocolo, Mcp-Session-Id e a dependência moderna de initialize. Envie versão e capacidades em cada requisição, implemente server/discover e represente a continuidade de negócio necessária com identificadores opacos e autorizados passados como argumentos comuns. Isole a rota initialize legada e exija aprovação nos cinco testes entre conexões e usuários.
Transcrição
Se o seu servidor MCP ainda cria uma sessão, devolve Mcp-Session-Id e espera por notifications/initialized, ele segue o modelo antigo. Atualizar para a especificação 2026-07-28 não é mover essa sessão para o Redis. É fazer cada requisição ser compreensível por si só.
O resultado é este: a chamada leva a versão do protocolo e as capacidades do cliente em _meta; no HTTP, leva também MCP-Protocol-Version. O servidor valida, executa e responde sem memória presa à conexão. Se um fluxo realmente precisar de continuidade, o servidor emite um identificador explícito, e o cliente o envia como argumento comum na próxima ferramenta.
O changelog oficial destaca duas rupturas. As sessões do protocolo e o cabeçalho Mcp-Session-Id foram removidos do Streamable HTTP; tools/list, resources/list e prompts/list não variam mais por conexão. Para a revisão moderna, também saem initialize e notifications/initialized. Versão, capacidades e identidade passam a acompanhar cada requisição. Essa é a regra normativa. Nossa recomendação é manter apenas o estado de negócio necessário, com dono, autorização e validade claros.
Vamos migrar um servidor de relatórios. Antes, o handler lia Mcp-Session-Id, buscava a sessão e guardava nela o rascunho. Removemos o leitor do cabeçalho, o middleware, a tabela de sessões e a marca initialized. Criamos um validador compartilhado que lê protocolVersion e clientCapabilities de _meta. No HTTP, comparamos a versão com MCP-Protocol-Version. Se não houver suporte, devolvemos UnsupportedProtocolVersionError e as versões aceitas, sem escolher outra silenciosamente.
Agora create_report retorna reportHandle, como rpt_7K2. Não é uma sessão com outro nome; é uma referência explícita ao relatório. update_report exige esse argumento. O servidor verifica o proprietário, aplica expiração e armazena somente o estado necessário. O valor deve ser opaco e imprevisível, nunca uma chave de banco exposta.
Também implementamos server/discover para anunciar versões, capacidades e identidade. Numa migração gradual, um servidor compatível com as duas eras reconhece a rota moderna por _meta e mantém a rota antiga de initialize isolada. O estado legado não pode alterar as listas modernas.
O teste tem cinco partes: tools/list funciona sem initialize e sem cabeçalho de sessão; uma nova conexão recebe o mesmo catálogo; create_report gera um identificador, e update_report falha sem ele mas funciona com ele em outra conexão; uma versão incompatível retorna o erro correto; e a rota moderna não exige notifications/initialized. Depois executamos dois usuários em paralelo e confirmamos que o identificador de um não acessa o relatório do outro.
A aprovação exige cinco de cinco: sem Mcp-Session-Id, sem dependência moderna de initialize, metadados por requisição, identificadores explícitos e autorizados e testes entre conexões. Stateless não significa “sem estado de negócio”; significa que o protocolo não esconde estado na conexão. Anexe as fontes oficiais à revisão e fixe os testes no contrato 2026-07-28. A Optijara pode ajudar a desenhar a fronteira de compatibilidade e um plano de testes auditável.