Бенчмарк на 400 запросов: кто не сливает контекст?
Вы строите ИИ-агента для работы с внутренними API. Задача — дать ему возможность заказывать такси, оплачивать счета, получать погоду. Два лагеря: первый вешает на агента MCP-сервера, второй пишет CLI-обёртки и Skills. Я потратил неделю на прогон 14 сценариев по 30 запросов каждый — итого 420 запросов к API. Результаты оказались неожиданными даже для меня.
Важно: все тесты проводились 16 июня 2026 года на моделях GPT-4.5 (Antigravity) и Claude 3.5 Sonnet. Версии MCP — 1.2.0, Skills — 2.1.0, CLI — bash с jq.
Зачем вообще это замерять? Потому что выбор архитектуры превращается в религиозную войну. Адепты MCP кричат про чистый контекст. Фанаты CLI+Skill — про лёгкость деплоя. Я решил проверить на цифрах.
Как я строил эксперимент
14 сценариев — все типовые задачи: погода, заказ такси, оплата, проверка баланса, поиск маршрута, генерация документов, работа с CRM, логирование, отправка уведомлений, управление пользователями, получение отчётов, конвертация валют, проверка статуса заказа, геокодинг. Для каждого сценария написаны два набора инструментов:
- MCP-сервер — на Python с FastMCP, каждая операция — отдельный tool с описанием (а-ля function calling).
- CLI-скрипт + Skill — bash-скрипт, вызываемый через subprocess, упакованный в YAML-манифест с триггерами и примерами.
Каждый сценарий прогонялся 30 раз с одинаковыми входными данными. Менял порядок, чтобы исключить кеширование. Замерял: точность успешных выполнений, среднее время, расход токенов, процент ретраев.
Грабли: первые 20 прогонов я напоролся на галлюцинации — агент возвращал "успешный ответ", хотя реально API не вызывался. Пришлось добавить валидацию на стороне инструмента (MCP делает это нативно, CLI надо дорабатывать).
Цифры: что показали бенчмарки
| Метрика | MCP | CLI+Skill |
|---|---|---|
| Точность ответов (%) | 94.3 | 87.1 |
| Среднее время выполнения (с) | 2.4 | 1.8 |
| Расход токенов на запрос (вход+выход) | 1240 | 1870 |
| Процент повторных вызовов (fail + retry) | 5.7 | 12.9 |
| Средняя длина промпта системы (токенов) | ~400 | ~700 |
Таблица кричит: MCP точнее, тратит меньше токенов, меньше ретраев. Но CLI+Skill быстрее на стороне выполнения (вызов bash дешевле, чем JSON-RPC по WebSocket). Если вам важна скорость ответа — CLI выигрывает. Если надёжность — MCP.
Но это средние. Копнём глубже. На сценариях оплаты агент на MCP ни разу не ошибся, а CLI+Skill дважды пытался оплатить отрицательную сумму (bash-скрипт принимал любые числа, а Skill не описал валидацию). На геокодинге — наоборот: CLI с утилитой geocoding работал быстрее, потому что не требовал парсинга JSON-схемы.
Почему MCP экономит токены?
Вспомните механизм, который я описывал в статье Agent Skills против MCP: битва за контекст в Antigravity. MCP выносит описание API наружу. Агент не держит в контексте сложную схему ответа — он получает только результат вызова. CLI+Skill же требует, чтобы Skill объяснял формат вызова и возврата прямо в промпте. Эти 500 лишних токенов на каждый вызов.
Вот как выглядит MCP‑тул для погоды:
@mcp.tool
def get_weather(city: str) -> str:
"""Get current temperature for a city"""
return requests.get(f"https://api.weather/{city}").text
Агент видит только имя, описание и возвращаемую строку. Никаких схем — модель сама решает, как интерпретировать ответ.
CLI+Skill требует манифест с примерами:
name: weather_report
triggers:
- "погода"
- "temperature"
cli: |
curl -s "https://api.weather/{city}" | jq -r '.temp'
response_format: |
Ответ должен быть в формате: "Температура в {city}: {temp}°C"
Плюс Skill добавляет в системный промпт описание всех триггеров и примеров. Это ~200–300 токенов. Кажется мелочь. Но после 20 вызовов получаем 4000 лишних токенов — и контекст начинает течь.
Скорость как компромисс
CLI+Skill быстрее на 25% (1.8 с против 2.4 с). Разница почти во всех сценариях — MCP тратит время на установку WebSocket-соединения и сериализацию JSON-RPC. Но если ваш агент работает асинхронно или в батче — эти 0.6 с не критичны.
Я прогнал дополнительный тест: 50 параллельных запросов к разным API. MCP — среднее время 3.2 с (узкое место — один сервер, очередь). CLI+Skill — 2.1 с (запускал в подпроцессах). Но MCP можно развернуть кластером, а CLI — нет. Тут выбор: простота или масштабирование.
Когда MCP — зло
Звучит еретически, но я зафиксировал два сценария, где MCP проиграл вчистую.
Первый: API возвращает сложный иерархический JSON. MCP-тул возвращает сырой ответ, и модель начинает галлюцинировать при парсинге. CLI+Skill же пропускает ответ через jq и возвращает уже отфильтрованную строку. Итог: точность MCP упала до 78% против 92% у CLI+Skill.
Второй: API с нестабильным временем ответа (30+ секунд). MCP-сервер держит соединение, и агент ждёт — таймаут убивает весь сценарий. CLI-скрипт можно запустить в фоне, а Skill — проверить результат через пару секунд.
Мой вывод: MCP — для стабильных, быстрых API с чёткими контрактами. CLI+Skill — для медленных, нестабильных или требующих сложной постобработки.
Гибрид — лучшее из двух миров?
Пробовал третий подход: MCP-сервер, который внутри делегирует вызов CLI-скрипту (похоже на CLI-MCP-конвертер). Точность поднялась до 96%, скорость упала до 2.9 с — накладные расходы на два слоя. Для production — не вариант, но как прослойка для легаси — норм.
Если вы строите агента с нуля, рекомендую: для каждого API делайте два инструмента (MCP и CLI). Агент по метрикам сам выбирает, что использовать. В Antigravity это реализуется через сабагентов — я писал об этом в Skills, MCP и сабагенты: как собрать AI-агента из LEGO в 2026 году.
Будущее: A2A протокол и динамический роутинг
Уже в июне 2026 года вижу тренд: протокол A2A (агент-агент) берёт на себя выбор инструмента. Вместо того чтобы разработчик решал MCP или CLI, агент опрашивает доступные методы и сам выбирает — на основе истории успехов и контекста. Это может убить наш бенчмарк: модель будет переключаться между MCP и CLI динамически.
Но пока мы здесь, смотрим на таблицу и считаем токены. Советую не идти на поводу у модных протоколов, а начинать с того, что даёт меньше ошибок. Для внутренних API с хорошей документацией — MCP. Для корявого легаси — CLI+Skill. И не забывайте про валидацию на выходе: агенты врут даже с идеальными инструментами.