前言¶
DeepSeek Harness(简称 dsh)把「一切皆插件」写进了运行时:模型、工具、会话、沙箱和界面都挂在 Cordis 内核上,改配置就能换能力,不必改核心源码。MCP(Model Context Protocol)也走同一条路——官方包 @deepseek-ai/dsh-mcp-client 负责连外部 MCP 服务器,并把工具注册成模型能直接调用的 mcp__服务器名__工具名。
这条桥很好用,配置却偏「手写 YAML」:每个服务器一行 cordis.yml / cordis.patch.yml,传输方式、命令、URL、环境变量都写在配置里。连不上的时候,常见做法是翻日志、猜重连次数、再让模型试一次工具调用。服务器一多,状态、工具清单和最近错误就散在各处,密钥还容易在排障时被原样打出来。
本文介绍社区插件 dsh-mcp-panel。它不替代官方 MCP 客户端,而是叠在上面的管理控制台:用 /mcp 命令和设置页里的 MCP 标签页看状态、工具、错误和重连次数;需要改服务器时,生成可预览的 patch 片段,审批通过后再追加写入,并自动备份。本文依据社区插件目录页、GitHub 仓库 README、package.json、CHANGELOG、npm 页面以及官方 @deepseek-ai/dsh-mcp-client 说明交叉核对,当前仓库版本为 0.4.0。社区插件目录是独立站点,与 DeepSeek / 幻方没有官方从属关系,不要把它当成官方应用商店。
这是什么¶
dsh-mcp-panel 是一款界面增强插件,由 PerryLink 维护,许可证为 Apache-2.0,主要语言是 TypeScript。GitHub 仓库当前显示 9 星(社区目录页收录时显示为 4 星,星标以仓库页面为准)。npm 上的发布名为 dsh-mcp-panel,与 GitHub 仓库同名。
它面向 DeepSeek Harness 官方 MCP 客户端,定位可以分成两层:
- 只读运行时视图:通过官方客户端已经提供的
mcp/status可观测接口、工具注册表和 loader,列出各服务器的传输、目标、工具数、连接状态、最近错误和重连次数。没有观测到的字段如实显示unknown/—,不编造连通状态。 - 受控的 profile 写入:在设置页用表单增删改服务器,输出的是
cordis.patch.yml里那一套insert/set/set disabled操作。可以只复制片段自己贴,也可以走审批后追加写入;写入前会备份,默认保留最近 5 份。传输、OAuth 和 MCP 协议本身它都不改。
官方客户端仍然是唯一桥接层:每个 MCP 服务器对应一行 @deepseek-ai/dsh-mcp-client,负责连接、同步工具、注册 mcp__* 名称。面板只是体验层。README 把它概括成一句话:官方 client 是桥,本插件是控制台。
兼容范围以仓库说明为准:DeepSeek Harness 0.1.0-rc.5–0.1.0-rc.6,Node.js ^22.19.0 || >=24.0.0,平台是 Web GUI(Host + 浏览器双面)。面板本身对模型只读,只有 /mcp 命令的输出会对模型可见。
官方客户端在做什么¶
先看官方客户端自己怎么配,能更清楚面板补的是哪一块。@deepseek-ai/dsh-mcp-client 的 README 写明:每个 MCP 服务器一个插件实例,写在 cordis.yml 里。下面是官方文档里的示例:
- id: mcp-github
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: github
transport: stdio
command: npx
args: ['-y', '@modelcontextprotocol/server-github']
env:
GITHUB_TOKEN: !!js process.env.GITHUB_TOKEN
- id: mcp-web
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: web
transport: streamable-http
url: http://localhost:3000/mcp
headers:
Authorization: !!js '`Bearer ${process.env.MCP_TOKEN}`'
模型看到的是 mcp__github__create_issue、mcp__web__search 这类带命名空间的名字。传输支持 stdio 和 streamable-http。官方说明还写了一条边界:当前只桥接 Tools,Resources 和 Prompts 没有 harness 侧消费者,处于延期状态。
面板不会改这些行的语义。它读的是客户端暴露出来的状态,写的是 profile 的 patch 层。装上面板之后,配置里会多出一行类似:
- id: mcp-panel
name: dsh-mcp-panel
config:
probeEnabled: true
核心功能¶
仓库 README 和 CHANGELOG 0.4.0 把能力分成命令面和设置页两块,下面按已核实内容说明。
/mcp 命令族¶
在会话里可以直接打命令,输出对模型可见,也可以从会话日志重建。
/mcp:每个服务器一行,包含 transport、目标、工具数、连接状态、最近错误、重连计数。连接状态来自上游mcp/statusseam;没有观测时显示unknown。输出语言由配置项outputLanguage控制,可选en、zh、es、pt、hi。/mcp tools:列出模型可见的mcp__*工具名和描述。/mcp health:根据脱敏后的错误文本给出派生建议,例如ENOENT对应依赖缺失、ECONNREFUSED、超时、401/403/404、DNS、限流、重连耗尽等。子进程退出码和 stderr 尾部如果官方客户端还没暴露,会标明「待官方支持」,不会假装已经有数据。/mcp call [json]:走官方工具管线ctx.tools.execute()做试用调用。pre-execute 权限策略、审批、guard、post-execute 全部生效,不是面板自己另开一条旁路。/mcp disable//mcp enable:给出精确的setpatch 行,用来禁用或重新启用某一行。
README 里的快速示例(假设已经配了名为 everything 的演示服务器):
/mcp
/mcp everything tools
/mcp everything health
/mcp everything call echo '{"message": "hi"}'
设置页:MCP 标签¶
打开 设置 → 插件 → MCP,同一份快照会以状态卡片形式展示:徽章、诊断、探测结果,以及下面三块控制台。
- Server CRUD:表单添加、修改服务器;「删除」在 patch 词汇表里没有
remove,实际是追加set disabled: true,以后还能重新启用。表单会预填当前行;未改动的密钥在 Host 侧保留原值,编辑器只看见 key。生成的片段可以复制,也可以审批写入。 - 工具试用台:选服务器 → 选已注册的
mcp__*工具 → 填 JSON 参数 → 调用。结果同时给出规范 JSON 和渲染内容,按trialMaxResultChars(默认 60000 字符)截断。试用结果只留在面板,不进入模型上下文。 - 探测与能力一览:可对 Streamable HTTP 服务器做一键或被动连通性探测,结果只在面板里看。Resources / Prompts 用特征探测判断上游 catalog 是否就绪;目前二者都标「待官方支持」。
另外还有一个可选工具 mcp_probe,用后台任务做一次性 Streamable HTTP 探测,结果同样只给面板。
脱敏与写入边界¶
排障面板最容易把 token 打到界面上。仓库把这条写进了安全边界:
- URL 查询凭据、userinfo 密码、header 值、Bearer token、JWT 在渲染前打码。
- 配置里的
headers不进入任何快照;env / header 的值不出 Host,编辑器只见 key。 - 写入只追加、走审批、先备份。存在审批服务且当前会话的 agent 处于开启轮次时,写入走
ctx.approval(仅allowed-once放行);否则用界面上的显式确认。writeEnabled: false是硬开关,关掉后拒绝一切 profile 写入,复制片段仍然可用。 - 插件不注册任何提示词段落;对模型可见的文本主要是命令/工具描述。
权限方面,dshWorkshop 清单声明了 network:outbound 和 native-code:none。
安装与启用¶
社区目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行即可:
dsh plugin add github:PerryLink/dsh-mcp-panel
仓库 README 针对 Web profile 写得更具体,并提供 git 通道和 npm 通道。git 通道会跑包里的 prepare 脚本做构建;npm 通道用已发布的 tarball,不必再走构建审批:
# git 通道,跟最新 main
dsh plugin --profile web add "github:PerryLink/dsh-mcp-panel#main"
# 固定到已发布的 0.4.0 标签(可复现安装)
dsh plugin --profile web add github:PerryLink/dsh-mcp-panel#v0.4.0
# npm 通道
dsh plugin --profile web add dsh-mcp-panel
# 固定 npm 版本
dsh plugin --profile web add dsh-mcp-panel@0.4.0
目录页也提示:如需可复现安装,可写成 dsh plugin add github:PerryLink/dsh-mcp-panel#commit,把 commit 换成具体哈希。
安装后重启,或让 Web 面板热重载 cordis.patch.yml,再用下面命令确认出现了 mcp-panel 这一行:
dsh --profile web --dump-config | grep -A3 'id: mcp-panel'
然后打开 设置 → 插件 → MCP,或在会话里执行 /mcp。
卸载按 README:从 cordis.patch.yml 去掉 mcp-panel 行(Web 面热重载),从 profile 的 node_modules 删掉这个包,再用 dsh web --dump-config 确认没有残留行。
目录页和仓库都提醒:插件以当前 dsh 进程的权限运行,安装时可能执行代码。 安装前请检查源代码仓库和许可证。
配置项¶
可调项都是 Schemastery Config 字段,可以在 cordis.yml / cordis.patch.yml 里覆盖。仓库文档列出的键如下(默认值来自 README):
| 键 | 默认值 | 含义 |
|---|---|---|
probeEnabled |
true |
是否注册 mcp_probe 后台任务工具 |
probeTimeoutMs |
10000 |
单次探测超时(毫秒) |
maxProbes |
10 |
面板展示的探测记录数 |
refreshIntervalMs |
0 |
建议的面板刷新间隔;0 表示按需 |
outputLanguage |
en |
/mcp 输出语言:en / zh / es / pt / hi |
passiveProbeEnabled |
false |
是否周期性探测 streamable-http 服务器 |
passiveProbeIntervalMs |
60000 |
被动探测间隔(毫秒) |
trialEnabled |
true |
是否启用工具试用台和 /mcp call |
trialTimeoutMs |
120000 |
每次试用调用的面板侧截止时间 |
trialMaxResultChars |
60000 |
试用结果载荷上限(字符) |
writeEnabled |
true |
写入总开关;false 时仍可复制片段 |
backupCount |
5 |
每次写入保留的 cordis.patch.yml 备份数 |
如果只想看状态、不想让面板改配置,把 writeEnabled 设成 false 即可。中文界面可以把 outputLanguage 改成 zh。
适用场景与注意事项¶
比较适合下面几类用法:
- 已经在 profile 里挂了若干
@deepseek-ai/dsh-mcp-client行,想一眼看到谁连上了、谁在重连、最近一次错误是什么。 - 不想为了加一台 stdio 或 HTTP MCP 服务器去手改 YAML 缩进和引号,希望用表单生成 patch,复制或审批后再落地。
- 调用模型之前,先在试用台用官方管线跑一遍
mcp__*工具,确认参数和权限策略。 - 对外分享截图或日志前,需要面板先把 token、header、JWT 打码。
使用时有几条边界需要提前知道:
- 它不是另一个 MCP 客户端。 不会自己建传输、做 OAuth、改协议。没有官方客户端那一行,面板没有桥可看。
- 平台目前是 Web GUI。 仓库兼容表写的是 Host + 浏览器双面,不是所有 dsh 运行面都有这块设置页。
- Harness 版本要对上。 声明兼容
0.1.0-rc.5和0.1.0-rc.6。dsh 仍处于 developer preview,核心插件和 API 还会变,升级 Harness 后应再核对插件版本。 - Resources / Prompts、退出码 / stderr 尾部 在官方客户端补齐之前,面板会标「待官方支持」,不要把这些空字段理解成「服务器没开这项能力」。
- 「删除」其实是禁用。 patch 没有 remove 操作,禁用后行还在,可以再 enable。
- 插件权限等于当前 dsh 进程。 安装社区插件前应阅读源码和 Apache-2.0 许可证;生产环境更建议固定 commit 或 npm 版本,而不是一直追
main。
小结¶
dsh-mcp-panel 解决的是官方 MCP 客户端「能连、但不好看、不好改」这一段:状态从 mcp/status 读,配置改动落成可预览、可审批、可回滚的 patch,工具试用走同一条 ctx.tools.execute() 管线。它把控制台和桥接层拆开,官方客户端继续负责传输和工具注册,面板负责观察和受控修改。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-mcp-panel/
GitHub:https://github.com/PerryLink/dsh-mcp-panel
npm:https://www.npmjs.com/package/dsh-mcp-panel