dsh-mcp-setting
Verifieddsh-mcp-setting · v0.1.5 · MIT · Web UI
DeepSeek Harness 设置界面管理 MCP 服务器:增删改 cordis.patch.yml 中的 @deepseek-ai/dsh-mcp-client 行
Install
dsh plugin add dsh-mcp-setting 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.
Creators
Readme
dsh-mcp-setting
DeepSeek Harness 插件:在「设置」界面管理 DSH 配置文件里的 MCP 服务器。
功能
设置面板新增「MCP 服务器」页面,直接增删改 cordis.patch.yml 中的
@deepseek-ai/dsh-mcp-client 行:
- 列表:展示
$DSH_HOME/cordis.patch.yml(主配置)与$DSH_HOME/profiles/<name>/cordis.patch.yml(各 profile 补丁)中的全部 MCP 服务器, 标注来源与端点摘要。 - 连接状态:每台服务器实时显示状态徽标(已连接 · 工具数 / 未连接 / 启动失败 /
加载中 / 其他 profile 未加载),页面每 5 秒静默刷新。状态由加载器 fiber 与工具
注册表(
mcp__<serverName>__*前缀)推断,不依赖 mcp-client 内部实现;断线重连的 退避窗口内可能短暂显示「已连接」。 - 开关:每台服务器自带启用/停用开关,写入 loader 行的
disabled标志; DSH 的配置热加载会即时停用/恢复该服务器(无需重启)。 - 重启:页面顶部「重启 DSH」按钮(两次点击确认),以原命令行重新拉起 DSH 进程,页面自动刷新等待应用恢复。
- 新增:写入主配置文件(
$DSH_HOME/cordis.patch.yml),自描述头注释自动补齐。 - 编辑 / 删除:作用于服务器所在文件;空掉的
insert补丁条目一并移除。 - 校验:与
@deepseek-ai/dsh-mcp-client的配置契约一致(id / serverName 唯一且 匹配命名规则,stdio 必须填写 command,streamable-http 必须填写 url),错误直接 拒绝写入并返回中文提示;编辑时保留表单未展示的字段(reconnect、 toolCallTimeoutMs 等),切换传输方式时自动清理另一侧的字段。 - 安全:所有写操作仅允许本机回环访问;每次写入前保留
.bak备份,临时文件 + 改名原子落盘;yaml文档级编辑,未触碰的注释与!!js表达式原样保留。
增删改与开关都会写入
cordis.patch.yml,DSH 的配置热加载(profile 与主配置的cordis.patch.yml监视)即时生效;完整重载可使用页面上的「重启 DSH」。
兼容性
当前版本面向 DSH 0.2.0-rc.2(npm 上的 next 发布线,也是桌面版当前运行的版本;
peer 依赖统一声明为 ^0.2.0-rc.2):
| 依赖 | 声明 | 说明 |
|---|---|---|
@deepseek-ai/dsh-* |
^0.2.0-rc.2 |
随 DSH 发布线同步升级 |
@deepseek-ai/cordis |
^4.0.4 |
0.2.0-rc.2 的 DSH 包要求 ~4.0.4 |
@deepseek-ai/schemastery |
^3.18.4 |
同上,避免与宿主内的 schema 版本漂移 |
DSH 会拒绝安装或激活 DSH peer 依赖不满足当前运行版本的插件,并提示「……与 DSH x.y.z
不兼容(要求 …),运行它可能导致崩溃或数据丢失」。判定逻辑在
@deepseek-ai/dsh-app-boot 的 evaluatePluginCompatibility:逐个检查
@deepseek-ai/dsh / @deepseek-ai/dsh-* 形式的 peer 依赖,任一
semver.satisfies(运行时版本, 区间, { includePrerelease: true }) 为假即拒绝;
运行时版本取自 app-boot 包自身的 package.json。因此 0.1.3 声明的
^0.1.2-alpha.1 不接受任何 0.2.x 运行时,在 DSH 0.2.0-rc.2 上会被拒绝。
升级 DSH 后必须同步把本插件的 peer 区间改到同一发布线并重新发布。
兼容性由三道检查守住
pnpm test # tests/compatibility.spec.ts:用与 DSH 相同的判定复核 peer 声明
pnpm typecheck # 对着 node_modules 中真实的 0.2.0-rc.2 类型编译 src/
pnpm smoke # 真实 src/index.ts + 临时 DSH home,端到端跑一遍 API 路由
pnpm smoke:client # 真实 lib/client.js 走 __ModuleLoader__,核对平台模块表
tests/compatibility.spec.ts用与 DSH 相同的判定复核package.json的 peer 声明,并校验dsh.client.inject中的每个 DSH 客户端包都有对应的 peer 声明, 避免同类不兼容再次漏到用户侧。pnpm smoke导入真实的src/index.ts,在一个临时$DSH_HOME上跑通 列表 / 新增 / 编辑 / 开关 / 删除 / 回环校验,覆盖ctx.webServer.register、ctx.effect、resolveDshHome等 0.2.0-rc.2 接口。pnpm smoke:client在 Node 中执行构建产物lib/client.js,断言它只从 平台模块表(react、react/jsx-runtime、@deepseek-ai/dsh-client-store) 取模块,并按 0.2.0-rc.2 的slots/locale契约注册设置页。
依赖安装有一条容易踩的坑:本仓库旁边若有
deepseek-harness检出,pnpm 默认会把@deepseek-ai/*链接到那份本地工作区,于是typecheck与test实际校验的 是另一条发布线(例如 0.1.7-rc.1)而不自知。仓库根的.npmrc用link-workspace-packages=false关掉了这个行为,auto-install-peers=false则避免为 peer 再装一份未钉版本的副本。
安装
快速安装(推荐)
插件已发布到 npm:dsh-mcp-setting。一条命令安装到目标 profile(如 web):
pnpm dsh plugin --profile web add dsh-mcp-setting
该命令在 profile 目录执行 pnpm add,并自动把声明了 dsh.bundle 的
dsh-mcp-setting 加入 dsh.profile.bundles。重启 DSH 后插件随 bundles
自动装配(包内 cordis.patch.yml 自插入插件行),浏览器打开设置 →
MCP 服务器。
移除:
pnpm dsh plugin --profile web remove dsh-mcp-setting
从旧版本升级:0.1.3 及更早的版本把 peer 区间声明为
^0.1.2-alpha.1,在 DSH 0.2.x 上会被判定为不兼容而拒绝激活。0.1.4 已修好区间;0.1.5 进一步对齐了 cordis 与 schemastery 的宿主版本。发布后在目标 profile 执行:pnpm dsh plugin --profile web add dsh-mcp-setting@^0.1.5重启 DSH 后生效;
~/.dsh/profiles/<name>/package.json中的版本号应变为 0.1.5。
本地开发挂载
pnpm install && pnpm build # 编译 lib/
# 或使用注入器生产线:dev_build_plugin → dev_install_package(web profile)
挂载后浏览器刷新页面,设置 → MCP 服务器。
开发
pnpm test # vitest(patch-editor 纯逻辑 + controller fetch 桩 + DSH 兼容性契约)
pnpm typecheck # tsc,对着 node_modules 中真实的 DSH 0.2.0-rc.2 类型
pnpm build # tsc 编译 host + tsdown 打包 client
pnpm smoke # 真实 Host 半边 + 临时 DSH home,跑通 API 路由
pnpm smoke:client # 真实 client 产物,走 __ModuleLoader__ 载入(需先 pnpm build)
结构
src/index.ts— Host 半边:/dsh-mcp-setting/api/*路由(webServer),文件读写与校验。src/patch-editor.ts— 纯函数:patch 文档的增删改查与配置校验(可单测)。src/client/— Client 半边:settings.section槽位注册、fetch 传输、 React 设置页(zh/en)。tests/— 单元测试(纯逻辑与契约,不导入插件主体)。scripts/— 冒烟脚本:smoke-host.spec.ts用桩上下文跑真实 Host 半边,smoke-client.mjs在 Node 中执行构建后的 client 产物。
协议
本项目以 MIT License 发布(Copyright © 2025 belowthetree),详见 LICENSE 文件。