🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

MCP 服务开关 AbelKeithsun/dsh-mcp-switch

DeepSeek Harness
AbelKeithsun19 天前有提交已提供中文文档扫描:含敏感能力

在设置页逐个启停 MCP 服务器,改完立即生效

29.9/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/17 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add AbelKeithsun/dsh-mcp-switch
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/11/04·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/04·判据 →
还在维护吗[仓库]✓
活跃:最近一次提交在 19 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 7 处,展示前 7 条)
  • 读取本地文件
    index.js:380
    const parsed = JSON.parse(readFileSync(probeCacheFile(), 'utf8'))
  • 写入本地文件
    index.js:401
    mkdirSync(dirname(file), { recursive: true })
  • 写入本地文件
    index.js:407
    writeFileSync(temporary, payload)
  • 写入本地文件
    index.js:408
    renameSync(temporary, file)
  • 执行外部命令来自配置/变量
    probe.js:122
    const child = spawn(config.command, Array.isArray(config.args) ? config.args : [], {
  • 发起网络请求
    probe.js:238
    const response = await fetch(config.url, {
  • 发起网络请求
    probe.js:289
    fetch(config.url, {
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/dsh
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

DeepSeek Harness 插件:在「设置 → MCP 服务」里逐个开关 MCP 服务器,运行时即时生效,无需重启

README

由 DeepSeek 最新模型翻译生成
dsh-mcp-switch — Harness 的「MCP 服务」开关页 GitHub: <https://github.com/AbelKeithsun/dsh-mcp-switch> · MIT 在 DSH Web UI 的 设置 → MCP 服务 里逐个启用/停用本 profile 的 MCP 服务器,运行时热生效,不用重启 Harness。 它做什么 - 列出本 profile 里所有 @deepseek-ai/dsh-mcp-client 的 Loader 行(当前是 rea / gitnexus / superting),每行一个开关。 - 点开关 → 调宿主已有的 pluginManager Remote(setPluginEnabled)→ 写 profile 补丁 → 由 Loader 的 reload 生命周期立即卸载/挂载该 MCP 客户端进程,并同步移除/恢复它的工具。 - 显示结果:已应用 / 需重启 / 被覆盖 / 失败(含原因),以及每行的 entryId 与只读原因。
展开完整文档(README 剩余 1 节)
dsh-mcp-switch — Harness 的「MCP 服务」开关页

GitHub: <https://github.com/AbelKeithsun/dsh-mcp-switch> · MIT

在 DSH Web UI 的 设置 → MCP 服务 里逐个启用/停用本 profile 的 MCP 服务器,运行时热生效,不用重启 Harness。

它做什么

- 列出本 profile 里所有 @deepseek-ai/dsh-mcp-client 的 Loader 行(当前是 rea / gitnexus / superting),每行一个开关。
- 点开关 → 调宿主已有的 pluginManager Remote(setPluginEnabled)→ 写 profile 补丁 → 由 Loader 的 reload 生命周期立即卸载/挂载该 MCP 客户端进程,并同步移除/恢复它的工具。
- 显示结果:已应用 / 需重启 / 被覆盖 / 失败(含原因),以及每行的 entryId 与只读原因。

安装

git clone https://github.com/AbelKeithsun/dsh-mcp-switch.git
然后在 Harness 会话里用 plugin_manager 工具: action: install_bundle target: <克隆下来的绝对目录,如 /Users/you/dsh-mcp-switch>

安装会把包 link: 进 $DSH_PROFILE_DIR/node_modules 并把 @local/dsh-mcp-switch 加入 package.json 的 dsh.profile.bundles; cordis.patch.yml 里新增一行 mcp-switch。它是纯 JS 本地包,无依赖、无构建、不发布。

安装后确认:cordis_inspect_query(client Slots.listSubTree,root settings.section)的 occupants 里应出现 mcp-switch。

开发(维护者)

本仓库就是工作副本,位于 ~/Documents/workspace/open-source/dsh-mcp-switch,与 GitHub 的 origin/main 常规同步(不再借助 git subtree):

npm test # 11 项
npm run compat # 本机 DSH 版本是否在实测清单里
git add -A && git commit -m "..." && git push origin main

DSH profile 通过 link: 依赖指向本目录(install_bundle 写入),改动即时生效;但替换已安装包的代码需要重启 dsh 才会加载新的一代 JS 模块(插件管理器的 application: restart-required 就是这个意思)。

(GitHub 访问需走本机代理:HTTPS_PROXY=http://127.0.0.1:7897。)

接手 / 参与开发

- AGENTS.md — 项目级 agent 指令(DSH 会自动注入以本目录为工作区的会话): 30 秒速览、启动自检命令、硬约定、验证矩阵、发版四步、会话交接纪律。
- docs/HANDOFF.md — 交接日志(倒序):每次会话做了什么、跑了什么验证、当前版本与发布状态、未完成项、踩过的坑。新会话先读它 + git log,不要依赖聊天记录。

DSH 版本兼容(升级前必读)

声明写在哪、谁在读

DSH 的兼容校验(@deepseek-ai/dsh-app-boot 的 evaluatePluginCompatibility) 只读 package.json 里 peerDependencies 中 @deepseek-ai/dsh 与 @deepseek-ai/dsh- 的 semver 范围; engines 与 dsh.engines 都不参与校验(仅生态/市场展示)。不声明 peer = 校验被完全跳过,未来任何 DSH 版本都会静默加载。本插件声明:

| 字段 | 值 | 作用 |
| peerDependencies["@deepseek-ai/dsh"] | ^0.2.0-rc.2 | DSH 读它做校验:0.2.x 放行,0.3.0 起判定不兼容 |
| peerDependenciesMeta["@deepseek-ai/dsh"].optional | true | 只影响包管理器实参(profile 已 autoInstallPeers: false),不影响 DSH 校验 |
| dsh.engines.dsh | ^0.2.0-rc.2 | 与 peer 同步的展示用镜像 |
| dsh.testedWith | ["0.2.0-rc.2"] | 真正实测过的版本清单,npm run compat 用它判定 |

判定不兼容时的行为(源码实证):该 bundle 的行被 skip / disabled 并打印原因,不会拖垮整个 profile 启动。修复二选一:更新本插件的声明,或用 dsh plugin allow-version / 插件管理器的「精确版本豁免」显式接受风险(豁免是 插件名@版本 × 运行版本 的精确配对,记录在 $DSH_PROFILE_DIR/compatibility.json)。

升级 DSH 之后怎么迭代

npm run compat # 自动探测运行版本;不在实测清单则退出码 1
npm run compat -- 0.3.0-rc.1 # 升级前预演

退出码非 0 时,按脚本打印的清单复验这 5 个依赖面(任一变了就要改 client.js 并重新实测):

1. 客户端模块格式:window.__ModuleLoader__.load({ id, factory });
2. 设置页槽位:settings.section 是否还在、注册项 { id, order, label, locale, inject } 是否仍被接受(cordis_inspect_query,client Slots.listSubTree,root=settings.section);
3. 宿主 Remote:pluginManager.listPlugins / setPluginEnabled 的签名与返回信封 { ok, value } (client Service.listService);
4. 事件名:plugin-manager/changed、connection/reset;
5. 端到端实测:设置 → MCP 服务,关一个再开回来,确认 application: applied。

全过之后:把新版本加进 dsh.testedWith → 按需放宽/收紧 peerDependencies → 升 version → 提交并发新 Release(tag 指向最新提交)。

目录

| 文件 | 作用 |
| package.json | bundle 清单:dsh.bundle.patch + dsh.client(web,纯 JS 无构建) |
| cordis.patch.yml | 插入宿主行 mcp-switch |
| index.js | 宿主半边:不注册任何东西(操作全走已有 pluginManager Remote) |
| client.js | 浏览器半边:settings.section 里注册 MCP 服务 页(order 16) |
| tests/client.test.mjs | 行为测试:行过滤、命名回退、开关结果、错误路径、清理注册(6 项) |
| tests/compat.test.mjs | 兼容声明回归:peer 范围存在、engines 与之一致、testedWith 合法、脚本退出码(5 项) |
| scripts/check-compat.mjs | npm run compat:比对运行中的 DSH 版本与实测清单,未实测则打印复验清单并退出 1 |
| locale/{zh,en}.json | 插件管理页用的展示文案 |
| AGENTS.md | 项目级 agent 指令:启动自检、硬约定、验证矩阵、发版流程、交接纪律 |
| docs/HANDOFF.md | 会话交接日志(倒序追加,状态类信息以它为准) |

测试

npm test # 11 项:客户端行为 6 + 兼容声明 5
npm run compat # 本机 DSH 版本是否在实测清单里

测试用假的 window.__ModuleLoader__ / React / 浏览器 ctx 跑真实的 apply() 与 store,断言只挑 MCP 行、未知行回退成 patch id、四种宿主结果(applied / restart-required / overridden / ok:false / throw)都能落到页面上。

为什么有的行「被覆盖」、开不动

DSH 的 profile 组合顺序(见 @deepseek-ai/dsh 的 profile-boot):

bundle 层(dsh.profile.bundles 顺序) → profile 的 cordis.patch.yml → 机器级层 $DSH_HOME/cordis.patch.yml(对本机所有 profile 生效,优先级更高) → --patch 覆盖层

pluginManager.setPluginEnabled 只写 profile 补丁。所以声明在 $DSH_HOME/cordis.patch.yml 里的行,profile 层关不掉它——页面会显示「被覆盖」。
要让这类行可开关,把该行的 insert 段从机器级层移到 profile 补丁里($DSH_PROFILE_DIR/cordis.patch.yml)。

2026-10-16 的实际改动

rea-mcp 原本声明在机器级层 ~/.dsh/cordis.patch.yml,因此在页面里点不动。
已把它下沉到 desktop profile 补丁 ~/.dsh/profiles/desktop/cordis.patch.yml (与 mcp-gitnexus / mcp-superting 放在同一个 insert: 列表里),机器级层留空 []。

- 备份:~/.dsh/cordis.patch.yml.bak-20261016-161143、 ~/.dsh/profiles/desktop/cordis.patch.yml.bak-20261016-161143
- 代价:其它 profile(如 profiles/web)不再自动获得 rea;需要时把同一段 insert 复制进那个 profile 的 cordis.patch.yml,它也能在那个 profile 里被开关。
- 回滚:把两个 .bak- 覆盖回去即可(rea 会重新变成机器级、不可开关)。

排查

- 页面不出现:cordis_inspect_query 查 client Slots.listSubTree 的 settings.section occupants 里有没有 mcp-switch;没有就说明 client 半边没加载(看 dsh.client 清单与浏览器 console 的 slot 报错)。
- 点了没反应:页面里的错误行会带原因;也可直接调 plugin_manager 的 set_plugin(target 用 include:<patchId>)对比结果。
预览分享卡片长什么样 ↓AbelKeithsun/dsh-mcp-switch
分享 · DeepSeek Harness Hub
AbelKeithsun/dsh-mcp-switch

在设置页逐个启停 MCP 服务器,改完立即生效

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部