hermes-dsh-bridge
hermes-dsh-bridge
Специализированный MCP-плагин — мост Hermes ↔ DeepSeek Harness: поднимает MCP-сервер внутри Harness, чтобы внешние MCP-клиенты (например, Hermes) могли управлять агентом Harness для настоящей кодинг-работы.
Hermes — мозг, Harness — руки.
Зачем это нужно
В Harness уже есть мощный агентный рантайм (инструменты, LLM, агенты, сессии), но это Cordis-приложение — другие агенты им не управляют. Этот плагин выворачивает Harness наизнанку: запускает внутри Harness настоящий MCP-сервер (StreamableHTTP), связывая ядро Harness (ctx.agents / ctx.agentPresets / ctx.tools) и позволяя внешнему «мозгу» раздавать настоящую работу «рукам» Harness.
Hermes (MCP client, 大脑)
│ agent_run / task_inbox / fs_read / session_stats ... (HTTP)
▼
harness-mcp-server (MCP server, :8090)
│ ctx.agents.create → mount 'standard' preset
▼
Harness agent — 完整工具集: bash, fs, todo, web…Related MCP server: dsh-harness-mcp-server
Инструменты (19)
Задачи
Инструмент | Направление | Назначение |
| → Harness | Синхронно выполняет задачу; возвращает структурированный результат + статистику |
| → Harness | Помещает структурированную задачу (задача + контекст памяти + cwd) в асинхронную очередь |
| ← Harness | Возвращает структурированный результат задачи из очереди |
| ← Harness | Снимок очереди асинхронных задач (id/status/createdAt/error) |
Сессии
Инструмент | Направление | Назначение |
| ← | Показывает список сессий (live и сохранённые объединены), по каждой строке — сводка расхода token/LLM |
| ← | Читает журнал событий сессии (reasoning вырезан), последние N записей, фильтр по типу |
| ← | Статистика сессии: rounds/steps/llmTime/toolTime/ttft/tokensPerSec/cacheHitRate/inputTokens/outputTokens |
| ← | Переименовать сессию (удобнее различать при архивировании) |
| ← | Привязать сессию к рабочей области |
Файлы (под ограничением path jail)
Инструмент | Направление | Назначение |
| ← | Читает текстовый файл (постранично с номерами строк; path jail + чёрный список чувствительных имён) |
| ← | Список содержимого каталога (рекурсивно на depth уровней, чувствительные элементы скрываются автоматически) |
| ← | Метаданные файла/каталога |
| → | Запись файла (overwrite/append/create-new) — opt-in (регистрируется только при |
Статус и конфигурация
Инструмент | Направление | Назначение |
| ← | Версия/uptime/provider/model/preset/активные агенты/глубина очереди |
| ← | Сводка конфигурации времени выполнения (authToken маскируется как |
Пресеты
Инструмент | Направление | Назначение |
| ← | Список доступных пресетов агента + пресет по умолчанию |
| ← | Какой пресет фактически действует в сессии (или по умолчанию) |
| → | Меняет пресет по умолчанию ( |
Мета
Инструмент | Направление | Назначение |
| — | Проверка MCP-соединения |
| — | Список имён инструментов, зарегистрированных внутри Harness |
Структурированный результат и статистика
Каждый agent_run возвращает структурированный результат и статистику расхода за этот проход:
{
"sessionId": "...",
"assistantText": "最终回答",
"toolCalls": [{ "name": "bash", "args": "..." }],
"toolResults": ["命令输出"],
"changes": "改了什么",
"verification": "怎么验证的",
"leftovers": "遗留问题",
"stats": {
"rounds": 1, "steps": 3,
"llmTime": 13.9, "toolTime": 0.04,
"ttft": 3349, "tokensPerSec": 40.7,
"cacheHitRate": 1, "inputTokens": 8831, "outputTokens": 157
}
}Замкнутый контур: клиент передаёт память как context в каждую задачу, результат (changes/verification/leftovers) снова сохраняется в память клиента для следующего раунда.
Установка
Способ A — установка в профиль Harness из npm
# 在 Harness profile 的 node_modules 下
cd ~/.dsh/profiles/<你的profile>/node_modules
npm install hermes-dsh-bridgeСпособ Б — сборка из исходников
git clone https://github.com/Emilia-awa/hermes-dsh-bridge.git
cd hermes-dsh-bridge
npm install && npm run build # 产出 lib/index.js
# 把构建产物放进 Harness profile:
# ~/.dsh/profiles/<你的profile>/node_modules/hermes-dsh-bridge⚠️ dual-package hazard (обязательно к прочтению): Harness подключает
@deepseek-ai/*из глобального дерева, а вnode_modulesсамого плагина могут оказаться параллельные копии — два экземпляра модуля ⇒Symbolне совпадает ⇒ агент незаметно лишается всех инструментов (проявляется тем, чтоagent_runпечатает лишь текст<tool_calls>, аtoolCallsвсегда пуст). Исправление: симлинк@deepseek-ai/*-зависимостей плагина на глобальное дерево Harness:PROFILE=~/.dsh/profiles/<你的profile>/node_modules GLOBAL=$(npm root -g)/@deepseek-ai/dsh/node_modules/@deepseek-ai for pkg in cordis cosmokit dsh-agent dsh-llm dsh-session dsh-tools dsh-scope \ dsh-agent-presets dsh-code-runtime dsh-system-prompt dsh-typert-protocol \ dsh-attachment dsh-brand dsh-invariants dsh-timeout dsh-settings \ dsh-home-paths dsh-atomic-write dsh-user-approval \ cordis-plugin-include cordis-plugin-loader; do rm -rf "$PROFILE/@deepseek-ai/$pkg" && ln -sfn "$GLOBAL/$pkg" "$PROFILE/@deepseek-ai/$pkg" done(
cordis-plugin-include/loaderне опубликован в npm registry и существует только в глобальном дереве Harness — симлинк обязателен.)
Patch-конфигурация
Добавьте в конец файла cordis.patch.yml вашего профиля Harness (или эквивалентного patch-файла):
- insert:
- id: hermes-dsh-bridge
name: 'hermes-dsh-bridge'
config:
http: true
port: 8090
host: 127.0.0.1 # 默认仅本机; 暴露前必须加认证
# authToken: '你的随机长token' # 可选: Bearer token 认证
# workspaceRoots: ['/workspace'] # 可选: cwd 白名单
# enableFsWrite: true # 可选: 开启 fs_write(默认关)
# ⚠️ 必须显式声明 provider/model, 否则 agent 组装会因空 {{model}} 崩溃:
provider: opencode-go
model: deepseek-v4-flashПерезапуск и проверка
systemctl restart dsh.service # 或你管理 Harness 的方式
# 验证 19 个工具全在线:
python3 examples/hermes_dsh_mcp.py list
python3 examples/hermes_dsh_mcp.py call status_get '{}'🤖 Инструкция по установке в один клик для ИИ (для AI-агента)
Приведённые шаги рассчитаны на другого AI-агента: если вы AI-агент и устанавливаете этот плагин в управляемую вами среду Harness, строго выполняйте пронумерованные шаги ниже и после каждого шага сверяйте вывод перед продолжением.
Предварительные проверки (сначала эти 3 шага)
Если Node ≥ 22.18:
node --version(при 22.18 ниже упадёт zstd/stripTypeScriptTypes— сначала обновите Node).Проверьте, что целевой профиль Harness существует:
ls ~/.dsh/profiles/(название профиля ниже обозначено как<PROFILE>).Проверьте, что глобальное дерево Harness существует:
npm root -g(ниже$GLOBAL_TREEзаменяетnpm root -g).
Шаги установки (можно копировать и запускать)
# ① 安装插件到 profile
cd ~/.dsh/profiles/<PROFILE>/node_modules
npm install hermes-dsh-bridge # 未发布到 npm 前用方式 B(源码)
# ② 修复 dual-package hazard: 把所有 @deepseek-ai/* 和 cordis-plugin-* symlink 到全局树
GLOBAL_TREE=$(npm root -g)/@deepseek-ai/dsh/node_modules/@deepseek-ai
for pkg in cordis cosmokit dsh-agent dsh-llm dsh-session dsh-tools dsh-scope \
dsh-agent-presets dsh-code-runtime dsh-system-prompt dsh-typert-protocol \
dsh-attachment dsh-brand dsh-invariants dsh-timeout dsh-settings \
dsh-home-paths dsh-atomic-write dsh-user-approval \
cordis-plugin-include cordis-plugin-loader; do
rm -rf "@deepseek-ai/$pkg" 2>/dev/null
ln -sfn "$GLOBAL_TREE/$pkg" "@deepseek-ai/$pkg"
done
# ③ 在 profile 的 cordis patch 文件(cordis.patch.yml)末尾追加配置
cat >> ~/.dsh/profiles/<PROFILE>/cordis.patch.yml <<'EOF'
- insert:
- id: hermes-dsh-bridge
name: 'hermes-dsh-bridge'
config:
http: true
port: 8090
host: 127.0.0.1
provider: opencode-go # ← 换成你自己的 provider id
model: deepseek-v4-flash # ← 换成你自己的 model id
EOF
# ④ 重启 Harness(注意: 若你正跑在 Harness 里, 用 systemd-run 脱离进程树重启)
systemctl restart dsh.service
# ⑤ 验证: 等 8 秒后检查 MCP server 起来 + 工具列表
sleep 8
curl -s -X POST http://127.0.0.1:8090/mcp \
-H 'Content-Type: application/json' -H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"ai-setup","version":"1.0"}}}' \
| tail -1 | head -c 300
python3 examples/hermes_dsh_mcp.py list | grep -cE "agent_run|session_stats|preset_set" # 期望 ≥ 3Критерии приёмки
dsh_mcp.py listвыводит ≥ 19 инструментов, среди них обязательноagent_run,session_stats,preset_set,fs_read.У
status_getпараметрversionв ответе равен0.3.0, аprovider/model— значения из вашей конфигурации.Прогоните пробную задачу:
python3 examples/hermes_dsh_mcp.py run '回复:安装成功'— ответ содержит полеstats.
Типовые сбои и действия (смотреть, когда столкнётесь)
Симптом | Причина | Как исправить |
| dual-package hazard, symlink откат после | Повторить symlink шага ② и перезапустить |
При запуске ошибка | в patch не указан provider/model | Дописать provider/model из шага ③ |
| API-ключ не попал в окружение ( | в systemd unit добавить |
| в шаге ② пропущены cordis-plugin-* | Досимлинковать оба пакета |
Версия та же, но поведение старой | в системе два глобальных npm-дерева, установлено не в то |
|
Полное руководство по устранению — docs/TROUBLESHOOTING.md.
Документация
docs/TOOLS.md — полный справочник по 19 инструментам (вход/выход/лимиты/коды ошибок)
docs/CONFIG.md — поля конфигурации и безопасные значения по умолчанию
docs/TROUBLESHOOTING.md — известные грабли (SSE-разбор, 8KБ-бобрезка, dual-package hazard…)
docs/SECURITY.md — threat model
examples/hermes_dsh_mcp.py — MCP-клиент на Python из нуля зависимостей (только стандартная библиотека).
Позиционирование
Подходит как запасной инструмент, а не как главный каждый день: чтобы править код, запускайте своего основного Агента каждый день. Когда нужна изоляция контекста (большой рефакторинг выжжет клиентский контекст) или параллельное выполнение независимых задач — тогда за этим плагином.
Сессии агента переиспользуются на основе cwd (не пере-загружается контекст проекта при каждом вызове).
Bash изолируется в песочницу (
workspace-write): на хосте должен быть установленbubblewrap, иначе команды записи будут отклонены.Блоки reasoning/thinking вырезаются перед возвратом (двойная защита: на стороне плагина + текстовая фильтрация на уровне текста).
License
GPL-3.0-only, части MIT от вышестоящих компонентов сохранены — см. NOTICE.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityAmaintenanceAn experimental MCP gateway for controlling durable DeepSeek Harness agent sessions from MCP clients, enabling session creation, observation, steering, and resumption across chat sessions.4
- AlicenseNot gradedqualityAmaintenanceExposes DeepSeek Harness agent capabilities as an MCP server, letting any MCP client drive Harness to execute real coding tasks with structured results, context isolation, and parallel execution.8MIT
- AlicenseNot gradedqualityCmaintenanceExposes DeepSeek Harness's coding agent as a model backend via MCP, with user-confirmed task execution and self-inspection/config-patch tools.MIT
- FlicenseNot gradedqualityCmaintenanceExposes DeepSeek Harness skill and agent preset management as an MCP server, letting remote agents read, create, update, and delete skills/presets over HTTP with audit logging. It enables a production-to-review-to-modification workflow without SSH.
Related MCP Connectors
MCP server exposing the Backtest360 engine API as tools for AI agents.
A paid remote MCP for OpenAI Codex agent coordination MCP, built to return verdicts, receipts, usage
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Emilia-awa/hermes-dsh-bridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server