前言¶
DeepSeek Harness(dsh)是 DeepSeek 开源的智能体运行时,官方仓库把它概括成一句话:一切皆插件。模型适配、工具、会话、沙箱和网页界面,都可以在配置层增删,不必改核心源码。项目目前仍是开发者预览,接口会继续变。社区里已经出现独立的插件目录站点,把 GitHub 上带 dsh-plugin 话题的仓库集中展示;需要说明的是,这类目录与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。
把外部能力接到 MCP(Model Context Protocol)上,是 DSH 里很常见的扩展方式。不少远程 MCP 走的是 Streamable HTTP,并且用 OAuth 保护入口:第一次连接要打开浏览器登录,之后用令牌维持会话。内置的 @deepseek-ai/dsh-mcp-client 能完成工具发现、命名、调用和重连,但仓库 README 写明:这条原生连接流程还缺 PKCE、动态客户端注册、浏览器授权和令牌持久化。
dsh-oauth-mcp-client 就是补这一段的插件。它在原生客户端之上接上 OAuth 2.1 授权码流程,默认连到 Springbrand 生产 MCP Gateway,也可以在 Web 界面再加其他同样支持 OAuth 与 Streamable HTTP 的服务。本文按社区目录详情页、GitHub 仓库 README(中英文)、package.json、springbrand.cordis.yml 与源码,以及官方 deepseek-ai/deepseek-harness 交叉核对后整理。
这是什么¶
dsh-oauth-mcp-client 是一款面向 DeepSeek Harness 的开发与运行时插件,由 GitHub 组织 springbrand-lab 维护。README 写明出品方是 SpringBrand,定位为面向商业服务的 AI 辅助服务市场。许可证是 MIT,主要语言是 TypeScript。package.json 里的包名是 @dsh-external/dsh-oauth-mcp-client,版本 0.1.0。社区目录把它归在「开发与运行时」。仓库创建于 2026-08-13,最近一次推送是 2026-08-14;截至 2026-08-18,GitHub 显示 8 星,目录页上的数字是 6,星标会变,以仓库页面为准。
它解决的问题很具体:给受 OAuth 保护的 Streamable HTTP MCP 服务器做一次浏览器登录,把令牌交给 DSH 的 credential service 保存,再把远端工具注册进当前 Harness。src/connection.ts 和 src/tools.ts 基于 MIT 许可下的官方 @deepseek-ai/dsh-mcp-client 改造,工具发现、命名、执行和重连行为尽量与内置客户端保持一致。
仓库自带的默认配置会连接 Springbrand 生产 MCP Gateway(https://connector.springbrand.ai/mcp)。这不是通用 MCP 管理器:它不负责本地 stdio 进程,也不提供静态 Bearer token 模式。服务端必须同时支持 OAuth 和 MCP Streamable HTTP。
核心功能¶
仓库 README 列出的能力可以分成几块,下面只写已经交叉核对过的部分。
-
OAuth 2.1 授权码 + PKCE。首次连接会打开系统默认浏览器完成登录和同意。回调监听绑在本机 loopback(
127.0.0.1),路径是/oauth/callback;callbackPort为0时由操作系统选空闲端口。源码里用xdg-open/open/rundll32拉起浏览器,授权超时默认 300000 毫秒(5 分钟)。 -
动态客户端注册。OAuth 客户端元数据由插件生成,
token_endpoint_auth_method为none,授权类型包含authorization_code和refresh_token。客户端信息和令牌一起写入 DSH credential service,不落在插件仓库里。 -
Streamable HTTP 与自动重连。传输层是 MCP Streamable HTTP。连接丢失后按指数退避重连,默认开启。单次工具调用超时默认 60000 毫秒。
failOnStartupError默认为true:第一次授权、连接或工具同步失败时,插件激活会直接失败。 -
MCP 工具发现、注册和调用。远端工具按 DSH 惯例注册成
mcp__<serverName>__*。默认连接的命名空间是springbrand,README 用来自检的两个工具是:
-mcp__springbrand__search_capabilities
-mcp__springbrand__execute_capability -
Web 界面管理连接。
package.json声明了dsh.client.platform为web,并注入设置页相关的 client 插件。打开 设置 → 插件 → MCP 连接,可以看到实时状态和已经注册的能力。页面上的「添加并登录」会把连接永久写入~/.dsh/profiles/web/cordis.patch.yml,重启后仍然在,不需要临时的--patch。 -
默认带上 Springbrand 连接。bundle 补丁文件
springbrand.cordis.yml会同时挂上 Web 管理页和一条名为springbrand-mcp-oauth的连接。把这个 bundle 加进 profile 时,默认 MCP 连接也会一起加上,不必再单独做一次 MCP 注册。
配置字段以 README 和 springbrand.cordis.yml 为准:
| 字段 | 说明 | 默认值 |
|---|---|---|
serverName |
注册到 DSH 的工具命名空间 | springbrand |
url |
HTTPS Streamable HTTP MCP 地址 | https://connector.springbrand.ai/mcp |
credentialRef |
DSH credential 引用名 | SPRINGBRAND_MCP_OAUTH_PRODUCTION |
scope |
可选 OAuth scope | 由服务端发现 |
callbackPort |
本地回调端口;0 表示自动选择 |
0 |
authorizationTimeoutMs |
浏览器授权超时 | 300000 |
toolCallTimeoutMs |
单次 MCP 工具调用超时 | 60000 |
failOnStartupError |
首次连接失败时终止激活 | true |
reconnect |
指数退避重连策略 | 已启用 |
serverName 必须匹配 ^[A-Za-z0-9_-]{1,32}$,同一个 DSH 进程里不能重复。源码还要求:URL 必须是 HTTPS(本机 loopback 开发可用 HTTP),地址里不能带用户名密码,也不能自行配置 Authorization header——这条头由 OAuth 客户端管理。
安装与启用¶
社区目录详情页给出的安装命令是:
dsh plugin add github:springbrand-lab/dsh-oauth-mcp-client
如需可复现安装,目录页建议固定 commit 哈希:
dsh plugin add github:springbrand-lab/dsh-oauth-mcp-client#<commit>
仓库 README 目前写得更保守:这个仓库没有发布到 npm,推荐先克隆、构建,再把本地目录装进 web profile。
git clone https://github.com/springbrand-lab/dsh-oauth-mcp-client.git
cd dsh-oauth-mcp-client
corepack enable
pnpm install
pnpm build
然后:
PLUGIN_DIR="$PWD"
npx --yes @deepseek-ai/dsh@latest plugin --profile web add "$PLUGIN_DIR"
npx --yes @deepseek-ai/dsh@latest web
两条路径不要混着理解。目录命令是社区目录页的原文;README 则强调当前要以本地 checkout 安装,因为包还不在 npm 上。实际装之前以仓库 README 为准,装完再看 Web 界面里有没有出现 MCP 连接页。
前置条件按 README 核对如下:
- Node.js 22.19 或更高版本
- Git
- 首次 OAuth 登录所需的浏览器
- 使用 web profile(
npx @deepseek-ai/dsh web)
目录页有一条固定提示:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前应检查源代码仓库和许可证。
首次启动会打开浏览器做 Springbrand 登录和授权。授权成功后,打开 设置 → 插件 → MCP 连接,即可查看实时状态和已经注册的能力。
典型用法¶
默认连接装好并完成授权后,可以直接让 Agent 搜索 Springbrand 的 capability 目录。README 给的例子是:
搜索 Springbrand 市场中的资源,并列出前 10 个。
正常调用流程是:先调 search_capabilities,再把返回的完整 name 交给 execute_capability。README 举的完整名是 platform:springbrand@0:springbrand.resources.list,不要改用较短的 action_id(例如 springbrand.resources.list)。插件会把这条工具选择规则写进 Agent 的 system prompt,用户按自然语言提需求即可,不必手动指定工具名。
如果要接其他 OAuth MCP 服务,打开 设置 → 插件 → MCP 连接,填写唯一的服务名和 HTTPS MCP 地址,点 添加并登录,在自动打开的浏览器里完成 OAuth。页面随后显示实时状态和实际注册的工具。点 移除 会卸载对应工具,并在永久 profile 里删除或停用该连接。
Web 页面是默认配置方式。如果需要手写,把连接加到同一个文件 ~/.dsh/profiles/web/cordis.patch.yml:
- insert:
- id: my-oauth-mcp
name: '@dsh-external/dsh-oauth-mcp-client'
config:
serverName: my-mcp
url: https://mcp.example.com/mcp
credentialRef: MY_MCP_OAUTH
failOnStartupError: true
serverName 会成为工具名的一部分,例如 mcp__my-mcp__search。对端必须支持 OAuth 和 MCP Streamable HTTP;第一次连接同样会打开浏览器授权。
做加载级自检时,README 还提供了 headless 写法:把当前 checkout 装进 headless profile 后启动一次对话,出现提示再完成 OAuth:
PLUGIN_DIR="$PWD"
npx --yes @deepseek-ai/dsh@latest plugin --profile headless add "$PLUGIN_DIR"
npx --yes @deepseek-ai/dsh@latest --profile headless "hi"
适用场景与注意事项¶
适合已经在用 dsh web,并且需要把受 OAuth 保护的远程 Streamable HTTP MCP 接到智能体循环里的人。比较对口的情况包括:默认使用 Springbrand 市场里的 capability;或者自己有一个同样走 OAuth 2.1 + Streamable HTTP 的 MCP 网关,希望用浏览器登录一次、之后由 DSH 凭据服务保管令牌。
使用前有几条边界需要看清楚。
这个插件补的是 OAuth 客户端,不是通用 MCP 管理面板。它不拉起本地 stdio 进程,也不提供「只填环境变量里的 Bearer token」那种静态认证。对端如果不支持 OAuth,或不走 Streamable HTTP,这条连接路径对不上。
OAuth 状态由 DSH credential service 保存,回调只监听本地 loopback。不要在配置里写 Authorization header,也不要把 access token、refresh token 或导出的 credential 数据提交进仓库。URL 除了本机 loopback 开发,必须使用 HTTPS。
failOnStartupError 默认为 true。第一次授权没完成、浏览器超时,或工具同步失败时,插件会拒绝激活,而不是带着半残连接继续跑。授权超时默认五分钟,需要可交互的本机浏览器。
插件以当前 dsh 进程的权限运行。安装社区插件前,应先看源码和许可证;需要可复现环境时,把安装命令钉到具体 commit。社区目录是独立站点,安装命令以目录页和仓库原文为准,不要凭插件名自行拼接。DeepSeek Harness 仍处于开发者预览,核心插件和 API 还会变,装完如果对不上界面文案,以当时仓库 README 为准。
小结¶
dsh-oauth-mcp-client 在 DeepSeek Harness 原生 MCP 客户端之上补上了 OAuth 2.1:授权码 + PKCE、动态客户端注册、浏览器登录、本地回调、令牌持久化和断线重连。装进 web profile 后,默认连上 Springbrand 生产 MCP Gateway,也可以在 设置 → 插件 → MCP 连接 里再加其他同样支持 OAuth 与 Streamable HTTP 的服务。它是社区 MIT 项目,当前未发布到 npm;装之前检查仓库,令牌按 DSH 凭据来保管,不要写进配置文件。
目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/dsh-oauth-mcp-client/
GitHub:https://github.com/springbrand-lab/dsh-oauth-mcp-client