dsh-mcp-manager:为 DSH 补齐 OAuth 与 stdio 的 MCP 管理插件

前言

在 DeepSeek Harness(DSH)里接 MCP 服务器,内置的 @deepseek-ai/dsh-mcp-client 只支持在配置里写静态 headers,没有 OAuth,也不支持本地 stdio 进程。远程服务要 OAuth 登录、本地工具要用 npx / uvx 起子进程时,就得自己改配置或绕路。

dsh-mcp-manager 是社区维护者 hyqhyq3 发布的 DSH 插件,在 Web UI 的 Settings → MCP 页面集中管理 MCP 服务器:HTTP 远程服务可走浏览器 OAuth 或静态 Bearer token,本地服务可走 stdio,工具按 mcp__<name>__* 命名注册到 DSH 工具表。下面介绍它的定位、能力与用法。

这是什么

dsh-mcp-manager(GitHub:hyqhyq3/dsh-mcp-manager,当前版本 0.6.0,MIT 许可证)是面向 DSH web profile 的 MCP 服务器管理插件。它通过 cordis.patch.yml 自动注入,无需手改 cordis.patch.yml

分类上属于 admin-security:OAuth 凭据与服务器配置落在本地状态文件,静态 token 只记环境变量名、不落盘明文。

核心功能

OAuth 与静态 token 认证

HTTP 类型服务器支持两种认证:

  1. OAuth(authorization code + PKCE):支持 RFC 7591 动态客户端注册、refresh_token 轮换,重启后自动重连。在 UI 点 去认证 (Authenticate),浏览器完成授权后工具立即注册。回调地址为 http://127.0.0.1:<port>/mcp-manager/callback/<id>,OAuth 提供方须允许 loopback redirect;来源取自浏览器当前访问 DSH GUI 的 host/port。
  2. 静态 Bearer token:配置里填写持有 token 的环境变量名(Codex 风格的 tokenEnv),token 本身不写入配置文件。

此外支持自定义 HTTP 头:headers 写直接值,headerEnv 从环境变量读取,对应 Codex 的 http_headers / env_http_headers

stdio 本地进程

stdio 类型可直接执行 npxuvxpython 等命令,插件通过子进程 stdin/stdout 走 JSON-RPC;进程退出后会重连并回收。Windows 10/11 上通过 cmd.exe 启动,以正确解析 npx.cmd 等 shim。

就地编辑与工作区隔离

可在 UI 中重命名服务器、在 stdio 与 HTTP 之间切换、改认证或 headers,无需删后重建。

全局服务器在任意工作区可见;工作区级服务器写在 <workspace>/.dsh/dshmm/mcp.json,其工具只注册到该工作区会话。工作区配置里可用 exclude 屏蔽指定全局服务器。示例:

{
  "mcpServers": {
    "filesystem": { "type": "stdio", "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "."] },
    "unity-mcp": { "type": "http", "url": "http://localhost:8090/", "authMode": "static", "tokenEnv": "UNITY_MCP_TOKEN" }
  },
  "exclude": ["github"]
}

手改该文件会热加载;JSON 无效时显示错误,上一份有效配置继续生效。

工具注册与按需代理

默认关闭「On-demand MCP tool calls」时,每个已连接服务器的工具作为一等工具暴露,命名与内置客户端一致,例如服务器名 odin

mcp__odin__search_tools     mcp__odin__describe_tool
mcp__odin__execute_tool     mcp__odin__list_tool_scopes

开启按需模式后,模型侧只看到三个代理工具:mcp_search_toolsmcp_describe_toolmcp_execute_tool。原始 mcp__* 名不会出现在请求里,直接调用会被拒绝。mcp_search_tools 默认最多返回 10 条匹配(硬上限 20),按服务器名、工具名、描述打分。

notifications/tools/list_changed 触发时,stdio 与 Streamable HTTP 服务器只对新增、删除或 schema 变更的工具做增量刷新。

状态持久化在 ~/.dsh/mcp-manager.json(服务器配置、OAuth 客户端注册与 token;静态 token 仅存环境变量名)。

安装与启用

环境要求:

  • DSH web profile(npx @deepseek-ai/dsh web
  • Node.js ^22.19>=24,且 pnpmPATH

官方安装命令:

npx -p @deepseek-ai/dsh dsh plugin --profile web add github:hyqhyq3/dsh-mcp-manager

安装后重启 dsh --profile web 并刷新页面。包内声明了 dsh.bundle.patch,插件会自动激活。

典型用法

  1. 打开 DSH Web UI 的 Settings → MCP
  2. + Add MCP server(之后可用 编辑 / Edit 修改):
    - Scope(作用域)user 为全局;workspace 绑定单个工作区,配置写入该工作区的 .dsh/dshmm/mcp.json
    - HTTP:填写名称(成为 mcp__<name>__* 前缀)、URL、认证模式(OAuth 或 static token)、可选 headers。
    - stdio:填写名称、命令、参数(每行一个)、环境变量、可选工作目录。
  3. OAuth 服务器:点 去认证 → 浏览器登录 → 回调后工具立即注册。
  4. 静态 token 服务器:填写环境变量名(如 MCP_BEARER_TOKEN),保存后 stdio 会立即拉起并连接。
  5. 可选:在页面顶部开启 On-demand MCP tool calls;该设置按 profile 持久化,现有会话在下一次请求时生效。

状态徽标包括 connected (N tools)needs-authauthorizingerrordisabled。可对每条服务器执行认证、编辑、启用/禁用、删除。Disable 会注销工具并断开连接,配置与 OAuth token 保留;Enable 重连且无需重新认证。禁用状态跨重启保持。

适用场景与注意

适合在 DSH Web 环境里统一管理多 MCP 源的场景:需要 OAuth 的远程 HTTP 服务、仅需 Bearer token 的 API、以及本地 stdio 工具链。工作区隔离适合「全局 GitHub MCP + 某项目专用 filesystem MCP」这类组合。

使用前注意:

  • 插件以当前 dsh 进程权限运行 stdio 子进程并读写 ~/.dsh/mcp-manager.json;安装前应查看 GitHub 源码 与 MIT 许可证,确认符合你的安全策略。
  • OAuth 提供方必须支持 loopback redirect;静态 token 须事先在环境中导出对应变量。
  • 按需代理默认关闭;若工具很多、希望压缩 Native 模式下的 schema 体积,可在 Settings → MCP 顶部开启。

SkillHub 目录页(社区站点,与 DeepSeek / 幻方无官方从属关系)当前显示该插件约 11 stars、2 forks,分类 admin-security。

链接

  • 目录页:https://www.skillhub.cn/plugins/hyqhyq3/dsh-mcp-manager
  • GitHub:https://github.com/hyqhyq3/dsh-mcp-manager

经过上面的步骤,DSH 用户可以在一个 Settings 页面完成 MCP 的添加、认证、工作区隔离与工具暴露,补齐内置 MCP 客户端在 OAuth 与 stdio 上的缺口。

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

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

小夜