Вернуться в блог

Выбор между CLI и MCP для рабочих процессов ваших AI-агентов

2026-04-295 min read

Я занимаюсь разработкой рабочих процессов для агентов около года, и разработчики постоянно задают один и тот же вопрос: стоит ли использовать CLI-инструмент или создавать MCP-сервер для этой задачи? На первый взгляд мне это казалось очевидным, но чем больше я объяснял, тем больше понимал, что здесь существует реальная путаница. Позвольте мне прояснить.

Что мы здесь сравниваем?

Когда я говорю CLI в этом контексте, я не имею в виду выполнение команд в вашем терминале. Я говорю о том, как AI-агенты вызывают внешние инструменты. Существует два основных подхода:

Выполнение команд оболочки (Shell command execution) работает путем прямого выполнения команд оболочки. Агент фактически запускает что-то вроде npm run build или python script.py и анализирует вывод.

MCP (Model Context Protocol) — это открытый протокол, разработанный Anthropic, который использует JSON-RPC 2.0 для связи между AI-приложениями и внешними системами. Вместо выполнения команд оболочки агент вызывает структурированные инструменты, предоставляемые MCP-сервером. Сервер обнаруживает доступные инструменты с помощью метода tools/list, а агент выполняет их, используя tools/call с типизированными параметрами.

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

Когда команды оболочки имеют смысл

Позвольте привести конкретный пример. На моем портфолио-сайте есть скрипты, которые генерируют редиректы со старых постов моего блога на WordPress на новые страницы Next.js. Я не создавал для этого MCP-сервер. Почему? Потому что это простая, разовая операция, которая уже существовала в виде Node-скрипта.

Команды оболочки выигрывают, когда:

  • У вас уже есть работающий скрипт или команда
  • Задача проста и не требует сложного управления состоянием
  • Вы занимаетесь прототипированием и хотите двигаться быстро
  • Инструмент хорошо зарекомендовал себя и имеет стабильный CLI-интерфейс

Другой сценарий: я использую ffmpeg для обработки аудио в своих проектах. Хочу ли я создавать MCP-сервер для ffmpeg? Абсолютно нет. Это инструмент с многолетней историей и стабильным CLI-интерфейсом. Агенту просто нужно сформировать правильную строку команды.

Агенту не нужны типобезопасные определения инструментов. Ему нужно только передавать аргументы внешнему процессу.

Когда MCP сияет

Теперь перейдем к тому, когда MCP оправдывает вложения. Я создал MCP-сервер для своего инструмента поиска RFP. Функциональность далеко не проста. Это полнотекстовый поиск по тысячам документов о государственных контрактах с фильтрацией, ранжированием и суммаризацией на основе AI.

Если бы я делал это с помощью команд оболочки, агент конструировал бы сложные строки команд с десятками аргументов. Это было бы чревато ошибками и трудно в поддержке. Вместо этого MCP-сервер предоставляет четкие инструменты с надлежащими схемами ввода: search_rfps(query, filters) и get_rfp_details(id). Агент вызывает их с типизированными аргументами, а MCP-сервер обрабатывает сложность.

MCP выигрывает, когда:

  • У вас есть сложные, многоэтапные рабочие процессы, требующие надлежащей структуры
  • Вам нужны типобезопасные интерфейсы с JSON Schema для ввода
  • Вы создаете что-то с нуля, что будет использоваться многократно
  • Вы хотите, чтобы агент динамически обнаруживал доступные инструменты
  • Вам нужен детальный контроль над тем, что может делать агент
  • Вы хотите поддерживать как локальные (STDIO-транспорт), так и удаленные (HTTP-транспорт) развертывания

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

А как насчет взаимодействия с API?

Это часто возникает. Если агенту нужно вызвать REST API, следует ли ему использовать curl или создавать MCP-сервер?

CLI-подход означает, что агент конструирует строки команд, такие как curl -X GET https://api.example.com/data -H "Authorization: Bearer $TOKEN". Это работает, но агент должен правильно указать каждый заголовок, параметр запроса и данные аутентификации. Ошибка в одном месте приведет к сбою вызова.

MCP-подход предоставляет такие инструменты, как get_data(filters) или search_customers(query). MCP-сервер внутренне обрабатывает HTTP-вызовы, аутентификацию, обработку ошибок и повторные попытки. Агент просто передает структурированные параметры.

Для быстрого разового вызова CLI подходит. Для всего, что вы используете регулярно, MCP — более чистое решение. Сервер может обрабатывать обновление токенов OAuth, ограничение скорости и правильные сообщения об ошибках. Вашему агенту не нужно знать обо всем этом.

Фреймворк принятия решений

Вот как я теперь об этом думаю:

Начните с команд оболочки, если: задача является простой оберткой вокруг существующей команды, это разовая или низкочастотная операция, или вам просто нужно быстро что-то заставить работать.

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

Существует также фактор кривой обучения. Вашей команде нужно понять, как работает MCP — это открытый протокол с SDK для нескольких языков. Если вы единственный, кто создает инструменты для агентов, и вам просто нужно что-то сделать, команды оболочки подойдут. Если вы создаете инструменты для команды или хотите иметь повторно используемую инфраструктуру, MCP окупается.

А как насчет комбинирования обоих?

Вы можете, и вам следует это делать, когда это уместно. У меня есть MCP-сервер для моего блога, который обрабатывает сложные операции, такие как генерация переводов или управление метаданными постов. Но он по-прежнему вызывает команды оболочки внутри для таких вещей, как запуск Node-скриптов или доступ к git. MCP — это уровень оркестрации, а команды оболочки — один из инструментов, которые он может использовать.

Не думайте об этом как о выборе «или/или». Думайте о MCP как о способе предоставить агентам более чистый интерфейс к вашим существующим инструментам, включая команды оболочки. Протокол использует сообщения JSON-RPC 2.0 независимо от транспорта, будь то STDIO для локальных процессов или потоковый HTTP для удаленных серверов.

В следующий раз, когда вы будете создавать что-то для агента, спросите себя: является ли это простой оберткой вокруг существующей команды, или ему нужен собственный структурированный интерфейс с типобезопасными определениями инструментов? Этот ответ подскажет вам, какой путь выбрать.

Будьте в курсе

Получайте последние посты и аналитику на вашу почту.

Unsubscribe anytime. No spam, ever.