Начну сразу с честного наблюдения: MCP (Multiple Control Points) — как концепция управления состоянием или процессами в коде — часто воспринимается как удобный способ гибко манипулировать потоками данных и логикой. Но на практике это почти всегда приводит к дополнительной сложности, багам и потере контроля. Почему? Давайте разбираться.
MCP — что это и где его любят внедрять
Если кратко, MCP — это когда в системе несколько независимых точек управления одним и тем же ресурсом или состоянием. В frontend-разработке это может быть несколько обработчиков событий, управляющих одним компонентом, или разные агенты, которые модифицируют одно и то же состояние приложения.
В vibe coding, где важна реактивность и поток данных, MCP может выглядеть заманчиво: хочешь — меняй состояние напрямую, хочешь — пробрасывай через разные места. Но именно здесь начинается подводный камень.
Почему MCP становится проблемой
-
Потеря единого источника правды
Когда несколько точек управления изменяют одно состояние, трудно понять, кто именно и зачем это сделал. При дебаге это превращается в настоящую ломку мозга — «вот тут стейт изменился, но не понятно, откуда пришел этот вызов». -
Повышение когнитивной нагрузки
Senior frontend-разработчики и без того сталкиваются с кучей сложностей в больших кодовых базах. MCP добавляет ещё один уровень абстракции, который надо держать в голове. Особенно когда речь о агентных workflow с AI coding — тут и так много движущихся частей. -
Уязвимость к race conditions и багам
Несколько контролей могут конфликтовать друг с другом. В асинхронных сценариях (например, с RAG — retrieval-augmented generation или AI-ассистентами, которые обновляют состояние в фоне) это выстреливает в ногу.
MCP vs Agentic Workflows — где тут связь
Agentic development — это про создание автономных агентов, которые решают задачи и принимают решения самостоятельно. Вроде бы MCP можно использовать, чтобы эти агенты работали параллельно и обновляли общий ресурс.
На практике же, если у каждого агента свой контрольный поток, они начинают путаться в том, что уже сделано, а что нет. Без централизованного управления или хотя бы четкой иерархии MCP быстро превращается в хаос.
Пример из жизни: у меня был проект с несколькими AI-ассистентами, которые одновременно обновляли UI. Введение MCP вроде бы помогло параллелить работу, но через неделю стало очевидно, что багов стало больше, а поддержка — сложнее. В итоге пришлось рефакторить в сторону одного источника правды и event-driven архитектуры.
MCP и vibe coding — можно ли их совместить?
Vibe coding ценит легкость и поток, где код «живёт» и меняется вместе с разработчиком. В этом стиле MCP кажется чужеродным элементом с избыточными точками контроля.
Если хочется vibe, лучше использовать паттерны с минимальной точкой контроля — например, hooks и state machines, которые обеспечивают предсказуемость. MCP же приводит к разбросу логики и сложностям с синхронизацией.
Пример: как MCP усложняет простой стейт
// Представим, что у нас два обработчика меняют один стейт одновременно
function Component() {
const [count, setCount] = React.useState(0);
// Контроль 1
function increment() {
setCount(prev => prev + 1);
}
// Контроль 2
function resetIfEven() {
setCount(prev => (prev % 2 === 0 ? 0 : prev));
}
// В реальности оба могут сработать в разное время,
// и итоговое значение count становится непредсказуемым
return (
<div>
<button onClick={increment}>Increment</button>
<button onClick={resetIfEven}>Reset if even</button>
<p>Count: {count}</p>
</div>
);
}
Тут два контроля — increment и resetIfEven — пытаются управлять одним состоянием count. Если вызвать их подряд быстро, результат будет неожиданным из-за асинхронности setState.
Подобные кейсы в больших приложениях и с agentic workflows становятся ещё хуже.
Что делать, если MCP уже в проекте?
- Попробуйте выявить все точки, которые управляют одним ресурсом.
- Переосмыслите архитектуру: можно ли свести управление к одному контролю или использовать event bus?
- Внедрите логику сериализации изменений — чтобы управлять порядком обновлений.
- Для AI coding интеграций — используйте RAG-подходы, где данные подтягиваются централизованно, а не разбросаны по разным точкам.
Итог без красивых слов
MCP — это часто просто способ скрыть архитектурные проблемы. В vibe coding и agentic development с AI-интеграциями это особенно заметно. Если видите MCP — подумайте дважды, прежде чем идти по этому пути.
Вместо этого лучше усиливать единый источник правды и явно управлять потоками данных. Это не всегда удобно и требует дисциплины, но в долгосрочной перспективе спасает нервы и время.
Если хочется поиграть с AI coding и agentic workflows, начните с простых паттернов — single control points, event-driven модели и хорошо продуманных state machines. MCP оставьте для экспериментов, которые не грозят вам потерять контроль над проектом.
Если кто-то хочет обсудить, как именно мы боролись с MCP на нашем проекте с Claude Code, пишите — поделюсь. MCP — это не просто «плохая идея», а реальная боль, которую стоит минимизировать.
Попробуй сам: Cursor — AI-редактор для разработчиков.
Источник: https://maharship.com/blog/why-mcp-was-always-a-bad-idea/