С развитием искусственного интеллекта и появлением больших языковых моделей (LLM) активно обсуждаются различные подходы к автоматизации задач, включая Model Context Protocol (MCP). Этот протокол предоставляет метод взаимодействия между моделями и внешними инструментами, стремясь повысить гибкость и масштабируемость решений. Однако известный разработчик и блогер Армин Роначер выражает существенные сомнения в эффективности MCP в современном виде, подчеркивая, что код остается более мощным и удобным инструментом для решения многих практических задач. Его опыт и размышления важны для понимания того, как лучше использовать ИИ для автоматизации и почему не стоит принимать все новшества без критики. Армин Роначер отмечает две ключевые проблемы MCP: недостаточную композиционность и избыточные требования к контексту.
Композиционность — способность составлять сложные решения из простых составляющих — в MCP достигается не напрямую, а за счет вывода модели. Это усложняет контроль и повышает вероятность ошибок. Кроме того, каждый вызов к инструменту по MCP требует большого объема информации, что замедляет процесс и увеличивает накладные расходы. В результате простое написание и запуск кода зачастую оказывается более эффективным способом достижения результата по сравнению с использованием протокола. Эффективность и скорость работы являются одними из самых важных критериев при автоматизации.
Роначер приводит простой эксперимент: выполнение задачи на GitHub через MCP и через командную строку с помощью инструмента gh CLI. Второй способ не только быстрее, но и требует меньше контекста, что подтверждает список проблем протокола. Для разработчиков и инженеров, привыкших к программированию, идея, что можно заменить код неким универсальным инструментом, выглядит заманчиво, но на практике оказывается сложной и скомканной. Многие считают, что MCP — будущее автоматизации, особенно для конечных пользователей, не обладающих навыками программирования. Роначер соглашается, что для специфичных отраслевых задач, например в финансах, такой подход может иметь потенциал.
Тем не менее он уверен, что текущее воплощение MCP останется сложным в использовании и уступит по удобству кодогенерации. Код, как универсальный инструмент, предоставляет более явный контроль, возможность отладки и композитирования, чего MCP с его сильной зависимостью от вывода моделей пока обеспечить не может. Важная мысль, которую выделяет автор — код как способ «заменить себя» в автоматизации задач. Раньше специалисты создавали shell-скрипты для повтора рутинных операций, снижая нагрузку на человека. Сегодня LLM предлагают новый уровень автоматизации, заменяя человека на интеллектуальный генератор кода.
Однако ключевыми проблемами остаются высокая стоимость вычислений, скорость выполнения и стабильность результата. Пока эти вопросы не будут решены, полноценное использование инструментов на базе MCP останется ограниченным. Автоматизация работает эффективно только при условии многократного повторения задач. Если менять что-то однократно, то тратить силы на создание сложного инструмента малоцелесообразно. Но для циклических задач и операций, повторяющихся сотни или тысячи раз, код является очевидным решением.
Особенно это касается вычислений и преобразований данных, где результат важнее процесса вывода модели. Например, лучше получить сгенерированный скрипт на Python, который вычисляет формулы, чем надеяться на правильный ответ модели — так легче проверить и отладить логику. Пример из практики самого Роначера — преобразование блога из формата reStructuredText в Markdown. Вместо прямого преобразования с помощью LLM, он попросил модель написать код, который сначала строит и преобразует Abstract Syntax Tree (AST), а потом рендерит результат в HTML. Такой подход позволил не только гарантировать точность, но и создавать дополнительные скрипты для сопоставления и анализа разницы между старыми и новыми данными.
В конечном итоге автоматизация происходила в цикле с контролем качества и использованием ИИ в роли судьи кода. Этот пример иллюстрирует главное преимущество кодогенерации: возможность построения воспроизводимых, верифицируемых и легко проверяемых процессов. Контекст и вычислительные ресурсы затрачиваются на разработку и тестирование одного скрипта, после чего его можно запускать сотни раз без дополнительной нагрузки на модель. MCP при таком масштабировании подводит из-за необходимости постоянного вывода и интерпретации. Авторы отмечают, что некоторые задачи, например автоматизация браузерных действий с помощью Playwright, сложно полностью перевести в код без интуиции и динамического реагирования.
В таких случаях MCP или подобные протоколы выглядят более естественно, поскольку требуют понимания текущего состояния страницы и принятия решений на лету. Но если заранее известно поведение и интерфейс, проще поручить написание кода, который будет надежно и быстро выполнять повторяющиеся шаги без необходимости постоянного взаимодействия с моделью. Роначер с иронией отмечает, что человек зачастую оказывается более работоспособным клиентом MCP, чем сам MCP-клиент, поскольку написание и отладка протокола очень трудозатратны и нестабильны. Многие полезные фрагменты кода, сгенерированные LLM, Роначер интегрирует в свою повседневную разработку, минуя MCP. Что же будет дальше? Роначер признаёт, что MCP — полезная концепция, но текущая реализация не годится для масштабных проектов и серьезной автоматизации.
Возможно, потребуется разработать новые абстракции, улучшенные песочницы для исполнения кода и гибкие API, которые позволят объединять преимущества программирования и возможности ИИ. Одним из перспективных направлений может стать создание такой кодогенерации, которая сопровождается понятными описаниями на человеческом языке. Это позволит не техническим специалистам понимать и проверять действия автоматизированных процессов, повышая доверие и расширяя аудиторию использования. В итоге, если целью является действительно масштабируемая, надежная и эффективная автоматизация, оптимальным решением на данный момент выступает код. Использование моделей для генерации и оценки кода — шаг вперед по сравнению с попытками полностью заменить программирование протоколами на основе вывода.