MCP vs Thin MCP: где AI-агенты теряют скорость

MCP vs Thin MCP: где AI-агенты теряют скорость

В этой статье исследуется влияние Model Context Protocol (MCP) на производительность AI-агентов. Анализируются различные архитектурные подходы — от монолитных решений до распределённых систем с MCP — чтобы понять, где возникают задержки и какие решения действительно эффективны.

Введение и план исследования

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

  • Монолит без MCP — прямые вызовы функций в одном процессе. Базовый уровень задержки.
  • Монолит с MCP (in-process) — MCP в одном процессе, без сети. Оценка накладных расходов самого паттерна.
  • Разделённые MCP (Docker net) — три отдельных сервиса в Docker. Влияние сетевых вызовов.
  • Thin MCP HTTP + JSON — легковесная реализация на FastMCP 2.0 и BlackSheep.
  • Thin MCP HTTP + YAML — влияние формата сериализации.
  • Thin MCP IPC (iceoryx2/ZeroMQ) — сравнение сети и разделяемой памяти.
  • MCP runtime на C++ — влияние языка и производительности runtime.

Инструменты и стек

  • Docker — контейнеризация и изоляция.
  • fastmcp 2.0 — легковесный фреймворк для MCP-серверов.
  • BlackSheep — асинхронный веб-сервер для высокой производительности.
  • iceoryx2 — IPC с нулевым копированием для низкой задержки.
  • C++ MCP runtime — собственная реализация для оценки производительности.
  • Milvus — векторная база для семантического поиска.
  • Langraph — библиотека для построения агентских workflow.
  • Langchain — инструменты и клиенты для LLM.
  • LLamaCpp — локальный запуск моделей (Qwen3-Reranker).
  • Ollama — управление LLM через HTTP (Qwen3-embeddings-8b).

S0: Монолит без MCP

Все инструменты реализованы как обычные функции Python, вызываемые напрямую. Это нижняя граница задержки — базовый сценарий для сравнения.

Тесты проводились на 13 вопросах, требующих вызова инструментов. Основная задержка — от reranker и генерации эмбеддингов. Сам векторный поиск выполняется быстро.

p95 — 95-й процентиль. Используется для оценки задержки: ниже этого значения находятся 95 % измерений.

S2: Разделённые MCP (Docker net)

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

Результаты показали:

  • Вызов faq_knowledge_tool.exec — 493 мс.
  • Вызов chunks_knowledge_tool.exec — 588 мс.

Из них:

  • На выполнение инструментов — 408 мс и 494 мс.
  • Накладные расходы (сеть, сериализация, MCP) — 85 и 94 мс.

Средний overhead — около 169 мс на вызов. Основная задержка — не в инструментах, а в сетевом взаимодействии и сериализации.

Хотя это заметно по сравнению с монолитом, в общем времени выполнения (с reranker и эмбеддингами) доля MCP мала. Зато архитектура получает изоляцию, масштабируемость и гибкость.

S1: MCP (in-process)

MCP-серверы запущены в том же процессе, что и LLM-приложение. Нет сети — только внутренние вызовы через FastMCP.

Цель — измерить накладные расходы самого MCP-паттерна: диспетчеризацию, обработку схем, сериализацию.

Результат:

  • Средний overhead — 10–11 мс.
  • Максимум — до 35 мс.

Это означает, что из 169 мс в S2:

  • ~10 мс — накладные расходы MCP-паттерна.
  • ~159 мс — стоимость сетевого взаимодействия.

S3a: Thin MCP HTTP + JSON

Гипотеза: можно снизить overhead, если упростить MCP-инфраструктуру.

Идея подхода

Разделение на два слоя:

  1. MCP Proxy — минимальный FastMCP-сервер, транслирующий JSON-RPC в HTTP.
  2. Business Logic Service — отдельный сервис на BlackSheep, обрабатывающий JSON.

Преимущества

  • Языковая независимость — backend может быть на Go, Rust, C++.
  • Гибкое масштабирование — балансировка на уровне HTTP.

Первые замеры показали overhead ~128 мс — лучше S2. Но повторные прогоны дали нестабильные результаты: иногда лучше, иногда хуже. Значит, выигрыш не гарантирован.

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

S3b: Thin MCP HTTP + YAML

Та же архитектура, но MCP-Proxy возвращает YAML вместо JSON. Внутреннее взаимодействие — по-прежнему HTTP + JSON.

Цель — оценить влияние формата сериализации.

Результат:

  • Средний overhead — 274 мс на вызов.

Это хуже, чем в S3a (JSON). Вероятная причина — более медленная сериализация/десериализация YAML.

Инструмент expert_tool вызывался редко (n=1), поэтому основной анализ — по chunks_knowledge_tool и faq_knowledge_tool.

S4: Thin MCP IPC (iceoryx2/ZeroMQ)

Изначально использовался iceoryx2 — IPC с нулевым копированием. Но библиотека не поддерживала асинхронность, что добавило задержку.

Затем был протестирован ZeroMQ — высокопроизводительная библиотека с поддержкой асинхронного обмена сообщениями.

Архитектура:

  • FastMCP по HTTP (внешний интерфейс).
  • Tool workers без HTTP.
  • Обмен через IPC (ZeroMQ).

Результат:

  • Средний overhead — ~200 мс.

Хуже S1 и S2, но стабильнее и предсказуемее, чем S3. Главный фактор — не сам IPC, а асинхронная модель взаимодействия.

S5: MCP runtime на C++

Тестирование собственной реализации MCP на C++.

Результат:

  • Средний overhead — 130–145 мс на вызов.

Это лучше, чем в Python-реализациях (S2, S3), и немного лучше S4 (ZeroMQ).

Но выигрыш — не радикальный. Задержка остаётся в том же диапазоне — сотни миллисекунд.

Вывод: язык реализации влияет слабо. Основные накладные расходы — в архитектуре, а не в runtime.

Итоговые выводы

Анализ всех сценариев показал:

  • Thin MCP поверх HTTP — нестабильная производительность. Иногда лучше, но не воспроизводимо.
  • IPC (iceoryx2) — не дал выигрыша из-за отсутствия асинхронности.
  • ZeroMQ — более стабильный результат благодаря асинхронной модели.
  • C++ — умеренное улучшение, но не кардинальное.

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

Наиболее эффективные решения — те, где:

  • минимизировано количество hop’ов;
  • используется асинхронность;
  • сокращены блокирующие операции;
  • упрощено взаимодействие между proxy и backend.

Что в итоге с Thin MCP

Thin MCP — не «серебряная пуля» для производительности.

Плюсы:

  • упрощение proxy-слоя;
  • языковая независимость;
  • лучшее масштабирование.

Минусы:

  • не гарантирует снижения задержки;
  • производительность зависит от реализации.

Вывод: Thin MCP — архитектурный инструмент, а не оптимизация задержки. Его стоит использовать для гибкости, а не скорости. Для снижения latency важнее — модель выполнения и структура взаимодействия компонентов.

Читать оригинал