До 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 интеграций. Он не решает задачу безопасности вызова, не улучшает модель и не отменяет необходимость нормально описывать инструменты.
Если вы подключаете чужие серверы — начинайте с читающих, держите общий выключатель под рукой и ограничьте список допустимых пусковых команд. Если инструменты у вас свои и клиент один — протокол вам, скорее всего, не нужен.