Передача MCP-инструментов в сопровождение
Полный проект включает авторский корпус, stdio-сервер, поиск, чтение, ресурсы, роли, запись подтверждённого черновика и ограниченный reader-клиент. Теперь подготовим его передачу в сопровождение. Результат урока — описание совместимости и границ, по которому другой человек сможет выбрать целое состояние и понять, что потребуется для дальнейшей интеграции. Учебная готовность исходников остаётся отдельной от запуска и production-подключения.
Архив содержит двенадцать самостоятельных папок. Последняя представляет полный профиль серии; ранние позволяют проследить введение каждого механизма. Нельзя смешивать storage.py из финала с сервером девятого шага и ожидать одинакового replay: поведение определяется выбранным состоянием. README и DELIVERY.md указывают Python, редакцию MCP, роли и невыполненные действия. Сервер, клиент, база и AI-хосты при подготовке не запускались.
Совместимость имеет конкретные границы
Наш протокол — MCP 2026-07-28, modern-only. В каждом запросе требуется _meta с версией и возможностями клиента; обнаружение показывает поддерживаемую редакцию. Старый initialize не реализован, сессии прежней редакции не создаются. Наличие похожих имён tools/call в старом примере не означает тождественность обмена. Перед подключением реального приложения нужно узнать, какую редакцию и транспорт оно действительно поддерживает.
Сервер использует stdio, а не HTTP. Поэтому в пакете нет endpoint, SSE, OAuth или проверки браузерного Origin. Для локального процесса роль задаётся доверенным окружением. Переносить тот же код на публичный сетевой порт без нового договора нельзя. HTTP-профиль требует своих метаданных, проверки транспорта и авторизации. Эта серия даёт предметную библиотеку и протокольные операции, но не завершённое решение для удалённого многопользовательского сервиса.
Не реализованы subscriptions/listen, sampling, elicitation и длительные задачи. Операции короткие и синхронные, а reader-клиент ожидает один завершённый ответ. Такое ограничение соответствует корпусу из четырёх файлов и делает механизм обозримым. Если новая задача требует фоновой индексации или обновлений редактора, сначала нужно определить жизненный цикл и результат этой операции, затем расширять сервер. Простое объявление capability без реализации не является поддержкой функции.
Данные и роль процесса
Корпус читается из собственного манифеста, текст имеет ограниченный размер, клиент выбирает id или известный ресурсный URI. Reader видит только public, editor — весь авторский корпус. Эти роли не устанавливаются по имени приложения и не меняются текстом статьи. Программа не обращается к настоящему ProfessorWeb и не использует пользовательские аккаунты. Такая самостоятельность облегчает передачу учебных исходников и сохраняет ясное происхождение примеров.
Однако доступ к файлам архива открыт человеку. Служебная заметка вымышленная, а граница API не является границей операционной системы. Для настоящих закрытых источников хост должен изолировать среду и не выдавать модели широкие параллельные инструменты чтения. Если агент может открыть манифест и базу напрямую, роль MCP не защищает их от этого другого маршрута. Такое условие нужно записать рядом с конфигурацией, а не оставлять будущему автору для догадки.
Черновики лежат в SQLite, отдельно от публичного корпуса. Создание не меняет манифест и не запускает сборку сайта. Следовательно, успешный result не является публикацией. Чтобы материал стал статьёй, нужен отдельный редакционный процесс с адресом, статусом и правилами каталога. Сервер нашей лаборатории не имеет инструмента publish. Это конкретное ограничение доступной операции, которое помогает сохранить контроль над внешним эффектом.
Подтверждение и повтор
Операторское одобрение связано с точным kind, slug, title и text. Сервер проверяет fingerprint, срок и одноразовость в транзакции вместе с вставкой черновика. Реальная граница участия человека требует, чтобы агент не мог вызывать operator.py или править базу подтверждений напрямую. В учебном пакете это условие описано, но системная изоляция не настроена. Перед production-подключением она становится самостоятельным обязательным предметом проекта.
Operation хранится с черновиком. Повтор того же ключа и payload возвращает прежний результат без новой записи; иной payload отклоняется. После перезапуска эта связь сохраняется в базе, в отличие от словаря в памяти. Но срок хранения operation и удаление записей не реализованы. Если сопровождение добавит очистку, нужно объяснить, как она влияет на поздние повторы клиента. Идемпотентность имеет определённый договор хранения, а не бесконечную магическую гарантию.
Логи намеренно не содержат токены, payload и подробный traceback. Это уменьшает раскрытие через диагностику, но также ограничивает расследование неожиданного сбоя. При развитии приложения можно добавить безопасные идентификаторы и отдельный доверенный журнал. Нельзя решать проблему простым печатанием всего запроса. В нашей подготовке реальных инцидентов и полученных логов нет; DELIVERY.md описывает ожидаемую политику, которую потребуется проверить в выбранной среде.
Обновление проекта
При добавлении инструмента сначала определите его результат, входную схему, источник данных и возможный внешний эффект. Затем свяжите объявление с фактическим обработчиком и проверкой доступа. Если операция пишет, рассмотрите подтверждение, уникальность и повтор после потери ответа. Такой порядок сохраняет уроки маленькой библиотеки при росте проекта. Название MCP само по себе не делает новую операцию понятной или безопасной для исполнения.
При обновлении редакции протокола заново прочитайте первичные документы и сравните формы сообщений. Переименование даты в константе недостаточно: могут измениться handshake, ошибки, transport metadata или результат. Также пересмотрите авторский клиент, который сознательно принимает только complete и один reader-маршрут. Архив не является вечной совместимостью с любым SDK. Его достоинство — явная область, полные исходники и честный статус выполнения.
Новый инструмент экспорта
Предположим, сопровождение хочет добавить экспорт черновика в Markdown. Это новое действие записи, даже если исходный текст уже одобрен для SQLite. Нужно определить разрешённую папку, правило имени, обработку существующего файла и связь с прежним подтверждением. Нельзя просто дать клиенту произвольный path и считать безопасность унаследованной от create_draft. Побочный эффект изменился, поэтому меняется и предмет договора.
Экспорт также не равен публикации. Markdown может оставаться черновиком и не попадать в производственную сборку. Если нужен настоящий выпуск, следует отдельно связать статус, постоянный адрес, каталог и размещение. Наш сервер сознательно заканчивает маршрут на локальной редакционной записи. Такая граница позволяет расширять проект последовательными результатами, а не выдавать один общий токен на все будущие этапы.
Документ DELIVERY полезно обновлять вместе с каждым новым механизмом. Если capability появилась, а список ограничений всё ещё говорит «только чтение», новый читатель получит неверную основу. Передача описывает актуальные исходники и доверенные условия, а не историю замысла. Поэтому сопровождение включает не только код, но и точное объяснение его области применения.
Ожидаемый финальный результат — локальный инструментальный слой, по которому можно искать и читать разрешённые Markdown-источники, а отдельный editor может сохранить подтверждённый черновик. Все программы, тесты и AI-подключения остаются not_run. Полный архив и оглавление серии позволяют пройти путь самостоятельно. Следующее применение к настоящей библиотеке должно начинаться с нового корпуса, доверенной конфигурации и выбранного хоста, сохраняя разделение чтения, записи и публикации.
Полный файл DELIVERY.md из состояния lesson-12. Полное самостоятельное состояние находится в архиве серии; фрагмент не заменяет остальные определения.
# Передача
Совместимость: только протокол 2026-07-28, stdio, синхронные короткие запросы.
Нет subscriptions/listen, elicitation, sampling, SSE, legacy initialize, OAuth.
Клиент не является универсальным SDK: reader profile и один ожидаемый ответ.
Политика доступа: неизменная роль процесса; конфигурация хоста вне доверия модели.
Одобрение: отдельный оператор, точное содержимое, срок, одноразовость, SQLite transaction.
Повтор: идентификатор операции + fingerprint payload; лимит не равен публикации.
Секреты, токены и содержимое запросов не включаются в диагностические сообщения.
Проверки совместимости и выполнения не проводились, сервер не подключался к AI-хостам.
Статус примера: not_run. При подготовке не выполнялись учебные программы, тесты, вызовы AI или деплой. Описанные эффекты ожидаемые.
Оглавление серии · Полные исходники
Первичные документы: Источник 1, Источник 2.