Застарілі можливості
Машинний переклад
Цю сторінку перекладено автоматично з англомовної документації, і основною версією є англомовна сторінка. Якщо щось читається неправильно, на сторінці Переклади пояснено, як про це повідомити.
Специфікація 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.