Технологии

MCP: протокол подключения инструментов к ИИ

MCP решает одну конкретную задачу — комбинаторный взрыв интеграций N клиентов на M инструментов. Разбираем, как это устроено, что входит в протокол и где он пока не помогает.

До MCP каждая связка «ассистент — внешний сервис» писалась отдельно. Пять клиентов и десять сервисов — это пятьдесят интеграций, каждая со своим форматом описания инструментов, своей авторизацией и своим сопровождением. Автор клиента писал коннектор к календарю, автор соседнего клиента писал свой такой же, и оба переписывали его после каждого изменения API.

Это классический комбинаторный взрыв: связок растёт как произведение, а не как сумма. MCP — Model Context Protocol — существует ровно для того, чтобы превратить произведение в сумму. Сведения о самом протоколе приведены по состоянию на 25.08.2026; спецификация развивается, версии транспорта меняются — проверьте актуальность на момент чтения.

#Короткий ответ

MCP — это соглашение о том, как программа-клиент (ассистент, редактор, агент) разговаривает с программой-сервером, предоставляющей инструменты и данные. Обмен идёт сообщениями JSON-RPC 2.0. Клиент спрашивает у сервера «что ты умеешь», получает список, показывает его модели и потом просит выполнить конкретный вызов.

Один сервер подключается к любому клиенту, понимающему MCP. Один клиент работает с любым сервером. Ни те, ни другие не знают друг о друге ничего заранее.

#Схема до и после

БЕЗ ПРОТОКОЛА — N×M связок

  клиент A ──┬── календарь
             ├── почта
             └── файлы

  клиент B ──┬── календарь   (второй раз, заново)
             ├── почта       (второй раз, заново)
             └── файлы       (второй раз, заново)

  3 сервиса × 2 клиента = 6 интеграций


С ПРОТОКОЛОМ — N+M реализаций

  клиент A ──┐                ┌── сервер календаря
             ├──── MCP ───────┼── сервер почты
  клиент B ──┘                └── сервер файлов

  2 клиента + 3 сервера = 5 реализаций,
  и каждая новая пара стоит ноль

Выигрыш становится заметен не на трёх сервисах, а на тридцати. Именно поэтому протокол выстрелил в средах, где инструментов много: редакторы кода, агентные оболочки, рабочие ассистенты.

#Что входит в протокол

Протокол описывает не только инструменты. Основных примитивов три, и путать их не стоит: у них разные владельцы решения о применении.

Примитив Что это Кто решает применить
Tools Действия, которые можно выполнить Модель, в ходе рассуждения
Resources Данные, которые можно прочитать по адресу Клиент или пользователь
Prompts Заготовки запросов с параметрами Пользователь, обычно из меню

Разница между tools и resources — самая полезная в этой таблице. Инструмент вызывается моделью, поэтому вокруг него нужна политика прав. Ресурс подставляется клиентом, поэтому за него отвечает пользователь. Смешивание этих двух ролей — источник и путаницы в интерфейсах, и лишних рисков.

Плюс к примитивам протокол задаёт рукопожатие: клиент отправляет initialize с номером версии, сервер отвечает своими возможностями, клиент подтверждает, после чего можно спрашивать tools/list и вызывать tools/call.

#Транспорт: где живёт сервер

Сервер MCP — это отдельный процесс, а не библиотека внутри клиента. Общаться с ним можно двумя основными способами.

Стандартные потоки (stdio). Клиент запускает сервер как дочерний процесс и обменивается с ним строками JSON через stdin/stdout. Сервер работает на той же машине, живёт ровно столько, сколько нужно клиенту, и получает права того пользователя, который запустил клиент.

Сеть. Сервер работает как HTTP-служба, клиент к ней подключается. Даёт удалённые серверы и общие для нескольких пользователей инструменты, но добавляет весь набор сетевых вопросов: авторизация, TLS, кто вообще может подключиться.

В Persona реализован только первый вариант, и это сознательное ограничение. Рантайм в app/mcp/runtime.py запускает сервер как подпроцесс, ведёт с ним JSON-RPC по stdio, а сетевые адреса в конфигурации пропускает с записью в лог. Причина — вторая половина следующего раздела.

#Что из этого следует на практике

Сервер MCP — это произвольный код на вашей машине. Строчка вида npx какой-нибудь-сервер означает: скачать пакет из интернета и запустить его с вашими правами. Протокол сам по себе не даёт никакой изоляции — он описывает только формат сообщений.

Отсюда две меры, которые в реализации Persona стоят до всякого рассуждения о полезности:

  • Белый список пусковых команд. Первое слово команды запуска обязано быть одним из известных запускателей — npx, node, uvx, uv, python, deno, bun и ещё несколько. Модель может попросить «установить MCP-сервер», и это запишет строку в конфигурацию, но никакая конфигурация не заставит систему запустить произвольный бинарник.
  • Общий рубильник. Весь рантайм выключен, пока владелец не включит его отдельным переключателем; при выключенном рубильнике список внешних инструментов пуст.

