Устаревшие возможности
Машинный перевод
Эта страница переведена с английской документации автоматически, и основной версией остаётся английская страница. Если что-то читается неправильно, на странице Переводы объясняется, как об этом сообщить.
Спецификация 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.