dsh-oauth-mcp:在 DSH 里完成 OAuth 远程 MCP 接入

前言

DSH 里接 MCP,常见路径是本地进程或无需登录的 HTTP 端点:工具直接注册,agent 即可调用。不少厂商把 MCP 挂在 OAuth 后面——要先发现授权服务器、走浏览器同意、保存 access token 与 refresh token,连接才能维持。

这条链路若全靠会话里手填 URL、自己保管 token,很容易断在刷新或工具命名冲突上。dsh-oauth-mcp 是维护者 lunnlew 发布的 DSH 客户端插件(社区分类 admin-security),在宿主内做 OAuth 2.1 客户端:发现授权端、PKCE 授权码流程、令牌写入宿主凭据库并续期,再把远端 MCP 工具注册为宿主工具。

这是什么

dsh-oauth-mcp 面向「需要 OAuth 才能连上的远程 MCP 服务器」。装上后你会多出三处入口:

  • 设置页「OAuth 授权管理」页签
  • 会话命令 /oauth-mcp
  • agent 工具 dsh_oauth_mcp_authorize、dsh_oauth_mcp_status

授权成功的远端工具以 mcp_oauth__<serverId>__<tool> 出现在工具表里,与宿主自带的 mcp__<server>__<tool> 前缀分离。

代码仓库:github.com/lunnlew/dsh-oauth-mcp。插件目录页:skillhub.cn/plugins/lunnlew/dsh-oauth-mcp。目录站是社区插件索引,与 DeepSeek / 幻方无官方从属关系。

当前 npm 包版本为 0.0.5(见仓库 package.json),许可证 MIT。插件在 DSH 进程权限下运行,安装前宜自行查看源码与许可证;不要假定目录页的星标或简介与仓库 README 完全一致时,以 README 与包元数据为准。

核心能力

插件侧完成的工作可以概括为四步:

  1. 授权服务器发现:按远程 MCP 与厂商元数据定位 OAuth 端点。
  2. PKCE 授权码:在浏览器完成厂商页面上的同意;回调默认 http://127.0.0.1:39271/oauth-mcp/callback,页面上不展示 token、code 或 state。
  3. 凭据托管:令牌存入宿主 ctx.credentials,由插件维持有效;配置里不保存 token。
  4. 工具桥接:已授权服务器的 MCP 工具注册为宿主可调用工具。

设置面板内置 41 家经实测的远程 MCP 厂商配置,选中后可自动填服务器地址、ID、默认 scope 与授权服务器地址;也可选手填「自定义」。

默认开启 惰性工具(lazyTools: true):未揭示前工具表只暴露入口 mcp_oauth,避免一次授权多台服务器时把数十个远端工具定义全部压进模型上下文。揭示按会话隔离,不落盘。

安装与启用

前置条件:已安装并至少运行过一次 DSH 桌面应用。package.json 要求 dsh >= 0.2.1-rc.5,Node >= 22。

从 npm 安装(常用)

在 DSH 终端执行:

dsh plugin --profile desktop add dsh-oauth-mcp

根据返回值处理:

  • application: applied —— 已生效,继续下面步骤
  • application: restart-required —— 重启 DSH 后再试

打开「设置 → OAuth 授权管理」,确认该页签存在。若缺失,先核对返回值并重启;仍无效见仓库 README「遇到问题怎么办」。

从源码或打包文件

改代码或本地调试时,可在插件目录 pnpm install 后执行 dsh plugin add <本插件目录的绝对路径>;或 pnpm pack 得到 dsh-oauth-mcp-<版本号>.tgz 再 dsh plugin add ./dsh-oauth-mcp-<版本号>.tgz。profile 指向源码目录时,改代码后重启客户端即可,无需重复装载。

典型用法

1. 添加服务器

  1. 打开 设置 → OAuth 授权管理,点「添加服务器」。
  2. 在厂商下拉选择内置条目,或选「自定义」手填;勾选 scope 后保存。
  3. 行右侧「已启用」表示插件会尝试自动连接;「已停用」则跳过。

也可在地址框直接输入厂商 URL,插件仅自动补 ID。

2. 发起授权

在会话中:

/oauth-mcp authorize <serverId | 服务器地址>

命令返回授权卡片(可点链接与可复制 URL)。在浏览器完成厂商侧同意后,插件处理回调。若端口被占用而进入 manual-only,用:

/oauth-mcp complete <serverId> <回调 URL>

GitHub、Zendesk、Slack 等八家厂商需额外步骤,见仓库 docs/vendors.md。

3. 查看状态与工具列表

/oauth-mcp status
/oauth-mcp tools

status 汇报各服务器是否已授权、过期时间、是否有 refresh token、是否已连接、工具数量;不显示令牌原文。

完整子命令:

/oauth-mcp status [serverId]
/oauth-mcp tools [serverId]
/oauth-mcp authorize <serverId | url>
/oauth-mcp complete <serverId> <url>
/oauth-mcp disconnect <serverId>
/oauth-mcp cancel <serverId>
/oauth-mcp help

4. 在 agent 里调用远端工具

授权 Linear 后,远端 list_issues 在宿主名为 mcp_oauth__linear__list_issues。可自然语言描述任务让 agent 选工具,或从 /oauth-mcp tools 复制全名点名调用。

惰性工具开启时,先让 agent 调用 mcp_oauth(可选 {"server":"notion"} 指定服务器),当轮揭示后同名工具方可直接调用;未揭示就硬调会被拦截并提示先调用 mcp_oauth。

配置要点

面板可即时修改 servers、defaultScopes、autoConnect、lazyTools。以下项在面板只读,需改宿主 profile 里 dsh-oauth-mcp 的 config:(设置 → 通用设置 → 打开配置文件),保存后宿主会重启本插件:

配置项 默认值 说明
callbackMode dedicated-port dedicated-port / host-web / manual-only
callbackPort 39271 回环监听;占用时自动降级
callbackPath /oauth-mcp/callback OAuth 回调路径
toolPrefix mcp_oauth 工具名前缀
authorizationTimeoutMs 300000 单次授权请求有效期
autoConnect true 启动时连接已启用服务器
lazyTools true 揭示后才进入工具表

改配置不断开已有令牌,但已建立的 MCP 会话会断开并在下次连接时重建。字段全集见 docs/usage.md。

适用场景与注意

适合:在 DSH 桌面环境里接 Salesforce、Notion、Linear 等要求 OAuth 的远程 MCP;希望令牌进宿主凭据库、由插件刷新,而不是把 token 写在会话或零散脚本里。

注意:

  • 插件代码与网络请求运行在 当前 DSH 进程权限 下;只安装 npm 包或审查过源码后再用于生产账号。
  • OAuth 同意发生在厂商网页,插件不代点;回调成功页也不应出现敏感参数。
  • 八家厂商与 41 家内置配置的实测细节以仓库文档为准,升级插件后重读 docs/vendors.md 与 docs/usage.md 中的故障排查表。

常见现象如设置页无「OAuth 授权管理」、面板列表为空、credential_service_unavailable、端口 39271 占用等,README 第 9 节有对照表。

结尾

dsh-oauth-mcp 把「远程 OAuth MCP」收成一条可重复路径:面板配服务器、命令行授权、令牌托管、工具以 mcp_oauth__* 进宿主,并可用惰性加载控制上下文体积。需要字段表、契约与验收清单时,直接翻仓库 docs/ 与 DESIGN.md。

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

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

小夜