A Microsoft anunciou o lançamento da versão 2.0 do kit de desenvolvimento de software oficial do MCP para C#, juntamente com a implementação da especificação 2026-07-28. A versão altera a forma de execução dos servidores MCP por HTTP, tornando-os sem estado por padrão, adiciona cabeçalhos HTTP padronizados e oferece suporte a solicitações de múltiplas rodadas que permitem às ferramentas solicitar entradas do usuário ou do modelo de linguagem sem depender de uma sessão persistente.
A versão é destinada a desenvolvedores que criam servidores e clientes MCP no .NET, mantendo o funcionamento das interfaces de programação de aplicativos estáveis da versão 1.x e oferecendo suporte aos frameworks net8.0, net9.0 e net10.0, além de netstandard2.0 para uso com o .NET Framework.
Servidores sem estado por padrão
Nas versões anteriores, o uso de Streamable HTTP exigia concluir o handshake de inicialização e criar uma sessão, para então enviar o cabeçalho Mcp-Session-Id em cada solicitação subsequente. Isso vinculava as solicitações à instância do servidor que emitia o identificador, exigindo roteamento fixo ou migração de sessões ao executar várias instâncias.
A especificação 2026-07-28 elimina o handshake initialize e initialized e o cabeçalho Mcp-Session-Id, transportando a versão do protocolo e os recursos em cada solicitação. Como resultado, qualquer instância do servidor pode processar qualquer solicitação, sem a necessidade de sessões fixas ou de armazenamentos de sessão compartilhados no nível do protocolo. Isso torna a implantação de servidores MCP em ambientes serverless, com várias instâncias ou de borda mais semelhante à execução de um aplicativo ASP.NET Core comum atrás de um balanceador de carga.
A opção HttpServerTransportOptions.Stateless passa a ser definida como true por padrão na versão 2.0, com a possibilidade de ativar o modo com estado quando forem necessárias mensagens não solicitadas do servidor para o cliente ou um estado de transporte associado à sessão. As sessões continuam disponíveis como opção, mas deixaram de ser a configuração básica.
Cabeçalhos HTTP para roteamento e monitoramento
O modo sem estado transforma uma solicitação MCP em uma solicitação HTTP POST autossuficiente, permitindo que a infraestrutura usual a trate como qualquer outro tráfego HTTP. A especificação oferece suporte a cabeçalhos como Mcp-Method e Mcp-Name, além da possibilidade de promover alguns parâmetros da ferramenta a cabeçalhos no formato Mcp-Param-*.
O balanceador de carga, o proxy, o gateway ou o firewall de aplicativos web podem usar esses cabeçalhos para roteamento e monitoramento sem analisar o corpo da solicitação JSON-RPC. O corpo da solicitação continua sendo a fonte confiável; se o valor do cabeçalho for diferente do valor presente no corpo, o servidor rejeitará a solicitação com um erro HeaderMismatch. O design também oferece suporte à codificação de valores não suportados nos cabeçalhos, como valores não ASCII, usando um indicador Base64.
Solicitações de múltiplas rodadas para ferramentas interativas
O recurso Multi Round-Trip Requests, ou MRTR, adiciona uma forma de lidar com ferramentas que não conseguem concluir seu trabalho em uma única chamada. Em vez de o servidor se conectar ao cliente por meio de uma sessão ativa durante a execução da solicitação, ele retorna um resultado do tipo InputRequiredResult que inclui as solicitações de entrada e um estado opaco chamado requestState.
O cliente executa a ação solicitada, como pedir confirmação ao usuário, chamar um modelo de linguagem ou exibir raízes de espaços de trabalho, e então reenvia a mesma chamada da ferramenta acompanhada de inputResponses e requestState. O processo pode ser repetido por várias rodadas, enquanto as informações de continuidade são transportadas dentro do payload; portanto, a operação não precisa de uma sessão.
O McpClient de alto nível processa MRTR automaticamente depois que os handlers apropriados são registrados. A versão também pode usar uma ponte de compatibilidade com clientes mais antigos quando houver uma sessão com estado. Já o cliente antigo que opera sem sessão não consegue executar a interação de múltiplas rodadas; por isso, a ferramenta deve fornecer um caminho alternativo, como passar o valor necessário diretamente em um parâmetro da chamada.
Compatibilidade e pacotes disponíveis
As APIs estáveis e não obsoletas da versão 1.x continuam compilando e sendo executadas na versão 2.0, enquanto as alterações obsoletas aparecem como avisos, não como remoções. Um cliente 2.0 pode usar o handshake de inicialização antigo ao se conectar a um servidor mais antigo, e um servidor 2.0 também aceita esse handshake de um cliente antigo.
A única exceção à compatibilidade do protocolo é a extensão Tasks; seu design reformulado na versão 2.0 substitui o Tasks experimental presente na especificação 2025-11-25 e não é compatível com ele no nível da interface nem do protocolo. O Tasks agora está disponível no pacote separado ModelContextProtocol.Extensions.Tasks, enquanto os MCP Apps experimentais vêm no ModelContextProtocol.Extensions.Apps.
Os pacotes básicos incluem ModelContextProtocol.Core para o cliente e os componentes de baixo nível, ModelContextProtocol para a maioria dos servidores e ModelContextProtocol.AspNetCore para servidores Streamable HTTP. A publicação indica que o próximo foco da série 2.x será a autenticação e a autorização abrangentes, com base em uma compatibilidade mais estreita com OAuth e OpenID Connect.