MCP-протокол перегружает контекст модели: toolhub заменяет JSON-схемы деревом навигации
MCP протокол (Model Context Protocol, протокол контекста модели) обещает стандартизировать подключение инструментов к языковым моделям, но на практике разработчики тонут в JSON-схемах, Docker-контейнерах и тысячах сожжённых токенов ещё до первого полезного запроса.

Проблема не теоретическая: когда у агента больше 30 инструментов, модель теряется в контексте и начинает галлюцинировать (уверенно выдумывать несуществующие схемы вызовов), а разработчик платит за входящие токены документации, которую агент даже не планировал использовать.
Инженер под ником автора оригинала, устав от «натягивания совы на глобус», собрал открытый инструмент toolhub, self-hosted движок, который превращает любой консольный скрипт в навык для языковой модели без написания MCP-обёрток. Ниже разберём, как это устроено, зачем нужно и как попробовать.
Зачем вообще нужен MCP протокол и в чём его боль?
MCP протокол придуман компанией Anthropic как единый способ подключать внешние инструменты к языковым моделям. Идея красивая: модель получает список доступных функций, понимает их схемы и вызывает нужную по ситуации. Это называется Function Calling (вызов функций).
На практике для подключения одного инструмента разработчику сегодня приходится:
- Описать килобайты JSON-схем прямо в системном промпте (системный промпт, это стартовая инструкция, которую модель получает до любого вопроса пользователя), сжигая от 15 до 30 тысяч токенов контекста ещё до начала работы
- Написать полноценный сетевой MCP-сервер со своим шаблонным кодом, SDK и зависимостями
- Завернуть всё в Docker-контейнер, выделив 200 мегабайт оперативной памяти ради скрипта на три строки
Десять bash-команд вместо одного инструмента: реальная боль
Вот как выглядит типичная сессия, когда нужно проверить статус сервиса и перезагрузить его. Вместо одного вызова вроде call_tool("check_and_restart", {...}) агент вынужден последовательно выполнять:
bash("systemctl is-active my-app.service")
bash("journalctl -u my-app.service -n 50 --no-pager")
bash("ss -tunlp | grep 3000")
bash("kill -9 $(lsof -t -i:3000)")
bash("systemctl restart my-app.service")
И это повторяется по нескольку раз за сессию. Принцип DRY (Don't Repeat Yourself, «не повторяй себя», базовое правило хорошего кода) нарушается грубо. Инженер хочет абстрагировать всё это в один вызов, но как только таких абстракций становится больше 30, модель ловит эффект Lost in the Middle (потеря информации в середине длинного контекста) и начинает галлюцинировать.
Что предлагает toolhub вместо плоского списка?
Автор инструмента применил древовидную навигацию вместо плоского массива из сотен инструментов. Структура выглядит как файловая система:
/
├── system/
│ ├── fetch_logs
│ └── restart_service
├── database/
│ └── query_pg
└── sublime/
└── replace-literal
Модель на старте получает только корневую карту дерева с короткими аннотациями по категориям, одну-две строки на папку. Дальше работают два ключевых вызова:
listTools("/system")— заглянуть в конкретную ветку и подтянуть описания только нужных инструментовcallTool("/system/fetch_logs", { "service": "nginx" })— вызвать конкретный инструмент с параметрами
Окно контекста остаётся чистым. Модель лезет в папку только тогда, когда по названию категории понимает, что содержимое относится к текущей задаче.
Как toolhub выполняет скрипты без Docker?
Механика исполнения описана автором как «простая как топор»:
- На лету создаётся временная папка
/tmp/hub_run_<timestamp>_<hash> - В папку кладётся код скрипта и файл
input.json, параметры вызова автоматически пробрасываются в переменные окружения вида$INPUT_<KEY_NAME> - Если прописана команда установки зависимостей, она отрабатывает в контексте папки, Bun (быстрая среда выполнения JavaScript) подтягивает модули за миллисекунды из глобального кэша
- Запускается команда с жёстким ограничением по времени, результат считывается из
output.jsonили стандартного вывода - Временная папка немедленно удаляется
Единственная глобальная зависимость — Bun. Скрипт можно писать на Bash, Python, Go, PHP и других языках.
Почему toolhub не использует стандартный Function Calling?
Toolhub сознательно не привязывается к интерфейсам вызова функций конкретных провайдеров. Весь цикл ReAct (когда модель рассуждает, действует и наблюдает результат) построен на XML-подобных командах:
<hub>listTools("/")</hub>
<hub>callTool("/sublime/list-project-files", {})</hub>
Такой подход позволяет работать с любыми моделями, даже если у них нет встроенной поддержки вызова инструментов или она реализована нестабильно. Порог входа для модели: понимание XML, JSON, JavaScript и древовидной навигации.
При этом toolhub поддерживает и сам MCP протокол, по данным автора, реализована нативная поддержка в Stateless-режиме через стандартный ввод-вывод (Stdio).
Допустим, вы администрируете сервер и хотите, чтобы ИИ-агент мог проверять логи, перезагружать сервисы и мониторить порты. Вместо написания MCP-сервера вы создаёте папку system/ с тремя скриптами: fetch_logs (читает логи), restart_service (перезагружает сервис), check_ports (проверяет порты). Кладёте в каждый файл tool.json с описанием параметров. Агент при старте видит только «system — управление сервером», а при необходимости подтягивает конкретный инструмент и вызывает его одной командой вместо пяти повторяющихся bash-вызовов.
- Путать MCP протокол с готовым решением. MCP это спецификация, а не программа. Сам по себе протокол не запускается, нужна реализация, будь то MCP-сервер или альтернатива вроде toolhub.
- Складывать все инструменты в плоский список. Когда их больше 30, модель теряет точность выбора. Иерархическая структура по категориям критична для стабильной работы.
- Игнорировать расход токенов. Каждая JSON-схема инструмента в системном промпте сжигает контекст. При 100 инструментах модель может потратить десятки тысяч токенов только на их описание, не начав отвечать на вопрос.
- Думать, что Docker обязателен. Для простых скриптов контейнер создаёт избыточную нагрузку, особенно на скромных VPS или одноплатных компьютерах.
Что делать с этим прямо сейчас, по ролям?
Разработчику и DevOps-инженеру. Если вы уже работаете с ИИ-агентами и устали дублировать bash-вызовы, toolhub решает конкретную проблему: один скрипт автоматически становится навыком агента. Проект открытый, развёртывается на собственном сервере.
Автору Дзена и контент-маркетологу. MCP протокол стоит знать как термин: всё больше инструментов для работы с текстом будут подключаться к языковым моделям именно через него или его альтернативы. Понимание принципа «модель вызывает внешний инструмент» поможет ориентироваться в новых функциях редакторов и автоматизаций.
Предпринимателю в РФ. Toolhub разворачивается на собственном сервере, данные не уходят во внешние облака. Для тех, кто строит внутреннюю автоматизацию на базе языковых моделей (через API YandexGPT, GigaChat или открытые модели), это способ дать агенту доступ к внутренним скриптам компании без тяжёлой инфраструктуры.
Автор toolhub делает справедливое замечание: маркетинг Anthropic вокруг MCP протокола работает сильнее, чем сам протокол на практике. Термины «agent», «harness», «tooling» вошли в лексикон людей, которые никогда не писали интеграции для языковых моделей. Это не плохо для популяризации, но создаёт разрыв между ожиданиями и реальностью.
По моим наблюдениям, подход с древовидной навигацией по инструментам логичен: мы так организуем файлы на компьютере, и модели справляются с такой структурой лучше, чем с плоским списком на сотню позиций. Честная оговорка: toolhub пока молодой проект одного разработчика, и для критичных production-систем стоит оценивать зрелость кода и поддержку самостоятельно.
Главный вывод прост: MCP протокол как идея стандартизации полезен, но его текущие реализации заставляют разработчиков платить слишком высокую цену за подключение простых скриптов. Если вы работаете с ИИ-агентами и ваши сессии превратились в копипаст одних и тех же bash-команд, попробуйте организовать инструменты в дерево, будь то через toolhub или собственную обёртку.

Основатель dzen.guru. Эксперт по монетизации и продвижению на Дзен. Автор курса «Старт на Дзен 2026».
Читайте также

Gemini в Google Таблицах: параллельные запросы экономят до 80 секунд на пачку
Google Таблица, скрипт на Google Apps Script и модель Gemini позволяют собрать автономный анализатор новостей без выделенного сервера, и ключевой приём здесь в…

9 ошибок при внедрении AI в продукте: чек-лист из провалов российского EdTech
Андрей Коптелов, бизнес-архитектор и менеджер образовательных продуктов, опубликовал на Хабре разбор девяти ошибок, которые допускают менеджеры при внедрении…

OpenAI Agents API вышел в бету: разработчики получили инфраструктуру Codex без доплаты
OpenAI второго июля открыла публичную бету Agents API, управляемого сервиса для запуска ИИ-агентов (программ, которые сами выполняют задачи, вызывают…
Комментарии