Перейти к содержимому

Подключение серверов MCP

MCP (Model Context Protocol) — это стандартный способ подключить к агенту внешние инструменты: на нём говорят GitHub, файловые системы, Notion, базы данных и ещё сотни серверов. У Chimera есть полноценный клиент MCP: инструменты любого сервера становятся обычными инструментами Chimera, лежат в том же реестре, что и встроенные, и подчиняются тем же слоям — списку разрешений, ядру и журналу.

Установите дополнение с клиентом

Клиент MCP вынесен в необязательное дополнение, чтобы ядро оставалось лёгким:

uv sync --extra mcp

Большинство серверов — это пакеты Node, поэтому понадобится ещё npx (идёт вместе с Node.js).

Проверка за 60 секунд (без учётных данных)

Эталонному серверу файловой системы не нужны никакие токены — он просто открывает инструменты чтения и записи над выбранным вами каталогом:

from chimera.integrations import connect_stdio
from chimera.tools import default_registry

connector = connect_stdio(
    "fs",
    "npx", ["-y", "@modelcontextprotocol/server-filesystem", "./sandbox_dir"],
    name_prefix="fs_",   # avoid clashes with built-in tool names
)

registry = default_registry()
for tool in connector.tools():
    registry.register(tool)

print(registry.names())  # built-ins + fs_read_file, fs_write_file, fs_list_directory...

Передайте этот реестр объекту Agent (или посмотрите examples/mcp_github.py с полным циклом) — и модель сможет вызывать инструменты сервера как любые другие.

Настоящий сервер: GitHub

import os
from chimera.integrations import connect_stdio

connector = connect_stdio(
    "github",
    "npx", ["-y", "@modelcontextprotocol/server-github"],
    env={"GITHUB_PERSONAL_ACCESS_TOKEN": os.environ["GITHUB_PERSONAL_ACCESS_TOKEN"]},
    name_prefix="gh_",
)

Это и есть вся интеграция: в реестре появляются около 26 инструментов GitHub (искать репозитории, читать файлы, перечислять задачи, создавать пул-реквесты и так далее). Готовый к запуску вариант: examples/mcp_github.py.

Как это ложится на слои безопасности

Инструменты MCP — это обычные объекты Tool, поэтому всё складывается:

  • Список разрешений на сессиюrestrict_registry(registry, allow=["gh_search_repositories", ...]) даёт только те инструменты MCP, которые нужны этому запуску; неразрешённые до модели не доходят.
  • Ядро управленияgovern_registry(...) пропускает вызовы MCP через разрешить / предупредить / разобрать / заблокировать так же, как любую команду оболочки.
  • Журнал заражения — оберните через ledger_registry(...), и обращения MCP будут записаны; учтите, что сегодня автоматически классифицируются только инструменты, названные в FETCH_TOOLS, поэтому считайте содержимое MCP недоверенным и предпочитайте режим --taint --guard, когда сервер тянет внешние данные.

Chimera в роли сервера MCP

Клиент выше позволяет Chimera вызывать чужие инструменты. Обратное тоже работает: запустите Chimera как сервер MCP, и любой клиент — Claude Desktop, среда разработки, другой агент — сможет вызвать весь движок как три инструмента.

uv sync --extra mcp
chimera serve --mcp        # speaks MCP over stdio

Открываются:

Инструмент Что делает
chimera_solve Самостоятельно решает задачу с планом и проверкой-или-откатом; возвращает ответ.
chimera_fuse Отвечает на запрос через движок LLM-Fusion (панель → судья → синтезатор).
chimera_memory_search Ищет в долговременной памяти Chimera и возвращает лучшие факты.

Направьте на него клиент MCP как на сервер stdio. Для Claude Desktop добавьте в его конфигурацию:

{
  "mcpServers": {
    "chimera": { "command": "chimera", "args": ["serve", "--mcp"] }
  }
}

Режиму --mcp нужен ключ поставщика для chimera_solve и chimera_fuse (поиск по памяти работает и без него). Добавьте --fuse, чтобы направить глубокие ходы решателя через слияние, и --no-memory, чтобы пропустить обращение к памяти. Поскольку проводом служит stdio, все журналы идут в stderr — в stdout только протокол.

Разговор на A2A (агент → агент)

MCP соединяет агентов с инструментами; A2A (Agent2Agent, Linux Foundation) соединяет агентов друг с другом — он встроен в LangGraph, CrewAI и AutoGen. Chimera говорит и на нём, поэтому оркестратор на LangGraph или CrewAI может передать задачу Chimera и получить готовый результат.

chimera a2a-card                       # print the Agent Card JSON
chimera serve --a2a                    # HTTP gateway + A2A endpoint

serve --a2a добавляет к HTTP-серверу два маршрута:

Маршрут Назначение
GET /.well-known/agent.json Карточка агента — кто он и какие навыки объявляет (solve, fuse).
POST /a2a Жизненный цикл задачи по JSON-RPC 2.0: message/send, message/stream, tasks/get, tasks/cancel.

Клиент отправляет message/send с текстовой частью; Chimera запускает самостоятельного агента и возвращает задачу в состоянии completed (или failed), несущую ответ как сообщение агента. Либо он отправляет message/stream и получает поток Server-Sent Events: сначала задачу в состоянии working, затем completed или failed, когда запуск завершится, — так оркестратор видит ход дела без опроса. Карточка агента объявляет capabilities.streaming: true.

Честно об охвате: поток сейчас выдаёт два события (working → итог), а не пошаговые приращения токенов, и push-уведомления не реализованы. Это соответствующий стандарту поток без нужды в опросе — достаточно, чтобы быть полноценным потоковым узлом в приложении на LangGraph или CrewAI.

Если что-то не работает

  • TimeoutError: MCP server ... did not become ready — команда не запустилась. Выполните ту же строку npx ... вручную в терминале, чтобы увидеть её ошибку (нет токена, нет Node, медленно скачивается пакет при первом запуске — увеличьте connect_timeout).
  • ModuleNotFoundError: mcp — установите дополнение: uv sync --extra mcp.
  • Столкновения имён инструментов — всегда передавайте name_prefix.
  • Сессия держит сервер подпроцессом всё время жизни вашего скрипта; вызовите close() у сессии connector (или просто дайте процессу завершиться), чтобы её свернуть.

Изменить эту страницу на GitHub