MCP-агрегатор: объединяем инструменты для LLM в один сервер
При работе с локальными LLM через Claude Desktop, Kilo Code, Cursor или другие MCP-клиенты часто возникает одна и та же ситуация: Нужен filesystem для работы с файлами,web-search для поиска в интернете,memory для хранения контекста между сессиями, sequential-thinking для сложных рассуждений. И ещё десяток серверов…
Каждый MCP-сервер — это отдельный процесс, отдельная конфигурация, отдельная точка отказа. Файл конфигурации MCP обрастает десятками записей, а управление этим стадом серверов превращается в еще одну проблему. Где лежит файл конфигурации MCP для конкретного агентского приложения — лучше было бы выбирать самому, например, держать его прямо в папке проекта. Кроме того, имя mcp-сервера, в принципе не так важно для LLM как имена и описание инструментов в нем, так что одного, но полного списка инструментов (функций) было бы достаточно.
Что если бы можно было запустить один сервер, который автоматически подтягивал бы все остальные?
Решение: MCP Aggregator🔌
который:
✅ Читает единый MCP.json с конфигурацией всех серверов
✅ Автоматически запускает их как дочерние процессы
✅ Проксирует все инструменты через единый интерфейс
✅ Управляет жизненным циклом (автоперезапуск при падении)
✅ Работает с любым MCP-клиентом
Как это работает
Агрегатор работает как MCP-клиент для дочерних серверов и как MCP-сервер для приложения. Он:
-
Парсит MCP.json и находит все сконфигурированные серверы
-
Запускает каждый через StdioClientTransport
-
Запрашивает capabilities (tools/list, resources/list, prompts/list)
-
Регистрирует их под своими именами с префиксами
-
Проксирует вызовы инструментов к нужному серверу
Пространство имён инструментов
Чтобы избежать конфликтов имён, все инструменты получают префикс сервера:
|
Сервер |
Оригинал |
Через агрегатор |
|---|---|---|
|
filesystem |
read_file |
filesystem-read_file |
|
web-search |
search |
web-search-search |
|
memory |
create_entities |
memory-create_entities |
|
sequential-thinking |
sequentialthinking |
sequential-thinking-sequentialthinking |
Это позволяет LLM явно понимать, какой инструмент какого сервера вызывается.
Конфигурация
Всё управление — через один файл MCP.json:
{ «mcpServers»: { «filesystem»: { «command»: «npx», «args»: [«-y», «@modelcontextprotocol/server-filesystem», «~/projects/data/»] }, «web-search»: { «command»: «node», «args»: [«~/mcp/web-search/dist/index.js»] }, «memory»: { «command»: «npx», «args»: [«-y», «@modelcontextprotocol/server-memory»], «env»: { «MEMORY_FILE_PATH»: «~/.mcp/memory.jsonl» } }, «sequential-thinking»: { «command»: «npx», «args»: [«-y», «@modelcontextprotocol/server-sequential-thinking»] }, «context7»: { «command»: «npx», «args»: [«-y», «@upstash/context7-mcp»] } } } 
Формат полностью совместим с конфигурацией популярных MCP-клиентов — можно скопировать секцию mcpServers из файла конфигурации вашего клиента.
Установка и использование
Вариант 1: Через npx (быстрый старт)
# Создайте MCP.json с вашими серверами npx @vugu/mcp-aggregator —config MCP.json 
Вариант 2: Глобальная установка
npm install -g @vugu/mcp-aggregator mcp-aggregator —config MCP.json 
Вариант 3: Из исходников
git clone https://github.com/vuguzum/mcp-aggregator.git cd mcp-aggregator npm install node src/index.js —config MCP.json 
Подключение к MCP-клиенту (на примере Claude Desktop)
Добавьте в конфигурационный файл вашего клиента (например, claude_desktop_config.json для Claude Desktop):
{ «mcpServers»: { «aggregator»: { «command»: «mcp-aggregator», «args»: [«—config», «~/.config/mcp/MCP.json»] } } } 
Теперь вместо 10 отдельных записей остаётся одна — aggregator. Все инструменты из всех дочерних серверов автоматически становятся доступны в Claude Desktop.
Ключевые фичи
🔄 Автоперезапуск
Если дочерний сервер падает, агрегатор автоматически перезапускает его с экспоненциальным backoff (до 5 попыток). Это критично для долгоживущих сессий.
🛡️ Устойчивость к ошибкам
Если один сервер не запустился (например, не установлен Python для file-search-mcp), остальные продолжают работать. Агрегатор просто пропускает проблемный сервер и логирует ошибку.
📊 Полный проксинг
Проксируются не только инструменты, но и:
-
Resources — чтение ресурсов из дочерних серверов
-
Prompts — шаблоны промптов
-
Capabilities — автоматическое обнаружение возможностей
🔍 Отладочный режим
Запуск с DEBUG=1 даёт подробные логи:
DEBUG=1 node src/index.js —config MCP.json 
Все логи идут в stderr (stdout зарезервирован для MCP-протокола).
Производительность
Агрегатор добавляет минимальный overhead:
-
Задержка проксирования: <1ms (прямая передача JSON-RPC сообщений)
-
Потребление памяти: несколько мегабайт на сам агрегатор
-
Запуск дочерних серверов: параллельный
Когда это полезно?
✅ Много MCP-серверов — упрощает конфигурацию
✅ Частые эксперименты — легко добавлять/убирать серверы
✅ Production-окружение — автоперезапуск и устойчивость
✅ Командная работа — единый MCP.json в репозитории
✅ CI/CD — один сервер вместо десяти
Когда НЕ нужно?
❌ Всего 1-2 MCP-сервера — проще настроить напрямую
❌ Если максимальная производительность, то прямой вызов всегда быстрее
❌ Специфичная логика обработки ошибок для каждого сервера
Результаты
MCP-агрегатор решает проблему управления множеством MCP-серверов. Вместо ручного запуска десятка процессов и сложной конфигурации — один сервер, один конфиг, одна точка входа.
Попробовать:
-
📦 npm: npm install @vugu/mcp-aggregator
-
💻 GitHub: github.com/vuguzum/mcp-aggregator
-
📖 Документация: README на двух языках
Источник: habr.com

Добавить комментарий
Для отправки комментария вам необходимо авторизоваться.