前言¶
在 DeepSeek Harness(DSH)里接 MCP,常见做法是使用官方的 @deepseek-ai/dsh-mcp-client:每个实例只连一台服务器,清单要手写进 cordis.patch.yml,鉴权多半是静态 headers,不做 OAuth;token 过期后也不会自动续期,连接可能一直带着失效令牌,直到某次调用返回 401。
如果你需要在同一 profile 里维护多台 MCP、用 OAuth 2.1 授权受保护的 streamable-http 端点,并在到期前或 401 之后自动换证重连,社区插件 nekojackie/dsh-mcp-manager 把「清单编排、授权、续期、工具浏览」收进设置页和一组 agent 工具。它不重新实现 MCP 协议,而是编排真正的 mcp-client 子插件,被管理的服务器在 Harness 里仍是普通的 mcp__* 工具。项目标注由 DeepSeek V4.1 Flash 生成,上线前建议自行审阅源码与「安全说明」。
这是什么¶
dsh-mcp-manager(设置里显示为 MCP Server Manager,插件行 id mcp-manager)由维护者 nekojackie 发布,在 SkillHub 上归类为 admin-security。当前 GitHub 星标为 0;package.json 版本为 0.3.2,许可证 MIT,要求 Node >=20;开发与验证环境 README 写明为 DSH 0.2.1-rc.2、Node 24。
一句话:在 DSH 内完成 MCP 服务器全生命周期——添加 / 启用 / 停用 / 移除 / 重连,OAuth 2.1 授权,可编辑的定时续期与过期后续期,并在设置页浏览每台服务器暴露的工具及描述。
与官方 mcp-client 的差异¶
下面三点是 README 里对比官方客户端时强调的能力缺口,也是本插件的定位依据:
- 多服务器:一份配置管理多台,而不是每个实例只连一个。
- OAuth 2.1:受保护资源发现、元数据、动态客户端注册、授权码 + PKCE、刷新与退出等,token 只进 DSH 凭据库。
- 续期策略:默认定时检查(每 5 分钟)、到期前提前续期(默认 10 分钟),以及 401 触发的过期自愈;策略可在 UI 修改。
核心功能¶
服务器与传输¶
支持 stdio(command / args / env / cwd)与 streamable-http(url / headers)。卡片上可看到名称、传输方式、命令或 URL、状态(connected / no-tools / disabled / error / connecting)、工具数,以及启用、刷新、重连、编辑、移除等操作。
工具浏览¶
展开某台服务器可列出全部工具:对外公共名形如 mcp__<服务器>__<工具>,附带工具描述与入参名;页面与 agent 均可查询。
OAuth 2.1¶
面向在 /.well-known/oauth-protected-resource 声明授权服务器与 required_scopes 的 HTTP MCP。流程包括 RFC 9728 发现、RFC 8414/OIDC 元数据、RFC 7591 动态注册、授权码 + PKCE S256、一次性 state、RFC 8707 resource、刷新、粘贴令牌兜底、退出授权。回调地址为 http://127.0.0.1:<DSH 端口>/api/dsh-mcp-manager/oauth/callback。
自动续期与失败退避¶
- 定时:按
refreshIntervalMs检查,在refreshLeadMs窗口内续期并重连。 - 已过期:仍有
refresh_token时下一轮必续。 - 401 自愈:
mcp__*调用被判未授权时立即续期重连(每台 30s 内最多一次,最多 3 次,30/60/120s 退避)。 - 续期失败时按 30s → 60s → 120s 退避,上限为检查间隔,避免每轮都打授权服务器。
给 Agent 的六个工具¶
| 工具 | 作用 |
|---|---|
mcp_manager_list |
列出受管服务器:传输、地址、状态、工具数、启动错误 |
mcp_manager_add |
新增或同名覆盖一台服务器(含 oauth) |
mcp_manager_remove |
移除服务器及配置 |
mcp_manager_set_enabled |
启用或停用(保留配置) |
mcp_manager_tools |
列出已注册 MCP 工具,可按服务器过滤 |
mcp_manager_oauth |
status / authorize / paste-token / refresh / refresh-all / signout |
OAuth token 仅写入 DSH 凭据库 ~/.dsh/.credentials.yaml(键如 mcp-manager/<slug>),不进配置、不进日志、不进页面明文展示。
安装与启用¶
README 给出两种方式。方式 1 是一条命令序列(需本地已有仓库目录,例如先克隆到本机路径):
git clone https://github.com/nekojackie/dsh-mcp-manager.git
dsh plugin --profile <profile> add /path/to/dsh-mcp-manager
dsh <profile>
说明:
<profile>对应~/.dsh/profiles/<名字>,桌面版一般为desktop。dsh plugin add会在 profile 里装包,并把 bundle 写入dsh.profile.bundles;mcp-manager配置由 bundle 自带 patch 插入,不必手写 YAML。- 若
dsh不在 PATH,可使用应用目录下resources/runtime/cli/bin/dsh(Windows 为dsh.cmd)。
装完后在 设置 → 插件 中应看到 MCP Server Manager(id mcp-manager,状态 active),并与「全部」页签并列出现 MCP 服务器 页签。
方式 2 是把 README 中的安装说明整段发给 DSH 助手,由助手克隆、执行 dsh plugin add、重启并核对页签;若 dsh 不可用,可改用 plugin_manager 的 install_bundle,target 指向插件目录。
典型用法¶
设置界面¶
路径:设置 → 插件 → MCP 服务器。
- 在卡片上添加或编辑服务器,选择
stdio或streamable-http并填好命令或 URL。 - 需要 OAuth 时编辑服务器,勾选使用 OAuth 授权并保存;在卡片上点 授权(浏览器),在浏览器完成同意后回跳,插件换取 token 并重连,工具数会随之更新。
- 在 自动续期设置 中调整检查间隔、提前续期秒数、是否「过期后仍自动续期」,保存或恢复默认。
授权成功后卡片状态会自行推进:已授权 → 正在连接 → 工具数量,一般无需手点刷新。
直接改插件 config¶
清单与续期策略保存在插件行 mcp-manager 的 config 中,例如:
- id: mcp-manager
name: dsh-mcp-manager
config:
refreshIntervalMs: 300000 # 检查周期,0 = 关闭,默认 5 分钟
refreshLeadMs: 600000 # 提前多久续期,默认 10 分钟
refreshOnExpiry: true # 过期后仍自动续期(默认开)
servers:
- name: demo
enabled: true
transport: stdio
command: npx
args: ['-y', '@modelcontextprotocol/server-everything']
env: {}
cwd: ''
toolCallTimeoutMs: 60000
failOnStartupError: false
- name: docs
enabled: true
transport: streamable-http
url: http://127.0.0.1:3000/mcp
headers: {}
oauth:
enabled: true
scopes: []
clientId: ''
服务器 name 须匹配 ^[A-Za-z0-9_-]{1,32}$,并作为工具前缀。OAuth 相关字段还包括 clientSecret、resourceMetadataUrl、authorizationServer 等,详见 README。
OAuth 授权步骤(HTTP + OAuth)¶
- 编辑服务器,勾选 使用 OAuth 授权,保存。
- 点 授权(浏览器);插件完成发现、动态注册与 PKCE,打开授权链接。
- 同意后回跳到本机 DSH 的 OAuth 回调路由。
- 插件将 token 写入凭据库并重连,工具列表可用。
已有 access token 时可用 粘贴令牌 兜底;也可 刷新令牌、全部续期 或 退出授权(删除本地授权并断开)。授权链接 10 分钟有效,state 一次性;重复打开需重新点授权。
用 Agent 工具巡检¶
安装并重启后,可让助手调用 mcp_manager_list 核对当前受管服务器清单,或用 mcp_manager_tools 按服务器查看 mcp__* 公共名与描述,避免在对话里手工拼清单。
适用场景与注意¶
适合谁:在同一 DSH profile 里维护多台 MCP(本地 stdio 与远程 HTTP)、依赖 OAuth 的 MCP 网关,或希望 token 过期前有策略、401 后能自愈重连的开发者与运维向用户。
权限与安全:插件以当前 DSH 进程权限运行;OAuth 与桥接逻辑在 Host 侧执行,页面通过仅回环的 POST /api/dsh-mcp-manager/* 与 Host 通信。clientSecret、headers、env 会留在 profile patch 中,共享机器宜优先用凭据中心环境变量。安装前请阅读仓库 安全说明 与源码;README 明确这是 AI 生成项目,生产使用前需自行审查。
已知限制(摘自 README):
- OAuth 仅支持授权码 + PKCE;需授权服务器支持动态客户端注册,否则要在表单填
clientId。不支持client_credentials、设备码等。 - 401 自愈依赖错误信息能识别为鉴权问题;若服务端只返回自定义错误,可能只能等定时续期。
- 修改清单或续期策略会重载插件,所有服务器会重连一次;单台重连用卡片上的「重连」。
- 停用的服务器不续期;续期成功会重连该服务器,约有半秒重连窗口。
SkillHub 等社区目录与 DeepSeek / 幻方无官方从属关系,插件来自社区维护者,不属于 DSH 内置组件。
结尾¶
dsh-mcp-manager 把多台 MCP 的编排、OAuth 2.1、可编辑续期策略和工具浏览放进 DSH 设置与 mcp_manager_* 工具,在沿用官方 mcp-client 子插件的前提下补齐多实例与令牌生命周期管理。