Funcionalidades descontinuadas
Tradução automática
Esta página foi traduzida automaticamente a partir da documentação em inglês, e a página em inglês é a versão de referência. Se algo parecer errado, Traduções explica como avisar.
A especificação 2026-07-28 aposenta cinco coisas. O SDK ainda implementa cada uma delas, e cada uma agora carrega um aviso de descontinuação.
A tabela abaixo nomeia cada funcionalidade descontinuada, o motivo de ela estar saindo e o substituto sobre o qual construir.
O que está descontinuado
| Descontinuado | Por quê | O que fazer no lugar |
|---|---|---|
Roots: ctx.session.list_roots(), client.send_roots_list_changed(), o list_roots_callback= que você passa para Client(...) |
A SEP-2577 aposenta a capacidade. | Receba os caminhos como argumentos comuns de ferramenta ou URIs de recurso, ou embuta um ListRootsRequest em um InputRequiredResult (veja Requisições de múltiplas idas e voltas). |
Amostragem (sampling) iniciada pelo servidor: ctx.session.create_message(), o sampling_callback= que você passa para Client(...) |
A SEP-2577 aposenta a capacidade. | Retorne InputRequiredResult e deixe o cliente repetir a chamada (veja Requisições de múltiplas idas e voltas). |
Logging de protocolo: ctx.log(), ctx.debug(), ctx.info(), ctx.warning(), ctx.error(), ctx.session.send_log_message(), client.set_logging_level() |
A SEP-2577 aposenta a capacidade. Nada dentro do protocolo a substitui. | O import logging comum para stderr (veja Logging). |
ping: client.send_ping() |
Removido do protocolo, não apenas descontinuado. Não existe método ping em 2026-07-28. |
Nada. Só funciona em uma conexão mode="legacy". |
Progresso cliente->servidor: client.send_progress_notification() |
A 2026-07-28 torna o progresso exclusivamente servidor->cliente. | Nada a enviar. O seu servidor informa progresso com ctx.report_progress() (veja Progresso). |
Três coisas saem dessa tabela:
- Roots, amostragem e logging andam juntos. Uma única proposta, a SEP-2577, descontinua as três capacidades de uma vez.
- Amostragem e roots compartilham um problema mais profundo: são pontos em que um servidor envia uma requisição ao cliente. Essa direção inteira é o que a 2026-07-28 substitui por Requisições de múltiplas idas e voltas. O que desaparece são os métodos RPC independentes (
sampling/createMessage,roots/liste oelicitation/createno estilo push); os tipos de payloadCreateMessageRequest/ListRootsRequest/ElicitRequestsobrevivem, embutidos emInputRequiredResult.input_requests, e no cliente chegam aos mesmos callbacks. pingé o diferente do grupo. O protocolo não o descontinua, ele o remove. O método do SDK ainda emite o aviso (a mensagem diz removed, não deprecated) e chamá-lo em uma conexão moderna responde com "Method not found".
Descontinuado é consultivo
Nada quebra hoje.
Cada método acima continua funcionando em qualquer sessão que tenha negociado 2025-11-25 ou anterior. Fixe mode="legacy" no cliente e você obtém exatamente o comportamento pré-2026. Não há mudanças no protocolo de transmissão e a negociação de capacidades segue igual.
O que muda é que você recebe um aviso visível na primeira vez que cada um é executado:
MCPDeprecationWarning: The logging capability is deprecated as of 2026-07-28 (SEP-2577).
MCPDeprecationWarning é subclasse de UserWarning, não de DeprecationWarning. Isso é proposital: o filtro padrão do Python só mostra DeprecationWarning em código executado diretamente como __main__, e é assim que bibliotecas descontinuam coisas sem ninguém perceber por dois anos. Este aparece em todo lugar, sem nenhuma flag -W.
Warning
"Consultivo" termina no nível do protocolo de transmissão. Amostragem e roots são
requisições do servidor para o cliente, e uma sessão 2026-07-28 não tem canal para
carregar uma. Chame ctx.session.create_message() dentro de uma ferramenta em uma
conexão moderna e o aviso ainda dispara, e então o envio falha com um erro:
Cannot send 'sampling/createMessage': this transport context has no back-channel
for server-initiated requests.
Dois sinais, nessa ordem. O MCPDeprecationWarning dispara no momento em que você
chama o método, em qualquer conexão. O erro é o que volta quando o SDK tenta enviar
em seguida. Esses dois só funcionam de ponta a ponta em uma conexão mode="legacy"
cujo cliente registrou o callback correspondente.
Silenciando o aviso
Não faça isso, em código novo.
Mas um servidor que você mantém e que de fato atende clientes pré-2026 tem todo o direito a um log silencioso. Filtre a categoria antes que a primeira chamada descontinuada seja executada:
import warnings
from mcp import MCPDeprecationWarning
warnings.filterwarnings("ignore", category=MCPDeprecationWarning)
A API inteira é essa. Não há uma chave por método, e você não quer uma: o sentido de ter uma única categoria é que uma linha a silencia e uma linha a traz de volta.
Check
Aplique o filtro no sentido contrário e você ganha um teste de regressão de graça.
Adicione "error::mcp.MCPDeprecationWarning" à configuração filterwarnings do seu
pytest e a chamada descontinuada lança uma exceção em vez de avisar. Uma ferramenta
chamada old_log que ainda chama ctx.info() para de passar e começa a reportar:
Error executing tool old_log: The logging capability is deprecated as of 2026-07-28 (SEP-2577).
Uma linha de configuração do pytest, e uma chamada descontinuada nunca mais consegue voltar sorrateiramente ao seu código sem quebrar um teste.
Recapitulando
- A especificação 2026-07-28 descontinua roots, a amostragem iniciada pelo servidor e o logging de protocolo (todos pela SEP-2577), restringe o progresso ao sentido servidor para cliente e remove o
ping. - A coluna de substitutos indica o próximo passo: Requisições de múltiplas idas e voltas para amostragem e roots, Logging para logging, Progresso para progresso.
pingnão precisa de nada. - Descontinuado é consultivo: sem mudanças no protocolo de transmissão, tudo continua funcionando em sessões pré-2026, e você recebe um
MCPDeprecationWarningvisível (umUserWarning, então está ligado por padrão). - Amostragem e roots precisam, além disso, de um canal de retorno (back-channel) que uma sessão 2026-07-28 não tem. Em uma conexão moderna elas avisam e depois lançam uma exceção.
warnings.filterwarnings("ignore", category=MCPDeprecationWarning)silencia a categoria inteira;"error::mcp.MCPDeprecationWarning"no pytest a transforma em falha de teste.- Código novo não deve ser construído sobre nenhuma delas.
Todas as outras páginas desta documentação ensinam a API atual.