Дата публикации
ai_products

Mcp2cli: как сократить расход токенов на инструменты до 99%

Что появилось / что изменилось

Mcp2cli — это утилита, которая превращает любой MCP‑сервер или OpenAPI‑спеку в CLI‑команду прямо на лету, без генерации кода.

Ключевые изменения по сравнению с «чистым» MCP:

  • Поддержка трёх режимов работы:
    • MCP по HTTP/SSE (--mcp https://.../sse)
    • MCP через stdio (--mcp-stdio "npx @modelcontextprotocol/server-filesystem /tmp")
    • Любая OpenAPI‑спека как источник CLI (--spec URL|FILE).
  • Снижение расхода токенов на схемы инструментов на 96–99% по сравнению с нативным MCP.
  • Встроенный формат вывода TOON, который экономит ещё 40–60% токенов по сравнению с JSON на больших однотипных массивах.
  • Кэширование спек и списков MCP‑инструментов в ~/.cache/mcp2cli/ с TTL по умолчанию 1 час и ручным управлением --refresh, --cache-ttl, --cache-key.
  • Навык для AI‑агентов (Claude Code, Cursor, Codex): через
    npx skills add knowsuchagency/mcp2cli --skill mcp2cli
    
    агент учится сам находить MCP‑серверы и OpenAPI‑эндпоинты и вызывать их как CLI.

Дополнительно появились удобные опции:

  • Авторизация через --auth-header "K:V" (можно указывать несколько раз).
  • Принудительный --base-url для спек, где это не прописано.
  • Управление окружением для MCP stdio через --env KEY=VALUE.
  • Переключатели вывода: --pretty, --raw, --toon.

Как это работает

Идея простая: вместо того чтобы каждый раз заливать в контекст LLM полные схемы MCP или OpenAPI, Mcp2cli выносит всё общение с API в отдельный CLI.

Под капотом происходит следующее:

  1. Динамическая генерация подкоманд.

    • При запуске с --spec, --mcp или --mcp-stdio утилита загружает OpenAPI или список MCP‑инструментов.
    • На основе этой схемы она строит CLI‑подкоманды и их флаги. Например, list-pets, create-item, search.
    • Никакой генерации Python‑кода на диск нет, всё работает в рантайме.
  2. Кэширование схем.

    • Спеки и списки MCP‑инструментов сохраняются в ~/.cache/mcp2cli/.
    • По умолчанию TTL — 3600 секунд. Можно менять через --cache-ttl или форсировать обновление через --refresh.
    • Локальные файлы (./spec.json, ./api.yaml) не кэшируются.
  3. Транспорт MCP.

    • В HTTP/SSE‑режиме утилита подключается к MCP‑серверу по URL (--mcp https://.../sse) и вызывает инструменты напрямую.
    • В stdio‑режиме она запускает произвольную команду (--mcp-stdio "node server.js") и общается с MCP‑сервером через стандартный ввод/вывод. Переменные окружения передаются через --env.
  4. Работа с OpenAPI.

    • При --spec URL|FILE Mcp2cli парсит JSON/YAML, строит из эндпоинтов команды и аргументы.
    • Тело запроса можно передать через stdin (--stdin), например:
      echo '{"name": "Fido"}' | mcp2cli --spec ./spec.json create-pet --stdin
      
  5. Оптимизация вывода для LLM.

    • --pretty форматирует JSON для человека.
    • --raw отдаёт тело ответа без парсинга.
    • --toon кодирует большой однотипный массив в формат, который даёт 40–60% экономии токенов относительно JSON при потреблении LLM.

За счёт того, что в контексте LLM оказывается только «инструкция, как дергать CLI», а не весь OpenAPI/MCP, расход токенов на описания инструментов падает на 96–99%.

Что это значит для вас

Если вы строите агента на базе Claude 4, Claude Code, Cursor или Codex и подключаете к нему десятки API, у вас есть конкретная проблема: каждый MCP‑сервер и каждая OpenAPI‑спека раздувают системный промпт.

Пример из реальных измерений: 6 MCP‑серверов с 84 инструментами съедают около 15 540 токенов уже на старте сессии. Даже если модель в итоге вызовет один инструмент, вы платите за все схемы целиком на каждом сообщении.

Mcp2cli предлагает другой подход:

  • Подключаете API и MCP‑серверы как внешние CLI‑команды.
  • Учитe агента пользоваться mcp2cli как одним универсальным инструментом.
  • Инструменты и эндпоинты подгружаются по требованию, когда агенту реально нужно вызвать конкретный метод.

Где это полезно:

  • Много внутренних сервисов, микросервисная архитектура, десятки OpenAPI‑спек.
  • Большие MCP‑инсталляции с десятками инструментов, где токены «съедает» только схема.
  • Сценарии, где важна максимальная длина контекста (долгие сессии, сложные цепочки запросов).

Где стоит подумать дважды:

  • Небольшие проекты с 1–2 простыми инструментами. Там экономия токенов не так заметна, а дополнительный слой CLI может усложнить отладку.
  • Сценарии, где требуются строгие ограничения окружения (например, запреты на запуск внешних бинарников). В таких случаях нужно отдельно оценивать, можно ли безопасно вызывать mcp2cli.

Про доступность: исходный инструмент распространяется через pip и npx. Для России может понадобиться VPN, если блокируются исходные репозитории или регистрация в соответствующих сервисах.

Место на рынке

Похожую задачу — не заливать все инструменты в контекст сразу — решает Tool Search в API Anthropic. Там разработчик помечает инструменты флагом defer_loading: true, а Claude ищет нужный инструмент через индекс примерно на 500 токенов, вместо загрузки всех схем. Это даёт около 85% экономии токенов.

Mcp2cli идёт другим путём:

  • Он вообще выносит инструменты из контекста LLM в отдельный CLI.
  • Экономия токенов на описаниях инструментов достигает 96–99% по сравнению с нативным MCP.
  • Дополнительно формат TOON даёт 40–60% экономии по сравнению с JSON именно на этапе чтения больших ответов моделью.

Разница по сути в архитектуре:

  • Tool Search остаётся внутри API Anthropic и работает только с Claude.
  • Mcp2cli живёт как обычный CLI и навык, с которым могут работать Claude Code, Cursor, Codex и любые другие агенты, способные вызывать командную строку.

Чётких цифр по сравнению с конкретными реализациями других CLI‑обвязок для MCP или OpenAPI в исходном описании нет, но уже опубликованные измерения по MCP против CLI‑подхода показывают ту же картину: перевод MCP‑серверов в формат CLI даёт экономию токенов в районе 92–98%, а Mcp2cli пытается выжать из этой идеи максимум за счёт динамических команд и формата TOON.


Читайте также