Skip to content

dsh-mcp-setting

Verified

dsh-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 文件。