Протокол 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, запрашивает список доступных инструментов и регистрирует их у себя.

СерверОригинальное имяЧерез агрегатор
filesystemread_filefilesystem-read_file
web-searchsearchweb-search-search
memorycreate_entitiesmemory-create_entities
sequential-thinkingsequentialthinkingsequential-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 в командном репозитории.