dsh-hosts
DeepSeek Harness (dsh) 插件:连接装了 host_server_mcp 的服务器,在 Web 设置页配置(IP/主机名 + 端口 + token),之后 agent 对话里即可访问这些服务器排查问题——查看信息、执行脚本、读文件、一键诊断。
- Stars
- 0
- Language
- TypeScript
- Created
- Oct 16, 2026
- Updated
- Oct 16, 2026
Introduction
dsh-host-mcp
DeepSeek Harness (dsh) 插件:连接装了 host_server_mcp 的服务器,在 Web 设置页配置(IP/主机名 + 端口 + token),之后 agent 对话里即可访问这些服务器排查问题——查看信息、执行脚本、读文件、一键诊断。
能力
| 通道 | 能力 |
|---|---|
| 设置 → 插件 → 服务器 | 增删改服务器(host/port/token/mcpPath/备注)、设默认、行内「测试连接」(保存前预检,不依赖已落盘配置) |
agent 工具 host-mcp | probe(连通诊断)、diagnose(一键排查)、whoami、list_files、count_file_lines、read_file_lines、exec_script、server_info(服务端环境)、health、servers、version、probe_uncached(配置页预检) |
| 侧边栏「服务器」按钮 | 浮动运维面板:概览 / 文件 / 执行 三个页签 |
安装
# 1. 构建(产出 lib/)
npm install
npm run build
# 2. 装进 web profile
cd "$DSH_HOME/profiles/web" # Windows: C:\Users\<you>\.dsh\profiles\web
npx @deepseek-ai/dsh plugin --profile web add D:/workspace_node/dsh-hosts
# 3. 重启 dsh
装好后 profile 的 cordis.patch.yml 会多出一行(插件自带的 bundle patch 也会 insert 同一 id,二者幂等):
- id: host-mcp
name: dsh-host-mcp
配置服务器
打开 设置 → 插件 → 服务器(在「内置插件」页的页签里):
- 点
+ 添加服务器,填 主机/IP、端口、Token(host_server_mcp 的 token,形如hsk_...); - 单选钮设为默认服务器;
- 点
保存配置—— 写入 profile 配置(volatile 字段,宿主热更新,无需重启); - 想先验证再保存,点行内
测试连接:依次探/health与 MCPinitialize,token 是否有效一目了然。
也可以用
高级:JSON 编辑直接编辑servers数组。 token 会明文写入本机 profile 配置文件,请只填可信的内网服务器。
配置字段
| 字段 | 默认 | 说明 |
|---|---|---|
servers | [] | JSON 数组 [{id,host,port,token,mcpPath,note}] |
defaultServer | 第一个 | 省略 server 参数时使用的服务器 |
requestTimeoutMs | 60000 | 单次 MCP 请求 HTTP 超时 |
defaultTimeoutSecs | 10 | exec_script 默认超时(服务端会再钳一次) |
readLimitBytes | 131072 | 读文件预览默认字节上限 |
maxResultChars | 262144 | 工具结果回传上限(超出截断) |
agent 工具
host-mcp(action, args?, server?)
action 取值与用法:
| action | args | 用途 |
|---|---|---|
probe | — | 连通诊断:health + MCP initialize + whoami,失败时给修复提示 |
diagnose | — | 一键排查:health + whoami + 系统探测(uname/负载/内存/磁盘/CPU 进程) |
whoami | — | token 身份、作用域(read/exec)、可访问根目录、限流与超时上限 |
list_files | {path, pattern, recursive, max_entries} | 列目录(glob + 递归) |
count_file_lines | {path} | 行数/字节数/修改时间(读大文件前先调用) |
read_file_lines | {path, start_line, end_line, with_line_numbers} | 按行区间读文件 |
exec_script | {script, interpreter, cwd, timeout_secs} | 在服务器沙箱内执行脚本(失败回 error_kind 结构化分类,如解释器未授权、命令被拦截等) |
server_info | — | 服务端运行环境:OS/架构、可用解释器及版本、白名单与默认解释器(需 exec 作用域;exec_script 前可先调用选解释器) |
probe_uncached | {host, port, token, mcpPath} | 探测尚未保存的服务器定义(配置页「测试连接」专用;回包只给阶段结论与修复提示,不回显 token) |
health | — | GET /health |
servers | — | 已配置服务器清单(不含 token) |
version | — | 插件名称与版本 |
对话示例:
帮我看看 bd-pr-rn1 上 host_server_mcp 服务是否正常,磁盘还剩多少。
agent 会调 host-mcp(action:"diagnose", server:"bd-pr-rn1"),一次拿到服务状态 + 系统信息。
架构
浏览器半(lib/client.js)
├─ 设置页配置编辑器 ──► ctx.configForms.get('host-mcp') ◄─ 官方配置通道(落盘 + 热更新)
└─ 侧边栏/浮动运维面板 ──► connection.rpc.call('/api', 'host-mcp/<endpoint>')
│
宿主半(lib/index.js) ▼
├─ connection.fetch.register('/api/host-mcp/<endpoint>') ← 精确路由(0.1.5+ 唯一正解)
├─ RPC 分发器(rpc.ts):现读配置 → pickServer → MCP 客户端
├─ MCP Streamable HTTP 客户端(mcp-client.ts):
│ initialize(拿 Mcp-Session-Id)→ notifications/initialized → tools/call
│ SSE 帧解析、会话缓存、422/404 会话失效自动重建(服务端空闲回收或重启后自愈)、401 可读报错
└─ agent 工具(tool.ts):万能 host-mcp 工具,复用同一条分发路径
安全边界:
- token 只存在于插件配置里;
serversRPC 端点与工具结果一律脱敏,不回传明文; exec_script的最终安全边界在 host_server_mcp 服务端(解释器白名单、危险命令黑名单、强制超时、进程树 kill),本插件不改写、不绕过;- 浏览器半只能经
/api精确路由访问宿主半,无第二条通路。
开发
npm install
npm run build # tsc + wrap-client
npm run check # 冒烟 + 依赖解析 + cordis 服务访问 + 配置解析(离线可跑)
npm run check:resolve # 只跑依赖解析(从 profile 的 node_modules 出发)
npm run check:cordis # 真 cordis 验证 ctx.inject 跨 fiber 读服务
npm run check:parse # 配置解析链路(含 role(secret) 回归)
npm run check:live # 真机联调(需要 HSM_HOST/HSM_PORT/HSM_TOKEN)
真机联调(token 只经环境变量,不落盘):
HSM_HOST=bd-pr-rn1 HSM_PORT=8765 HSM_TOKEN=hsk_xxx npm run check:live
已知限制
read_file_lines是 host_server_mcp 里唯一返回原始文本(非 JSON 信封)的工具,面板已特判;- MCP 会话有服务端生命周期:rmcp 的 LocalSessionManager 默认空闲 5 分钟即销毁会话(服务重启同理),之后带旧会话 id 的请求会得到 404。客户端会自动「清缓存 → 重新 initialize → 重试一次」自愈,调用方无感——长时间空闲后的第一次调用会多一次握手;
diagnose的系统探测用interpreter: python(跨平台最稳),需要服务器白名单里有 python;- 管理 API(
/admin/tokens签发/吊销)未接入面板,请用 host_server_mcp 自带的管理接口。
许可
Apache-2.0