Имена инструментов надо разводить по пространствам имён. Два сервера легко объявят инструмент search. В Persona обнаруженные инструменты получают имена вида mcp__сервер__инструмент, иначе второй сервер молча перекроет первый.

Нужен таймаут на вызов. Сервер может подвиснуть на сетевом запросе, и без предела ожидания вместе с ним подвиснет весь ход ассистента. В реализации стоит общий предел на ответ и отдельная настройка на каждый сервер.

Один плохой сервер не должен ронять остальные. Ошибка при запуске одного сервера пишется в лог, и рантайм переходит к следующему. Это скучное требование, но без него один сломанный пакет выключает все инструменты сразу.

Какие серверы имеет смысл подключать первыми и почему порядок важнее популярности — в обзоре полезных MCP-серверов. Как написать собственный, если готового нет, — в руководстве по своему MCP-серверу.

#Где интуиция подводит

«MCP делает инструменты безопасными». Протокол не занимается безопасностью вызова. Он говорит, как передать имя и аргументы. Решение, можно ли выполнить конкретный вызов от конкретного собеседника, принимает клиент — и это ровно та же точка ответственности, что и в обычном function calling.

«Подключил сервер — модель стала умнее». Модель получила ещё несколько описаний в системный промпт. Если описания расплывчатые, а инструментов много, качество выбора падает, а не растёт. Десять хорошо описанных инструментов работают лучше сорока посредственных.

«MCP заменяет навыки». Разные вещи. Инструмент — внешнее действие, навык — записанная процедура, память — факт. Их постоянно смешивают; разделение с примерами — в материале про навыки агента.

«Раз есть протокол, интеграция ничего не стоит». Стоит: описания инструментов приходится подгонять под вашу модель, а результаты — обрезать под ваш бюджет контекста. Протокол снял стоимость транспорта, а не стоимость смысла.

#Когда MCP не нужен

Если у вас один клиент и три инструмента, которые вы написали сами, — протокол добавит подпроцессы, рукопожатия и таймауты и не даст ничего взамен. Прямой вызов функции в вашем же процессе проще, быстрее и отлаживается тривиально.

MCP окупается, когда выполняется хотя бы одно из двух: инструментов много и они меняются независимо от вашего кода, либо вы хотите пользоваться чужими инструментами, которые кто-то уже написал. Общая рамка того, зачем инструменты вообще нужны агенту, — в базовой статье о том, что такое ИИ-агент.

#Частые вопросы

#Что такое MCP-сервер простыми словами?

Отдельная программа, которая по запросу сообщает список своих инструментов и умеет их выполнять. Ассистент запускает её или подключается к ней, спрашивает список, показывает его модели и потом просит выполнить конкретный вызов с конкретными аргументами.

#MCP работает только с одной моделью или с любой?

С любой: протокол описывает связь между клиентом и сервером инструментов и ничего не знает о модели. Ассистент сам решает, как показать список инструментов своей модели — нативным полем запроса или текстом в системном промпте.

#Безопасно ли подключать чужие MCP-серверы?

Ровно настолько, насколько безопасно запустить чужую программу на своей машине: сервер получает права запустившего пользователя. Минимальные меры — белый список пусковых команд, общий выключатель для всего рантайма и понимание, какой класс доступа даёт каждый сервер: чтение, запись или выполнение.

#Чем MCP отличается от обычного плагина?

Плагин пишется под конкретный продукт и живёт внутри него. MCP-сервер — отдельный процесс с общим форматом обмена, поэтому один и тот же сервер работает с любым клиентом, понимающим протокол, и обновляется независимо от него.

#Нужен ли MCP, если инструменты у меня свои?

Как правило, нет. Пока и клиент, и инструменты — ваш код, прямой вызов функции проще и быстрее. Протокол начинает окупаться, когда инструменты становятся отдельными от клиента по времени жизни или по авторству.

#Сколько серверов можно подключить сразу?

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

#Вывод

MCP решает одну задачу и решает её хорошо: убирает N×M интеграций. Он не решает задачу безопасности вызова, не улучшает модель и не отменяет необходимость нормально описывать инструменты.

Если вы подключаете чужие серверы — начинайте с читающих, держите общий выключатель под рукой и ограничьте список допустимых пусковых команд. Если инструменты у вас свои и клиент один — протокол вам, скорее всего, не нужен.

Хотите ИИ, который помнит вас?

Persona держит контекст между чатами и работает на вашем железе — если развернуть её у себя и подключить локальную модель.

Создать аккаунт