AmigaОбучение ИИ
Модуль 1 · Введение · урок 1 из 13

Начинаем

5 мин чтения▶ есть видеоверсия

Этот курс для тех, кто уже написал хотя бы один MCP-сервер и хочет понять, что происходит под декоратором @mcp.tool(). Мы разберём возможности, которые редко нужны в первом сервере, но без которых не обходится ни один серьёзный: обратные запросы от сервера к клиенту, уведомления о прогрессе, транспорты и работу с состоянием.

Что вы уже должны знать

Курс продолжает «Введение в MCP». Мы считаем, что вы помните три роли (хост, клиент, сервер), три примитива сервера (инструменты, ресурсы, промпты) и умеете поднять сервер на Python SDK. Понадобится Python 3.10 или новее, уверенное владение async/await и общее представление о том, что такое Server-Sent Events.

Из чего состоит курс

Первый модуль — про то, как сервер может обратиться к клиенту, а не только отвечать ему. Sampling — сервер просит модель хоста что-то сгенерировать. Уведомления — сервер сообщает о ходе долгой операции и шлёт логи. Roots — клиент сообщает серверу, в каких папках ему разрешено работать. У каждой темы два урока: теория и пошаговое построение рабочего примера.

Второй модуль — про то, как байты ходят по проводу. Устройство JSON-RPC-сообщений, транспорт STDIO, транспорт Streamable HTTP и его детали, а в конце — состояние: чем отличается сервер, который помнит клиента, от сервера, который не помнит ничего, и как это влияет на масштабирование.

На какую версию мы опираемся

Здесь важная оговорка, которую нужно прочитать до первого урока. Спецификация MCP живёт ревизиями с датами в названии. На момент написания курса актуальная ревизия — 2026-07-28, предыдущая — 2025-11-25. Между ними произошёл самый большой перелом в истории протокола: исчезли рукопожатие initialize и HTTP-сессии, а сервер потерял право отправлять клиенту собственные запросы.

Три темы первого модуля — sampling, логирование через протокол и roots — в ревизии 2026-07-28 помечены как устаревшие. Они остаются в спецификации минимум год, SDK их поддерживает, а большинство существующих серверов и хостов ими пользуется. Но новые серверы строить на них не рекомендуется. Мы всё равно разбираем их подробно: во-первых, вы будете встречать их в чужом коде, во-вторых, механика обратных запросов лежит в основе того, чем их заменили, — паттерна многошаговых запросов (MRTR) и элиситации.

Уведомления о прогрессе не устарели и остаются основным способом показать пользователю, что сервер жив и работает.

Все примеры кода написаны для Python SDK версии 2. В нём класс FastMCP переименован в MCPServer, а вместо связки «транспорт + сессия» появился единый Client. Если у вас в проекте mcp первой версии, примеры придётся адаптировать; таблица соответствий есть в руководстве по миграции на py.sdk.modelcontextprotocol.io.

Как проходить

Каждый урок заканчивается разделом «Попробуйте сами» с заданиями на 5–15 минут. Для уроков-практикумов заведите отдельную папку и пишите код руками: прочитанный код не запоминается, набранный — да. Проверять можно двумя способами: через MCP Inspector (uv run mcp dev server.py) и через in-memory клиент SDK, который подключается к серверу в том же процессе без сети. Второй способ используется во всех практикумах, потому что он даёт предсказуемый вывод.

Спецификацию держите открытой: modelcontextprotocol.io/specification/latest. Мы ссылаемся на конкретные разделы, и если текст урока и спецификация разойдутся, права спецификация.

Попробуйте сами

10–15 мин на рабочем месте
  1. Установите SDK командой uv add "mcp[cli]" (или pip install "mcp[cli]") и выполните mcp version, чтобы убедиться, что установилась вторая версия.
  2. Откройте страницу устаревших возможностей спецификации и выпишите, чем предлагается заменить sampling, roots и логирование. Эти три ответа пригодятся в каждом уроке первого модуля.

Коротко

  • Курс для тех, кто уже написал MCP-сервер и хочет понять протокол глубже.
  • Два модуля: обратные возможности (sampling, уведомления, roots) и транспорты с состоянием.
  • Опираемся на ревизию спецификации 2026-07-28 и Python SDK v2 (MCPServer, Client).
  • Sampling, roots и логирование через протокол устарели, но живы и повсеместно встречаются; прогресс — нет.
  • Практикумы делаем руками, проверяем in-memory клиентом и Inspector.

Видеоверсия

Сценарий озвучки · 362 слова, ≈ 3 мин

Если вы уже написали свой первый MCP-сервер и он работает, у вас наверняка накопились вопросы. Что делать, если инструмент выполняется минуту, и хост считает, что сервер завис? Как сервер может попросить модель что-то написать, если у сервера нет своего ключа к API? Что такое тот самый Streamable HTTP, о котором пишут в документации? Этот курс отвечает на такие вопросы.

Курс состоит из двух частей. В первой мы разберём, как сервер может обращаться к клиенту, а не только отвечать ему. Это sampling, когда сервер просит модель хоста что-то сгенерировать. Это уведомления о прогрессе и логи. И это roots — список папок, в которых клиент разрешает серверу работать. Каждая тема идёт парой: сначала теория, потом мы строим пример руками, шаг за шагом.

Во второй части спускаемся на уровень провода. Как выглядит сообщение протокола, что такое запрос, ответ и уведомление. Как работает транспорт через стандартный ввод-вывод и почему в таком сервере нельзя просто написать print. Как устроен транспорт по эйч-ти-ти-пи с потоком событий. И наконец — состояние: что сервер должен помнить о клиенте, а что не должен, и как от этого зависит, можно ли поставить сервер за балансировщик.

Одна важная оговорка перед стартом. Спецификация MCP меняется, и в последней ревизии, датированной двадцать восьмым июля две тысячи двадцать шестого года, три темы из первой части помечены как устаревшие: sampling, логирование через протокол и roots. Они остаются в спецификации ещё как минимум год, SDK их поддерживает, существующие серверы ими пользуются. Но для новых серверов рекомендуют другие подходы, и мы про них тоже расскажем. Понимать устаревшие механизмы всё равно нужно: вы встретите их в чужом коде, а главное — на их основе построен новый способ общения сервера с клиентом.

Все примеры написаны на Python, на второй версии официального SDK. Если у вас в проекте первая версия, главное отличие — класс FastMCP переименован в MCPServer, а клиент стал единым объектом. В документации SDK есть таблица соответствий.

Как проходить курс. Держите открытой спецификацию, мы будем на неё ссылаться. Код из практикумов набирайте руками, а не копируйте: так он запоминается. Проверять серверы будем встроенным клиентом SDK, который подключается к серверу прямо в том же процессе, без сети, и даёт предсказуемый вывод.

Начнём с sampling — самой неожиданной возможности протокола, при которой сервер сам обращается к модели.

Отметка хранится только в вашем браузере