Протокол MCP (Model Context Protocol) позволяет языковым моделям вызывать внешние инструменты — читать файлы, искать в интернете, обращаться к базам данных. Каждый такой инструмент живёт в отдельном MCP-сервере: filesystem, web-search, memory, sequential-thinking и так далее. Чем богаче набор инструментов, тем длиннее конфигурационный файл клиента и тем больше отдельных процессов нужно держать запущенными.
Разработчик vuguzum решил эту проблему, опубликовав @vugu/mcp-aggregator. Инструмент работает одновременно в двух ролях: для приложения-клиента (Claude Desktop, Cursor, Kilo Code) он выглядит как обычный MCP-сервер, а сам при этом выступает MCP-клиентом для всех дочерних серверов. При старте агрегатор читает единый файл MCP.json, запускает каждый сервер как дочерний процесс через StdioClientTransport, запрашивает список доступных инструментов и регистрирует их у себя.
| Сервер | Оригинальное имя | Через агрегатор |
|---|---|---|
| filesystem | read_file | filesystem-read_file |
| web-search | search | web-search-search |
| memory | create_entities | memory-create_entities |
| sequential-thinking | sequentialthinking | sequential-thinking-sequentialthinking |
Чтобы два сервера с инструментом под одинаковым именем не конфликтовали, агрегатор добавляет префикс: read_file из сервера filesystem становится filesystem-read_file, search из web-search — web-search-search. Языковая модель при этом видит плоский список всех инструментов и может явно понять, к какому серверу относится каждый вызов.
Каждый инструмент получает префикс сервера-источника, чтобы избежать конфликтов имён при вызове из LLM.
Проксируются не только инструменты, но и ресурсы (Resources), шаблоны промптов (Prompts) и метаданные возможностей (Capabilities) — то есть агрегатор передаёт полный контракт каждого дочернего сервера без потерь. Если один из серверов не запустился — например, отсутствует нужный интерпретатор Python — агрегатор логирует ошибку и продолжает работу с остальными.
Отдельно реализован механизм устойчивости: при падении дочернего процесса агрегатор перезапускает его автоматически с экспоненциальным backoff, до пяти попыток. Это особенно актуально для долгих рабочих сессий, где потеря одного инструмента в середине задачи ломает весь сценарий.
С точки зрения производительности накладные расходы минимальны: задержка проксирования не превышает 1 мс, поскольку агрегатор передаёт JSON-RPC сообщения напрямую, без промежуточной сериализации. Дочерние серверы запускаются параллельно, так что время старта не растёт линейно с числом серверов.
Установить инструмент можно тремя способами: через npx без глобальной установки, через npm install -g или собрав из исходников с GitHub. В конфиге клиента достаточно одной записи — aggregator — вместо перечисления каждого сервера отдельно. Формат MCP.json полностью совместим с тем, что уже используют Claude Desktop и другие популярные клиенты: секцию mcpServers можно скопировать напрямую.
Автор честно обозначает границы применимости: при одном-двух серверах агрегатор избыточен, а если нужна специфическая логика обработки ошибок для каждого сервера — прямое подключение даст больше контроля. Основная целевая аудитория — разработчики, которые активно экспериментируют с набором инструментов или поддерживают общий MCP.json в командном репозитории.



