用 dsh-mcp-manager 在 DeepSeek Harness 设置页管理 MCP 服务器

前言

DeepSeek Harness(dsh)是 DeepSeek 开源的智能体运行时,官方仓库把它概括成一句话:一切皆插件。模型适配、工具、会话、沙箱和网页界面,都可以在配置层增删,不必改核心源码。项目目前仍是开发者预览,接口会继续变。社区里已经出现独立的插件目录站点,把 GitHub 上带 dsh-plugin 话题的仓库集中展示;需要说明的是,这类目录与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。

日常用 dsh web 跑智能体时,很多人会把外部能力接到 MCP(Model Context Protocol)上:远程 HTTP 服务、本机用 npx / uvx 拉起的进程,都算常见接法。DSH 自带的 @deepseek-ai/dsh-mcp-client 能挂静态 headers,但仓库 README 写明了两处缺口:没有 OAuth,也没有本地 stdio 传输。需要浏览器登录的远程 MCP,或者一条命令在本机起一个 MCP 进程,都得另找办法。

dsh-mcp-manager 把这件事收进 Web 界面的 设置 → MCP 页:添加一次服务器,HTTP 可以走浏览器 OAuth 或环境变量里的静态 token,stdio 可以直接拉起本地进程,工具再按 DSH 惯例注册成 mcp__<服务器名>__*。本文按社区目录详情页、GitHub 仓库 README(中英文)、package.json,以及官方 deepseek-ai/deepseek-harness 交叉核对后整理。

这是什么

dsh-mcp-manager 是一款面向 DeepSeek Harness Web 界面的开发与运行时插件,由 hyqhyq3 维护,采用 MIT 许可证,主要语言是 JavaScript。社区目录把它归在「开发与运行时」,收录日期是 2026-08-06。仓库创建于 2026-08-13;截至 2026-08-18,GitHub 显示 7 星,目录页上的数字是 6,星标会变,以仓库页面为准。package.json 里的版本是 0.6.0

它解决的问题很具体:在设置页里集中管理 MCP 服务器,补上内置客户端缺的 OAuth 与本地 stdio。HTTP 服务器支持授权码 + PKCE,并按 RFC 7591 做动态客户端注册;没有 OAuth 的服务则用环境变量名引用 Bearer token,明文不写进配置。stdio 服务器由插件自己 spawn 子进程,走 stdin/stdout 上的 JSON-RPC。工具既可以直接暴露给模型,也可以打开可选的按需 broker,把模型侧表面收成三个固定工具。

核心功能

仓库 README 列出的能力可以分成几块,下面只写已经交叉核对过的部分。

  1. 设置页管理。client 半在 settings.section 槽位挂一个 MCP 页签。添加、就地编辑、启用/禁用、删除都在同一页完成:可以改名字、在 stdio 与 HTTP 之间切换、改认证方式和标头,不必删掉重建。状态徽章包括 已连接 (N 个工具)待认证认证中错误已禁用。禁用会注销该服务器的工具并断开连接,配置和 OAuth token 仍保留;再启用时自动重连,不必重新登录。

  2. OAuth(授权码 + PKCE)。host 半做动态客户端注册和 PKCE,回跳落在 DSH GUI 自己的 webserver 上,路径形如 http://127.0.0.1:<端口>/mcp-manager/callback/<id>。origin 从浏览器实际地址派生,GUI 用哪个 host/port 访问都可以。登录一次之后,refresh_token 会轮换,重启后自动重连。每个 GUI origin 对应一次客户端注册;GUI 换地址后,下次登录会重新注册。

  3. 静态 Bearer token。没有 OAuth 的 HTTP 服务器走 Codex 风格的 tokenEnv:配置里只写环境变量名称(例如 MCP_BEARER_TOKEN),token 本身不落盘。还可以配 headers(直接值)和 headerEnv(值从环境变量读),对齐 Codex 的 http_headers / env_http_headers

  4. stdio 本地进程。命令可以是 npxuvxpython 等,插件负责拉起、重连,退出时回收子进程。Windows 下经 cmd.exe 启动,以便解析 npx.cmd 这类 shim。HTTP 走 Streamable HTTP(POST JSON-RPC、Mcp-Session-Id、SSE 或 JSON 响应)。

  5. 工具注册与按需 broker。默认把已连接服务器的工具注册成与内置客户端相同的 mcp__<服务器名>__* 名称,并对 JSON Schema 做注册表支持的清洗。页面顶部有一个「按需 MCP 工具调用」开关,默认关闭;打开后,Native 模式的 agent 只看到 mcp_search_toolsmcp_describe_toolmcp_execute_tool 三个 broker,原始 mcp__* 不再出现在模型请求里,直接调用也会被拒绝。该开关对整个 profile 生效,重启后保持。stdio 和 Streamable HTTP 收到 notifications/tools/list_changed 时,只更新新增、删除或 schema 变化的注册。

  6. 工作区隔离。全局服务器对所有工作区可见;工作区服务器写在 <工作区>/.dsh/dshmm/mcp.json,工具只注册进工作目录解析到该工作区的会话。选中某个工作区后,可以用「隐藏」屏蔽指定的全局服务器。serverName 在全局和所有工作区来源之间必须唯一,重复会被标成冲突并跳过。手改 mcp.json 会被热重载;JSON 无效时界面报错,继续使用上一次有效配置。工作区 OAuth token 仍写在 ~/.dsh/mcp-manager.json,不进声明式的 mcp.json

