MCP (Протокол контекста модели)

MCP позволяет агенту Hermes подключаться к инструментам внешнего сервера, чтобы агент мог использовать инструменты, которые позволяют изменять поведение самого Hermes — GitHub, базы данных, файловые системы, браузерные стеки, внутренний API и многое другое.

Если вы когда-либо хотели, чтобы Hermes использовал инструмент, который уже существует где-то ещё, MCP обычно является самым чистым способом это сделать.

Что даёт MCP

Быстрый старт

  1. Настройте поддержку MCP (также включена, если вы используете стандартный скрипт установки):
cd ~/.hermes/hermes-agent
uv pip install -e ".[mcp]"
  1. Добавьте MCP-сервер в ~/.hermes/config.yaml:
mcp_servers:
  filesystem:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/projects"]
  1. Запустите Hermes:
hermes chat
  1. Попросите Hermes использовать благоприятную MCP.

Например:

Перечисли файлы в /home/user/projects и обобщи структуру репозитория.

Hermes использует инструменты MCP-сервера и будет использовать их как любые другие инструменты.

Два вида MCP-серверов

Stdio-серверы

Stdio-серверы работают как локальные подпроцессы и обмениваются данными через stdin/stdout.

mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "***"

Используйте stdio-серверы, когда: - установлен локально сервер - Вам нужна поддержка доступа к локальным ресурсам - вы следуете документацию MCP-сервера, где показаны command, args и env

HTTP-серверы

HTTP MCP-серверы — это удалённые конечные точки, к которым Hermes обращается напрямую.

mcp_servers:
  remote_api:
    url: "https://mcp.example.com/mcp"
    headers:
      Authorization: "Bearer ***"

Используйте HTTP-серверы, когда: - MCP-сервер размещён в другом месте - ваша организация обеспечивает внутренние MCP-конечные точки - Вы не хотите, чтобы Hermes запускал локальный подпроцесс для этого предпринимателя.

Справочник по формулировке

Hermes сохраняет конфигурацию MCP из ~/.hermes/config.yaml в разделе mcp_servers.

Общие ключи

Ключ Тип Значение
команда строка Исполняемый файл для stdio MCP-сервера
аргументы список Аргументы для stdio-сервера
окр участие Переменные окружения, офисные stdio-серверы
url строка HTTP MCP-конечная точка
заголовки участие HTTP-заголовки для удаленных серверов
тайм-аут число Таймаут вызова инструмента
connect_timeout число Таймаут начального подключения
включено бул Если false, Hermes полностью пропускает сервер
инструменты участие Инструменты фильтрации и утилиты политик для каждого сервера

Минимальный пример stdio

mcp_servers:
  filesystem:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/tmp"]

Минимальный пример HTTP

mcp_servers:
  company_api:
    url: "https://mcp.internal.example.com"
    headers:
      Authorization: "Bearer ***"

Как Hermes регистрирует MCP-инструменты

Hermes добавил префикс к MCP-инструментам, чтобы они не смешивались с именами:

mcp_<server_name>_<tool_name>

Примеры:

Сервер MCP-инструмент Зарегистрированное имя
файловая система прочитать_файл mcp_filesystem_read_file
гитхаб создать-выпуск mcp_github_create_issue
мой-апи запрос.данные mcp_my_api_query_data

В качестве примера вам обычно не нужно включать имя с префиксом вручную — Hermes видит инструмент и выбирает его во время обычного рассуждения.

Утилитарные инструменты MCP

При согласовании Hermes также регистрирует утилитарные инструменты для ресурсов и промптов MCP:

Они регистрируются для каждого сервера с тем же шаблонным префиксом, например:

Важно

Эти утилитарные инструменты теперь имеют возможность наблюдать: - Hermes регистрирует полезные ресурсы только в том случае, если сессия MCP действительно поддерживает работу с услугами. - Hermes регистрирует промпты утилит, только если сессия MCP действительно поддерживает операцию с промптами.

Таким образом, сервер, который предоставляет вызываемые инструменты, но не ресурсы/промпты, не получит дополнительных обёрток.

Фильтрация для каждого сервера

Вы можете контролировать, какие инструменты каждый MCP-сервер предоставляет Hermes, что позволяет тонко управлять пространством с помощью инструментов.

Полностью отключенный сервер

mcp_servers:
  legacy:
    url: "https://mcp.legacy.internal"
    enabled: false

Если включено: false, Hermes полностью пропускает сервер и даже не пытается установить соединение.

Белый список инструментов сервера

mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "***"
    tools:
      include: [create_issue, list_issues]

Регистрируются только защищенные серверы MCP-инструментов.

Чёрный список инструментов сервера

mcp_servers:
  stripe:
    url: "https://mcp.stripe.com"
    tools:
      exclude: [delete_customer]

Регистрируются все инструменты сервера, кроме отключенных.

Правило приоритета

Если присутствуют оба:

tools:
  include: [create_issue]
  exclude: [create_issue, delete_issue]

include побеждает.

Фильтрация утилит тоже

