Перейти к содержанию

Устаревшие возможности

Машинный перевод

Эта страница переведена с английской документации автоматически, и основной версией остаётся английская страница. Если что-то читается неправильно, на странице Переводы объясняется, как об этом сообщить.

Спецификация 2026-07-28 выводит из обращения пять возможностей. SDK по-прежнему реализует каждую из них, и каждая теперь выдаёт предупреждение об устаревании.

В таблице ниже перечислены все устаревшие возможности, причина, по которой каждая уходит, и замена, на которую стоит опираться.

Что объявлено устаревшим

Устарело Почему Что делать вместо этого
Корневые каталоги (roots): ctx.session.list_roots(), client.send_roots_list_changed(), параметр list_roots_callback=, который передаётся в Client(...) SEP-2577 выводит возможность из обращения. Принимайте пути как обычные аргументы инструмента или URI ресурсов либо встраивайте ListRootsRequest в InputRequiredResult (см. Многораундовые запросы (multi-round-trip)).
Сэмплирование (sampling) по инициативе сервера: ctx.session.create_message(), параметр sampling_callback=, который передаётся в Client(...) SEP-2577 выводит возможность из обращения. Верните InputRequiredResult и позвольте клиенту повторить вызов (см. Многораундовые запросы).
Протокольное логирование: ctx.log(), ctx.debug(), ctx.info(), ctx.warning(), ctx.error(), ctx.session.send_log_message(), client.set_logging_level() SEP-2577 выводит возможность из обращения. Внутри протокола её ничто не заменяет. Обычный import logging с выводом в stderr (см. Логирование).
ping: client.send_ping() Удалён из протокола, а не просто объявлен устаревшим. В 2026-07-28 метода ping нет. Ничего. Работает только на подключении с mode="legacy".
Прогресс от клиента к серверу: client.send_progress_notification() В 2026-07-28 прогресс передаётся только от сервера к клиенту. Отправлять нечего. О ходе выполнения сообщает ваш сервер — через ctx.report_progress() (см. Прогресс).

Из этой таблицы следуют три вывода:

  • Корневые каталоги, сэмплирование и логирование идут вместе. Одно предложение, SEP-2577, объявляет устаревшими все три возможности разом.
  • У сэмплирования и корневых каталогов есть общая, более глубокая проблема: это места, где сервер отправляет запрос клиенту. Именно это направление целиком спецификация 2026-07-28 заменяет многораундовыми запросами. Исчезли самостоятельные RPC-методы (sampling/createMessage, roots/list и push-вариант elicitation/create); типы полезной нагрузки CreateMessageRequest / ListRootsRequest / ElicitRequest сохранились — они встраиваются в InputRequiredResult.input_requests, а на клиенте попадают в те же колбэки.
  • ping стоит особняком. Протокол не объявляет его устаревшим, а удаляет. Метод SDK всё равно выдаёт предупреждение (в его тексте сказано removed, а не deprecated), а вызов на современном подключении возвращает «Method not found».

Устаревание носит рекомендательный характер

Сегодня ничего не ломается.

Все перечисленные методы продолжают работать в любой сессии, согласованной на версии 2025-11-25 или более ранней. Зафиксируйте на клиенте mode="legacy" — и получите в точности поведение до 2026 года. В передаваемых данных ничего не меняется, согласование возможностей остаётся прежним.

Меняется одно: при первом запуске каждого из них появляется заметное предупреждение:

MCPDeprecationWarning: The logging capability is deprecated as of 2026-07-28 (SEP-2577).

MCPDeprecationWarning наследуется от UserWarning, а не от DeprecationWarning. Это сделано намеренно: фильтр Python по умолчанию показывает DeprecationWarning только в коде, запущенном напрямую как __main__, — именно так библиотеки объявляют что-то устаревшим, и два года этого никто не замечает. Это предупреждение видно везде, без всякого флага -W.

Warning

Рекомендательный характер заканчивается на уровне сети. Сэмплирование и корневые каталоги — это запросы от сервера к клиенту, а в сессии 2026-07-28 нет канала, по которому такой запрос можно передать. Вызовите ctx.session.create_message() внутри инструмента на современном подключении — предупреждение всё равно сработает, а затем отправка завершится ошибкой:

Cannot send 'sampling/createMessage': this transport context has no back-channel
for server-initiated requests.

Два сигнала, именно в таком порядке. MCPDeprecationWarning срабатывает в момент вызова метода, на любом подключении. Ошибка — это то, что возвращается, когда SDK после этого пытается отправить запрос. От начала до конца эти две возможности работают только на подключении с mode="legacy", клиент которого зарегистрировал соответствующий колбэк.

Отключение предупреждения

В новом коде — не отключайте.

Но сервер, который вы поддерживаете и который действительно обслуживает клиентов до 2026 года, имеет полное право на тихий лог. Отфильтруйте категорию до того, как выполнится первый устаревший вызов:

import warnings

from mcp import MCPDeprecationWarning

warnings.filterwarnings("ignore", category=MCPDeprecationWarning)

Вот и весь API. Переключателя для отдельных методов нет, и он не нужен: смысл единой категории в том, что одна строка её заглушает и одна строка возвращает.

Check

Разверните фильтр в обратную сторону — и получите бесплатный регрессионный тест. Добавьте "error::mcp.MCPDeprecationWarning" в параметр filterwarnings конфигурации pytest, и устаревший вызов будет выбрасывать исключение, а не предупреждать. Инструмент old_log, который всё ещё вызывает ctx.info(), перестаёт проходить тест и начинает сообщать:

Error executing tool old_log: The logging capability is deprecated as of 2026-07-28 (SEP-2577).

Одна строка в конфигурации pytest — и устаревший вызов уже не сможет незаметно вернуться в кодовую базу, не провалив тест.

Итоги

  • Спецификация 2026-07-28 объявляет устаревшими корневые каталоги, сэмплирование по инициативе сервера и протокольное логирование (всё — SEP-2577), ограничивает прогресс направлением от сервера к клиенту и удаляет ping.
  • Столбец с заменами указывает, куда идти дальше: Многораундовые запросы — для сэмплирования и корневых каталогов, Логирование — для логирования, Прогресс — для прогресса. ping не требует вообще ничего.
  • Устаревание носит рекомендательный характер: в передаваемых данных ничего не меняется, всё продолжает работать в сессиях до 2026 года, и появляется заметное предупреждение MCPDeprecationWarning (это UserWarning, поэтому оно включено по умолчанию).
  • Сэмплированию и корневым каталогам дополнительно нужен обратный канал (back-channel), которого в сессии 2026-07-28 нет. На современном подключении они выдают предупреждение, а затем выбрасывают исключение.
  • warnings.filterwarnings("ignore", category=MCPDeprecationWarning) заглушает всю категорию; "error::mcp.MCPDeprecationWarning" в pytest превращает её в провал теста.
  • Новый код не следует строить ни на одной из этих возможностей.

Все остальные страницы этой документации описывают актуальный API.