Перейти до змісту

Застарілі можливості

Машинний переклад

Цю сторінку перекладено автоматично з англомовної документації, і основною версією є англомовна сторінка. Якщо щось читається неправильно, на сторінці Переклади пояснено, як про це повідомити.

Специфікація 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.