Также можете отдельно выделить добавленные гигиенические обёртки Hermes:

mcp_servers:
  docs:
    url: "https://mcp.docs.example.com"
    tools:
      prompts: false
      resources: false

Это означает: - tools.resources: false отключает list_resources и read_resource - tools.prompts: false отключает list_prompts и get_prompt

Полный пример

mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "***"
    tools:
      include: [create_issue, list_issues, search_code]
      prompts: false

  stripe:
    url: "https://mcp.stripe.com"
    headers:
      Authorization: "Bearer ***"
    tools:
      exclude: [delete_customer]
      resources: false

  legacy:
    url: "https://mcp.legacy.internal"
    enabled: false

Что происходит, если всё отфильтровано?

Если ваша конфигурация отфильтровывает все вызываемые инструменты и отключает или опускает все применяемые утилиты, Hermes не создает пустой набор MCP-инструментов во время выполнения для этого сервера.

Сохраните список инструментов чистым.

Поведение во время выполнения

Определение времени

Hermes обнаруживает MCP-серверы при запуске и регистрирует их инструменты в обычном реестре инструментов.

Динамическое обнаружение инструментов

MCP-серверы могут уведомить Hermes, когда их доступные инструменты изменяются во время выполнения, отправляя notifications/tools/list_changed. Когда Hermes получает это)., он автоматически повторно загружает список инструментов сервера и обновляет реестр — без ручного /reload-mcp.

Это полезно для MCP-серверов, их возможности изменять изменение (например, сервер, который добавляет инструменты при включении новой схемы базы данных или сохраняет инструменты, когда сервис отключается).

Обновление защищено блокировкой, поэтому быстрые уведомления от одного и того же сервера не вызывают перекрывающиеся обновления. Уведомления об обеспечении промптов и ресурсов (prompts/list_changed, resources/list_changed) принимаются, но пока не обрабатываются.

Перезагрузка

Если вы изменили конфигурацию MCP, воспользуйтесь:

/reload-mcp

Он перезагружает MCP-серверы для конфигурации и обновляет список доступных инструментов. Для изменений инструментов во время выполнения, отправленных собственным сервером, см. Динамическое обнаружение инструментов выше.

Наборы инструментов

Каждый настроенный MCP-сервер также создает набор инструментов для выполнения, когда он предоставляет хотя бы один зарегистрированный инструмент:

mcp-<server>

Это основное распределение MCP-серверов на уровне набора инструментов.

Модель безопасности

Фильтрация окружения stdio

Для stdio-серверов Hermes не передаёт слепо всё ваше окружение.

Передаются только явно настроенные env безопасный плюс базовый уровень. Это уменьшает случайную утечку секретов.

Контроль экспозиции на уровне конфигурации

Новая поддержка фильтра также является мерой безопасности: - отключите опасные инструменты, которые вы не хотите, чтобы модель видела - Показывайте только белый список для чувствительного сервера. - отключайте обёртки ресурсов/промптов, когда вы не хотите, чтобы эта поверхность была доступна

Примеры использования

Проблемы с GitHub-сервером с минимальной поверхностью управления

mcp_servers:
  github:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-github"]
    env:
      GITHUB_PERSONAL_ACCESS_TOKEN: "***"
    tools:
      include: [list_issues, create_issue, update_issue]
      prompts: false
      resources: false

Используйте так:

Покажи открытые issues с меткой bug, затем создай новый issue для нестабильного поведения MCP-переподключения.

Stripe-сервер с удаленными опасными действиями

mcp_servers:
  stripe:
    url: "https://mcp.stripe.com"
    headers:
      Authorization: "Bearer ***"
    tools:
      exclude: [delete_customer, refund_payment]

Используйте так:

Найди последние 10 неудачных платежей и обобщи распространённые причины сбоев.

Файловый сервер для одного главного проекта

mcp_servers:
  project_fs:
    command: "npx"
    args: ["-y", "@modelcontextprotocol/server-filesystem", "/home/user/my-project"]

Используйте так:

Проверь корень проекта и объясни структуру каталогов.

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

MCP-сервер не хранится

проверить:

# Убедитесь, что зависимости MCP установлены (уже включены в стандартную установку)
cd ~/.hermes/hermes-agent && uv pip install -e ".[mcp]"

node --version
npx --version

Затем проверьте вашу конфигурацию и перезапустите Hermes.

Инструменты не строительные

Возможные причины: - сервер не смог подключиться - Обнаружение не удалось - ваши настройки фильтра отдельных инструментов - альтернативная возможность не существует в этом регионе - сервер отключен с помощью enabled: false

Если вы намеренно фильтруете, это ожидаемо.

Почему не появились утилиты ресурсов или промптов?

Потому что Hermes теперь регистрирует эти обёртки только тогда, когда выполняются оба условия: 1. Ваша форма их одобрена 2. сессия сервера действительно поддерживает эту возможность

Это сделано намеренно и сохранить инструменты честности.

Поддержка сэмплирования MCP

