dsh-mcp-manager
Verified@jiuling/dsh-mcp-manager · v1.0.3 · MIT · Web UI
MCP 服务器管理器:在 DSH Web GUI 的设置界面中可视化新增 / 编辑 / 删除 / 启停 @deepseek-ai/dsh-mcp-client 配置行,直接读写当前 profile 的 cordis.patch.yml。1.0.3 起适配 DSH 0.2.1(官方删除 webRuntime 服务,信任校验改用 connection.requestRejection)。
Install
dsh plugin add @jiuling/dsh-mcp-manager Confirm the layer applied with dsh --profile default --dump-config — see the install guide.
Source
Published to npm without a public repository. Inspect the package contents before installing.
Tags
Readme
dsh-mcp-manager
在 DSH Web GUI 的设置界面里可视化地管理 MCP 服务器——新增、编辑、删除、启用/停用——
不需要手动编辑 cordis.patch.yml。
写入目标是当前 profile 的 cordis.patch.yml,并且以「最小改动」为原则:
只重写被改动的那一行 loader entry,文件里的注释与 !!js 表达式原样保留。
功能
| 能力 | 说明 |
|---|---|
| 服务器列表 | 读取当前 profile 中所有 @deepseek-ai/dsh-mcp-client 配置行 |
| 新增 | 支持 stdio 与 streamable-http 两种传输方式 |
| 编辑 | 修改名称、命令/参数/环境变量,或 url/请求头 |
| 删除 | 连带删除该行自己的注释说明块(会二次确认) |
| 启用 / 停用 | 写入 disabled: true,保留全部配置,便于随时恢复 |
| 自动备份 | 每次写入前生成 cordis.patch.yml.bak-mcp-manager-<时间戳> |
| 原子写入 | 先写临时文件再 rename,读方不会看到半截文件 |
保存后由 DSH 自己的热加载机制生效(dsh.profile.patchReload: "live" 会监听这个文件)。
页面上另有「重启 DSH」按钮作为兜底。
界面位置
设置 → 左侧「MCP 服务器」。
侧栏图标由本插件自己绘制:shell 的 navIcon(id) 是一张只认官方 id 的硬编码映射表,
且 slot 注册参数没有 icon 字段,未注册的 id 一律回退成通用齿轮。本插件给导航项打上
data-mcp-nav 标记,用 currentColor mask 画自己的 mark(跟随主题明暗)。
安装
方式一:手动部署(推荐,可离线)
构建:
cd dsh-mcp-manager npm install npm run build # 生成 lib/index.js 与 lib/client.js npm test # 39 个测试(21 个纯函数 + 18 个宿主 API 集成)复制到当前 profile 的
node_modules:$dst = "$env:USERPROFILE\.dsh\profiles\web\node_modules\dsh-mcp-manager" New-Item -ItemType Directory -Force $dst | Out-Null Copy-Item package.json, cordis.patch.yml, README.md $dst Copy-Item -Recurse lib $dst在
~/.dsh/profiles/web/cordis.patch.yml末尾追加:- insert: - id: dsh-mcp-manager name: 'dsh-mcp-manager'重启一次 DSH(首次挂载需要重启;之后的配置变更都是热加载):
dsh web
方式二:dsh plugin 命令
dsh plugin --profile web add ./dsh-mcp-manager
依赖说明
插件自身只依赖 yaml。安装到 profile 后,Node 会沿着
profiles/web/node_modules/dsh-mcp-manager/lib/ 逐级向上查找,
最终命中 DSH 全局安装里的 node_modules/yaml,因此无需额外安装。
react 不打包进产物:浏览器侧通过
window.__ModuleLoader__.load 的模块表复用宿主页面里的 React。
配置字段
| 字段 | 必填 | 说明 |
|---|---|---|
serverName |
是 | [A-Za-z0-9_-]{1,32},全局唯一。工具会注册为 mcp__<serverName>__<工具名> |
transport |
是 | stdio 或 streamable-http |
command |
stdio | 可执行文件,如 python、node、npx |
args |
stdio | 参数数组,不经过 shell 解析 |
env |
stdio(可选) | 环境变量键值对 |
url |
http | MCP 端点地址,须以 http:// 或 https:// 开头 |
headers |
http(可选) | 请求头键值对,常用于 Authorization |
enabled |
否 | 默认 true;关闭时写入 disabled: true |
failOnStartupError |
否 | 为真时,连接失败会阻止插件激活 |
设置命名空间
插件注册的设置命名空间是 dsh-mcp-manager,符合
^[a-z][a-z0-9-]*$,不使用 mcp.servers 这类带点号的格式。
命名空间内提供一个可选字段:
| 字段 | 说明 |
|---|---|
profile |
手动指定 profile 名称;留空则自动识别 |
关于 profile 自动识别
DSH 没有暴露「当前 profile 目录」的服务,所以插件按以下顺序探测, 并对每个候选都做一次真实的 YAML 解析校验:
- 设置命名空间里的
profile覆盖值; - 从插件自身安装路径向上查找最近的
cordis.patch.yml(插件被装进 profile 时,这就是那个 profile); - 启动参数中的
--profile <name>(dsh web等价于--profile web); - 扫描
$DSH_HOME/profiles/*,找挂载了本插件的层。
全部失败时页面会给出中文提示,并可通过设置里的 profile 字段手动指定。
已知边界
- 只管理
@deepseek-ai/dsh-mcp-client的行;其他插件行不会被读取或改写。 - 不使用整份文档重新序列化的方式写入(那会吃掉注释),因此不要手工把同一行拆成
YAML 多行 flow 写法——行内的
- id:与config:结构需保持常规块状缩进。 - 若同一 profile 下有两处同名
serverName,写入前的校验会拒绝保存并提示。 - 变更生效依赖热加载;若 DSH 未开启
patchReload,需点「重启 DSH」或手动重启。
开发
npm run build # tsc(宿主)+ tsc 类型检查(客户端)+ esbuild 打包浏览器产物
npm test # node --test
npm run typecheck # 只做类型检查
源码布局:
src/index.ts 宿主侧:profile 探测、文件读写、/dsh-mcp-manager/api/* 路由
src/patch-editor.ts 纯函数:按字节区间编辑 cordis.patch.yml
src/client/index.ts 浏览器侧入口:注册 settings.section 页面
src/client/navGlyph.ts 侧栏图标:打标记 + 注入 currentColor mask 样式
src/client/SettingsPage.tsx 页面组件
tools/build-client.mjs 把客户端 TS 打包成 window.__ModuleLoader__.load 形态
(PLUGIN_ID / OUT 环境变量可构建其它包名变体)
tests/patch-editor.test.mjs 21 个纯函数测试(含真实 profile 文件的字节级往返)
tests/api.test.mjs 18 个宿主 API 集成测试(真实 HTTP + 临时 profile)
lib/client.js 是生成物,不要手改:改 src/client/* 后重新构建。
构建产物里的 loader id 必须等于实际安装的包名。本包发布名是 @jiuling/dsh-mcp-manager;
若某个 profile 挂的是无 scope 的 dsh-mcp-manager,用环境变量构建该变体:
$env:PLUGIN_ID="dsh-mcp-manager"; $env:OUT="<profile>\node_modules\dsh-mcp-manager\lib\client.js"
node tools/build-client.mjs
许可
MIT