用 dsh-mcp-panel 管理 DeepSeek Harness 的 MCP 服务器

前言

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 客户端,定位可以分成两层:

  1. 只读运行时视图:通过官方客户端已经提供的 mcp/status 可观测接口、工具注册表和 loader,列出各服务器的传输、目标、工具数、连接状态、最近错误和重连次数。没有观测到的字段如实显示 unknown / ,不编造连通状态。
  2. 受控的 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.50.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_issuemcp__web__search 这类带命名空间的名字。传输支持 stdiostreamable-http。官方说明还写了一条边界:当前只桥接 Tools,Resources 和 Prompts 没有 harness 侧消费者,处于延期状态。

面板不会改这些行的语义。它读的是客户端暴露出来的状态,写的是 profile 的 patch 层。装上面板之后,配置里会多出一行类似:

- id: mcp-panel
  name: dsh-mcp-panel
  config:
    probeEnabled: true

核心功能

仓库 README 和 CHANGELOG 0.4.0 把能力分成命令面和设置页两块,下面按已核实内容说明。

/mcp 命令族

在会话里可以直接打命令,输出对模型可见,也可以从会话日志重建。

  1. /mcp:每个服务器一行,包含 transport、目标、工具数、连接状态、最近错误、重连计数。连接状态来自上游 mcp/status seam;没有观测时显示 unknown。输出语言由配置项 outputLanguage 控制,可选 enzhespthi
  2. /mcp tools:列出模型可见的 mcp__* 工具名和描述。
  3. /mcp health:根据脱敏后的错误文本给出派生建议,例如 ENOENT 对应依赖缺失、ECONNREFUSED、超时、401/403/404、DNS、限流、重连耗尽等。子进程退出码和 stderr 尾部如果官方客户端还没暴露,会标明「待官方支持」,不会假装已经有数据。
  4. /mcp call [json]:走官方工具管线 ctx.tools.execute() 做试用调用。pre-execute 权限策略、审批、guard、post-execute 全部生效,不是面板自己另开一条旁路。
  5. /mcp disable / /mcp enable:给出精确的 set patch 行,用来禁用或重新启用某一行。

README 里的快速示例(假设已经配了名为 everything 的演示服务器):

/mcp
/mcp everything tools
/mcp everything health
/mcp everything call echo '{"message": "hi"}'

设置页:MCP 标签

打开 设置 → 插件 → MCP,同一份快照会以状态卡片形式展示:徽章、诊断、探测结果,以及下面三块控制台。

  1. Server CRUD:表单添加、修改服务器;「删除」在 patch 词汇表里没有 remove,实际是追加 set disabled: true,以后还能重新启用。表单会预填当前行;未改动的密钥在 Host 侧保留原值,编辑器只看见 key。生成的片段可以复制,也可以审批写入。
  2. 工具试用台:选服务器 → 选已注册的 mcp__* 工具 → 填 JSON 参数 → 调用。结果同时给出规范 JSON 和渲染内容,按 trialMaxResultChars(默认 60000 字符)截断。试用结果只留在面板,不进入模型上下文。
  3. 探测与能力一览:可对 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:outboundnative-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

适用场景与注意事项

比较适合下面几类用法:

  1. 已经在 profile 里挂了若干 @deepseek-ai/dsh-mcp-client 行,想一眼看到谁连上了、谁在重连、最近一次错误是什么。
  2. 不想为了加一台 stdio 或 HTTP MCP 服务器去手改 YAML 缩进和引号,希望用表单生成 patch,复制或审批后再落地。
  3. 调用模型之前,先在试用台用官方管线跑一遍 mcp__* 工具,确认参数和权限策略。
  4. 对外分享截图或日志前,需要面板先把 token、header、JWT 打码。

使用时有几条边界需要提前知道:

  • 它不是另一个 MCP 客户端。 不会自己建传输、做 OAuth、改协议。没有官方客户端那一行,面板没有桥可看。
  • 平台目前是 Web GUI。 仓库兼容表写的是 Host + 浏览器双面,不是所有 dsh 运行面都有这块设置页。
  • Harness 版本要对上。 声明兼容 0.1.0-rc.50.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

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