MCP-серверы могут запросить вывод LLM от Hermes через протокол sampling/createMessage. Это позволяет MCP-серверу Hermes сгенерировать текст от его имени — полезно для серверов, которым нужны нужные возможности LLM, но у которых нет собственного доступа к моделям.

Сэмплирование включено по умолчанию для всех MCP-серверов (когда MCP SDK поддерживает). Чтобы настроить его для каждого сервера под ключом sampling:

mcp_servers:
  my_server:
    command: "my-mcp-server"
    sampling:
      enabled: true            # Включить сэмплирование (по умолчанию: true)
      model: "openai/gpt-4o"  # Переопределить модель для запросов сэмплирования (опционально)
      max_tokens_cap: 4096     # Максимум токенов на ответ сэмплирования (по умолчанию: 4096)
      timeout: 30              # Таймаут в секундах на запрос (по умолчанию: 30)
      max_rpm: 10              # Лимит скорости: макс. запросов в минуту (по умолчанию: 10)
      max_tool_rounds: 5       # Макс. раундов использования инструментов в циклах сэмплирования (по умолчанию: 5)
      allowed_models: []       # Белый список имён моделей, которые сервер может запрашивать (пусто = любые)
      log_level: "info"        # Уровень аудита: debug, info или warning (по умолчанию: info)

Обработчик сэмплирования включает в себя скользящий оконный ограничитель скорости, таймауты для запроса и ограничения диапазона рабочих инструментов для предотвращения неконтролируемого использования. Метрики (количество запросов, ошибок, использованных токенов) отслеживаются для каждого экземпляра сервера.

Чтобы отключить сэмплирование для конкретного сервера:

mcp_servers:
  untrusted_server:
    url: "https://mcp.example.com"
    sampling:
      enabled: false

Запуск Hermes как MCP-сервера

В дополнение к подключению к MCP-серверам, Hermes также может быть MCP-сервером. Это другим MCP-совместимым агентам (Claude Code, Cursor, Codex или любому MCP-клиенту) использовать возможности обмена сообщениями Hermes — просматривать разговоры, читать историю сообщений и отправлять сообщения на все ваши подключенные платформы.

Когда это использовать

Быстрый старт

hermes mcp serve

Это запускает stdio MCP-сервер. MCP-клиент (не вы) управляет жизненным циклом процесса.

Конфигурация MCP-клиента

Добавьте Hermes в конфигурацию вашего MCP-клиента. Например, в ~/.claude/claude_desktop_config.json для кода Клода:

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

Или, если вы установили Hermes в определенное место:

{
  "mcpServers": {
    "hermes": {
      "command": "/home/user/.hermes/hermes-agent/venv/bin/hermes",
      "args": ["mcp", "serve"]
    }
  }
}

Доступные инструменты

MCP-сервер предоставляет 10 инструментов, соответствующих интерфейсу моста OpenClaw, а также каналы браузера, специфичные для Hermes:

Инструмент Описание
список_разговоров Список активных разговоров в мессенджерах. Фильтрация по платформе или поиск по имени.
conversation_get Получить подробную информацию об одном разговоре по ключевой сессии.
messages_read Прочитать недавнюю историю сообщений для разговора.
attachments_fetch Используйте нетекстовые изображения (изображения, медиа), в частности, сообщения.
events_poll Вопрос о наличии новых событий разговора с позиции опасности.
events_wait Длинный опрос / блокировка до скорости следующих событий (почти в первую очередь).
messages_send Отправить сообщение через платформу (например, telegram:123456, discord:#general).
список_каналов Список доступных целей для отправки сообщений на всех платформах.
permissions_list_open Список ожидаемых запросов на одобрение, наблюдавшихся во время этой сессии моста.
permissions_respond Разрешить или отклонить ожидающий запрос на одобрение.

События системы

MCP-сервер включает события моста в мгновение ока, который запрашивает базу данных сессий Hermes о предмете новых сообщений. Это дает MCP-клиентам уведомление о входящих разговорах почти в первый раз:

# Опрос новых событий (неблокирующий)
events_poll(after_cursor=0)

# Ожидание следующего события (блокируется до таймаута)
events_wait(after_cursor=42, timeout_ms=30000)

Типы событий: message, approval_requested, approval_resolved

Очередь событий сохраняется в памяти и запускается при подключении моста. Более старые сообщения доступны через messages_read.

Параметры

hermes mcp serve              # Обычный режим
hermes mcp serve --verbose    # Отладочное логирование в stderr

Как это работает

MCP-сервер передает данные разговоров напрямую из хранилища сессий Hermes (~/.hermes/sessions/sessions.json и базы данных SQLite). Фоновый поток запрашивает данные о новых сообщениях объекта и поддерживает поворот событий в памяти. Для отправки сообщений используется та же инфраструктура send_message, что и у самого агента Hermes.

Шлюзу НЕ нужно включать для операций чтения (список разговоров, чтение истории, опрос событий). Он ДОЛЖЕН быть активирован для оперативной отправки данных, поскольку адаптеры платформы необходимы в активных соединениях.

Текущие ограничения

Связанные документы