Почему MCP всегда был плохой идеей?

#MCP#frontend#agentic workflows#vibe coding

Начну сразу с честного наблюдения: MCP (Multiple Control Points) — как концепция управления состоянием или процессами в коде — часто воспринимается как удобный способ гибко манипулировать потоками данных и логикой. Но на практике это почти всегда приводит к дополнительной сложности, багам и потере контроля. Почему? Давайте разбираться.

MCP — что это и где его любят внедрять

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

В vibe coding, где важна реактивность и поток данных, MCP может выглядеть заманчиво: хочешь — меняй состояние напрямую, хочешь — пробрасывай через разные места. Но именно здесь начинается подводный камень.

Почему MCP становится проблемой

  1. Потеря единого источника правды
    Когда несколько точек управления изменяют одно состояние, трудно понять, кто именно и зачем это сделал. При дебаге это превращается в настоящую ломку мозга — «вот тут стейт изменился, но не понятно, откуда пришел этот вызов».

  2. Повышение когнитивной нагрузки
    Senior frontend-разработчики и без того сталкиваются с кучей сложностей в больших кодовых базах. MCP добавляет ещё один уровень абстракции, который надо держать в голове. Особенно когда речь о агентных workflow с AI coding — тут и так много движущихся частей.

  3. Уязвимость к 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 уже в проекте?

Итог без красивых слов

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/