状态文件是 ~/.dsh/mcp-manager.json:服务器配置、OAuth 客户端注册信息和 token 都在这里。静态 token 只保存环境变量名。

安装与启用

社区目录详情页给出的安装命令是:

dsh plugin add github:hyqhyq3/dsh-mcp-manager

仓库 README 写得更完整,因为这个插件声明了 dsh.client.platformweb,需要挂到 web profile:

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

装完后重启 dsh --profile web 并刷新页面。包内声明了 dsh.bundle.patch,插件会自动激活,不必手改 cordis.patch.yml

如需可复现安装,目录页建议固定 commit 哈希:

dsh plugin add github:hyqhyq3/dsh-mcp-manager#<commit>

前置条件按 README 核对如下:

  • DeepSeek Harness 使用 web profile(npx @deepseek-ai/dsh web
  • Node.js ^22.19>=24PATH 里有 pnpm
  • Windows 10/11 上跑 stdio 时,命令经 cmd.exe 启动

目录页有一条固定提示:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。

OAuth 还要求 MCP 服务器的授权方允许回环重定向。回调由 DSH GUI 自己的 webserver 接收,不是另开一个端口去猜。

典型用法

打开 DSH Web UI 的 设置 → MCP,点 + 添加 MCP 服务器

作用域选 user 时,服务器对所有工作区可见;选 workspace 时,从第二个下拉框指定工作区,配置写入该工作区的 .dsh/dshmm/mcp.json

HTTP 需要填名称(决定 mcp__<名称>__* 前缀)、URL、认证方式(OAuth 或静态 token),以及可选标头。OAuth 服务器保存后点 去认证,浏览器打开登录页,同意后跳回,工具会立刻注册。静态 token 只填环境变量名,例如 MCP_BEARER_TOKEN

stdio 需要填名称、命令、逐行参数、可选环境变量和工作目录。保存后插件会立即拉起本地进程并连接。

按需模式关闭时(默认),名为 odin 的服务器会把工具直接暴露给 agent,README 给的例子是:

mcp__odin__search_tools     mcp__odin__describe_tool
mcp__odin__execute_tool     mcp__odin__list_tool_scopes

打开按需模式后,Native agent 只看到三个 broker:

  • mcp_search_tools({ query, server?, limit? }):默认最多 10 条轻量结果,硬上限 20;查询词按服务器名 +2、工具名 +3、描述 +1 计分
  • mcp_describe_tool({ name }):返回当前会话可见工具的描述和输入 schema
  • mcp_execute_tool({ name, arguments }):走 DSH 标准工具流水线执行;建议先 describe,但不强制

工作区配置也可以手写。README 给的 mcp.json 示例如下:

{
  "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"]
}

type 缺省为 http;stdio 的 cwd 缺省为工作区根。exclude 列出要在此工作区隐藏的全局服务器名称。已在 DSH 注册的工作区,也可以在 UI 里直接增删改,效果与手改文件相同。

适用场景与注意事项

适合已经在用 dsh web,并且需要把 MCP 接到智能体循环里的人。比较对口的情况包括:远程 MCP 必须走浏览器 OAuth;本机用 npx / uvx / python 起一个 stdio 服务器;希望按项目隔离 MCP,而不是所有工作区共用一套全局配置;MCP 工具很多,想用按需 broker 把每轮请求里的 schema 收窄。

使用前有几条边界需要看清楚。

插件只桥接 MCP 的 tools,不桥接 resourcesprompts。按需过滤目前只针对 DSH 默认的 native 呈现;使用 codeboth 的 agent 会保留完整 MCP 目录,避免生成式 SDK 不完整,或误拦 Code Mode 子调用。

OAuth token 以明文 JSON 存在 ~/.dsh/mcp-manager.json 里,README 要求把这个文件当机密。静态 token 和 headerEnv 的值从环境变量读取,不落盘。工作区 OAuth token 也在同一状态文件,不写进 mcp.json

stdio 服务器是随插件生命周期存活的常驻子进程。POSIX 下 args 按空格分词,引号可以保护含空格的参数,但没有 shell 展开。Windows 下整条命令行交给 cmd.exe&|>%VAR% 会被解释,仓库建议用绝对路径,并为含空格的参数加引号。

插件以当前 dsh 进程的权限运行。安装社区插件前,应先看源码和许可证;需要可复现环境时,把安装命令钉到具体 commit。社区目录是独立站点,安装命令以目录页和仓库原文为准,不要凭插件名自行拼接。

小结

dsh-mcp-manager 把 MCP 服务器的添加、认证、启停和工作区隔离收到 DeepSeek Harness 的设置页里,补上了内置客户端没有的 OAuth(PKCE + 动态客户端注册)和本地 stdio。工具默认按 mcp__<名称>__* 注册,也可以打开按需 broker,让 Native 模式只看到三个固定入口。它是社区 MIT 项目,不是官方内置能力;装之前检查仓库,OAuth 状态文件按机密保存。

目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-mcp-manager/

GitHub:https://github.com/hyqhyq3/dsh-mcp-manager

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

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

小夜