📱 Подписаться
IT и цифровая трансформация

MCP-агрегатор: объединяем инструменты для LLM в один сервер

📰 Habr 👁️ 4 просмотров

akazant3 часа назад

MCP-агрегатор: объединяем инструменты для LLM в один сервер

Время на прочтение4 минОхват и читатели4.4KИскусственный интеллектПрограммирование*При работе с локальными 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)
• Регистрирует их под своими именами с префиксами
• Проксирует вызовы инструментов к нужному серверу

Пространство имён инструментов

Чтобы избежать конфликтов имён, все инструменты получают префикс сервера:

СерверОригиналЧерез агрегаторfilesystemread_filefilesystem-read_fileweb-searchsearchweb-search-searchmemorycreate_entitiesmemory-create_entitiessequential-thinkingsequentialthinkingsequential-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 на двух языкахТеги:• mcp
• mcp-server
• вайб-кодинг
• вайб-программирование
• вайбокодинг
• llm
• агентское программированиеХабы:• Искусственный интеллект
• Программирование

Получайте больше инсайтов о систематизации бизнеса

Подписывайтесь на Telegram-канал Business Operations — ежедневные материалы о бизнес-процессах, операционном управлении и повышении эффективности

💬 Подписаться на канал