前言¶
在 DSH 里接多个 MCP 上游时,常见做法是在本机单独跑一个聚合网关进程,再在客户端或宿主里填地址和 token。Python 版 mcpp 就是这样的网关:读同一份 config.yaml,把 Streamable HTTP 与 stdio 子进程收成若干 toolset,并按 Claude Code、Cursor、OpenCode 等客户端各自的 naming 暴露端点。进程多一层,配置和鉴权也要多维护一条链路。
dsh-mcpp 把这套网关按 Cordis 插件形态重写在 DSH 宿主侧:对外仍可 drop-in 替代旧服务监听;对 DSH 自己则提供 mcp__<toolset>__<tool> 原生工具、侧栏管理页,以及按 preset 过滤的作用域工具面。下面介绍它做什么、怎么装、日常怎么用。
这是什么¶
- 名称:dsh-mcpp(仓库 Joe-zhouman/dsh-mcpp)
- 维护者:Joe-zhouman
- 分类:工作流(社区目录 SkillHub 条目)
- 当前版本(package.json):0.3.0
一句话:MCP++ 聚合网关的 DSH 插件版——同一端口与 config.yaml 的 HTTP 网关能力保留,同时在宿主内注册可选中的 mcp__* 工具、提供同源管理 UI,并支持 dsh-mcpp/scoped 为 agent preset 单独挂载工具子集。
旧 Python 服务退场后,监听 127.0.0.1:9020 上 /api/*、/admin 与 /{toolset}/{naming}/mcp 的可以是本插件;现有 Claude Code / Cursor / OpenCode / Codex 等配置(路径、auth.token)原则上无需改动。
对外 HTTP 网关(v0.1)¶
插件读取与旧服务相同的 YAML 字段:upstreams、expose、server_name、auth、clients。上游 MCP 被聚合成 toolset,每个 toolset 可按多种 naming mode 暴露,例如:
| 路径 | 工具公开名模式 |
|---|---|
/{toolset}/claude/mcp |
mcp__{toolset}__{tool} |
/{toolset}/cursor/mcp |
mcp_{toolset}_{tool} |
/{toolset}/opencode/mcp |
{toolset}_{tool} |
/{toolset}/coder/mcp |
{toolset}__{tool} |
/{toolset}/codex/mcp |
{toolset}::{tool} |
/{toolset}/default/mcp |
{tool} |
还支持工具面改写(as: 改名、hide: true、分组、params 的 map_from / enum / preset 等)、上游密钥池轮转与不健康标记,以及 /api/config、/api/tools、/admin 等管理接口与页面。网关支持 bearer 鉴权(header、?token=、mcpp_token cookie);clients: 可逐 naming 关停端点。
DSH 原生工具面(v0.2)¶
对 DSH 主 agent,被选中的工具以 mcp__<toolset>__<tool> 注册进 ctx.tools,调用直连上游,不再经第二层 MCP 转发。
- 默认全关。启用列表写在
<DSH_HOME>/storages/mcpp/selection.json,形态类似{ "version": 1, "enabled": ["search/searxng_search", …] }。 - 在 DSH 设置页 「MCP 工具」 按 toolset 或单工具勾选后保存,差量注册/注销,无需重启。
- 侧栏 「MCP 网关」 页签通过 iframe 加载管理页(
dsh-better-sidebar同源集成)。 - 其他插件可通过
ctx.mcpp服务调用:catalog()、call(name, args, signal?)、upstreams()、toolsets();调用不要求该工具已被主 agent 选中。
同源路由走 DSH 宿主 webServer,受浏览器信任围栏保护,不向未授权浏览器暴露网关 token。主要路径包括:
GET /plugins/mcpp/admin— 管理页/plugins/mcpp/api/*— 与 9020 同一套 admin handlerGET /plugins/mcpp/ui/catalog、POST /plugins/mcpp/ui/selection、POST /plugins/mcpp/ui/sync
同名工具若与其它插件(例如另配的 mcp-client)冲突,仅出现在设置页「注册失败」列表,不影响其它工具注册。
预设作用域工具面(v0.3)¶
通过包导出子路径 dsh-mcpp/scoped,可在 agent preset 配置里按 tools / toolsets / exclude 过滤,只把选中的 mcp__* 注册进该 preset 自己的 scope(主 agent 看不到)。调用仍复用宿主网关的上游连接,不再走第二道 MCP。
安装与启用¶
官方说明见仓库 INSTALL.md。README 概括的流程如下(非 dsh plugin add 一类命令,需按 profile 手工接入):
- 在插件目录执行构建,得到
lib/(含client.js)与static/。 - 将
lib/、static/以及cordis.patch.yml一并拷入目标 profile 的node_modules/dsh-mcpp(package.json的files必须包含这三类,否则 profile 组合校验会拒绝启动)。 - 在该 profile 的
package.json增加对dsh-mcpp的依赖,并配置dsh.profile.bundles。 - 在
cordis.patch.yml增加按插件 id 的config行。 - 重启对应 DSH 端。
构建与测试(维护者文档中的示例,路径需按本机调整):
node --test --experimental-strip-types test/*.test.mjs
node ../../node_modules/tsdown/dist/run.mjs --config tsdown.config.mjs --config-loader native
脱离 DSH 仅验证网关时,可用候选端口避免占用 9020:
node --experimental-strip-types scripts/run-standalone.mjs <path-to-config.yaml> 9021
典型用法¶
外部 MCP 客户端(drop-in)
保持原有 config.yaml 与 auth.token,将客户端指向插件提供的 127.0.0.1:9020(或宿主实际监听地址)及既有 /{toolset}/{naming}/mcp 路径即可。
DSH 内勾选工具
在设置页「MCP 工具」勾选后保存;等价于更新 selection.json 并触发 POST /plugins/mcpp/ui/selection 一类同步。侧栏「MCP 网关」用于查看上游、暴露项与密钥等管理功能。
其它 Cordis 插件调用网关
在插件代码中通过宿主注入的 ctx.mcpp.call(name, args) 调用目录中的任意工具,无需先加入主 agent 的 enabled 列表。
Preset 限定工具集
在 profile 中为子 agent 依赖 dsh-mcpp/scoped,在 preset 配置里声明 tools / toolsets / exclude,仅该 preset 可见对应 mcp__* 工具。
适用场景与注意¶
适合
- 已从 Python mcpp 迁出或计划退役独立网关进程,希望 DSH 同源承担聚合与管理。
- 需要在 DSH 主对话里按需开启部分 MCP 工具,而不是把整站上云给默认 agent。
- 需要为不同 preset(子 agent)挂载互不干扰的 MCP 工具子集。
注意
- 插件以当前 DSH 进程的权限运行上游 stdio 子进程与 HTTP 出站;安装前请阅读源码与许可证,并核对
config.yaml中的上游与密钥配置。 - 与旧 Python 服务在少数错误路径上响应码有文档化差异(例如非法 JSON body:本插件 400 + JSON-RPC
-32700,旧服务 500);其余行为以仓库test/fixtures/golden/与集成测试为准。 - 社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系;DSH 生态原则是「一切皆插件」,本介绍事实以 GitHub README 与 INSTALL.md 为准。
结尾¶
dsh-mcpp 把 MCP 聚合网关收进 DSH:对外保持路径与配置兼容,对内提供可选 mcp__* 工具、侧栏管理与 preset 作用域。若你正在维护 mcpp 类部署或 DSH profile,可从目录页与仓库继续跟进安装细节与测试结果。
- 目录页:https://www.skillhub.cn/plugins/Joe-zhouman/dsh-mcpp
- GitHub:https://github.com/Joe-zhouman/dsh-mcpp