DSHDeepSeek Harness的 MCP 总管理器:一个页面装好、找到、开关、改配所有 MCP 服务器 ——…
30.6/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
相关生态插件(非 dsh 原生,按其对应运行时安装)
git clone https://github.com/JokerAn/dsh-mcp-manager.git状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
生态应用
桌面端 / Web 外壳,不以 dsh plugin add 安装
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 26 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包@local/dsh-mcp-manager(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/14 16:19:02
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件发起外部网络请求
查看扫描证据(共 14 处,展示前 14 条)
- 写入本地文件index.js:529
await mkdir(dir, { recursive: true, mode: 0o700 }) - 写入本地文件index.js:530
await writeFile(join(dir, 'cordis.patch.yml'), patch, { mode: 0o600 }) - 写入本地文件index.js:531
await writeFile(join(dir, 'package.json'), manifest, { mode: 0o600 }) - 读取本地文件index.js:596
document = JSON.parse(await readFile(join(serverDir(serverId), 'cordis.patch.yml'), 'utf8')) - 读取本地文件index.js:634
parsed = JSON.parse(await readFile(managerMetadataPath(serverId), 'utf8')) - 写入本地文件index.js:684
await mkdir(serverDir(serverId), { recursive: true, mode: 0o700 }) - 写入本地文件index.js:685
await writeFile(managerMetadataPath(serverId), `${JSON.stringify(record, null, 2)}\n`, { mode: 0o600 }) - 删除本地文件递归index.js:704
await rm(dir, { recursive: true, force: true }) - 读取本地文件index.js:966
return { exists: true, text: await readFile(file, 'utf8') } - 写入本地文件index.js:976
if (snapshot.exists) await writeFile(file, snapshot.text, { mode: 0o600 }) - 删除本地文件index.js:977
else await rm(file, { force: true }) - 读取本地文件index.js:1744
raw = await readFile(file, 'utf8') - 发起网络请求client/client.js:2181
function fetch(sessionId) { - 发起网络请求client/client.js:2208
const pending = fetch(sessionId).then((names) => {
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 集中管理所有MCP服务器
- 卡片式一键安装
- 自定义stdio接入
README
由 DeepSeek 最新模型翻译生成dsh-mcp-manager
DeepSeek Harness(DSH)的 MCP 总管理器 —— 一个页面管好你所有的 MCP 服务器。
dshfind
dshfind
装 MCP、找 MCP、开关 MCP、改 MCP 参数,全在 设置 → 内置插件 → MCP 一个标签页里完成,不用再手写 cordis.patch.yml。
| 你想做的事 | 在这里怎么做 |
| 装一个 MCP | 公共目录里搜一下,点卡片上的「安装」 |
| 装 npm 上的 MCP | 输入 @scope/包名,卡片会从包的 bin 自动推导启动命令 |
| 找 MCP | 直接搜官方 MCP Registry 与 npm,可翻页、可刷新 |
| 开关 / 改参数 / 删除 | 卡片上的开关、齿轮、垃圾桶;改完保存即生效 |
| 接自己的私有 MCP | 「+ 添加」,填 stdio 或 流式 HTTP 即可 |
装好的服务器,其工具会立刻以 mcp__<名称>__<工具> 注册给模型,无需重启。
展开完整文档(README 剩余 1 节)
dsh-mcp-manager
DeepSeek Harness(DSH)的 MCP 总管理器 —— 一个页面管好你所有的 MCP 服务器。
dshfind
dshfind
装 MCP、找 MCP、开关 MCP、改 MCP 参数,全在 设置 → 内置插件 → MCP 一个标签页里完成,不用再手写 cordis.patch.yml。
| 你想做的事 | 在这里怎么做 |
| 装一个 MCP | 公共目录里搜一下,点卡片上的「安装」 |
| 装 npm 上的 MCP | 输入 @scope/包名,卡片会从包的 bin 自动推导启动命令 |
| 找 MCP | 直接搜官方 MCP Registry 与 npm,可翻页、可刷新 |
| 开关 / 改参数 / 删除 | 卡片上的开关、齿轮、垃圾桶;改完保存即生效 |
| 接自己的私有 MCP | 「+ 添加」,填 stdio 或 流式 HTTP 即可 |
装好的服务器,其工具会立刻以 mcp__<名称>__<工具> 注册给模型,无需重启。
目录 · 30 秒安装 · 为什么需要它 · 特性 · 安装 · 使用 · 工作原理 · 开发 · 已知限制
30 秒安装
在 DSH 的 插件 页面点 + 添加插件,粘贴这一行,点安装:
https://github.com/JokerAn/dsh-mcp-manager
装完完全退出并重新打开 DSH,即可在 设置 → 内置插件 → MCP 看到它。详见 安装。
公共目录与我的服务器
为什么需要它
DeepSeek Harness 原生已经能读写文件、跑 bash、抓网页、搜网络 —— 所以那些「文件系统 MCP」「fetch MCP」装了没意义。
MCP 真正的价值是接外部服务:GitHub、Slack、Postgres、Notion、各类数据库与 SaaS。而这些只有从活的注册表才找得到,手写一份精选清单永远追不上。
所以本插件不内置推荐清单,而是直接查上游:
| 数据源 | 作用 | 能力 |
| 官方 MCP Registry | 默认源 | search + cursor 翻页;条目含 remotes[](托管 HTTP)或 packages[](npm / pypi) |
| npm registry | 补充源 | 覆盖尚未进入官方注册表的包;带月下载量与质量分 |
活体目录浏览
两个源都可搜索、可翻页、可刷新,卡片上直接给出来源、包名、月下载量、评分、传输方式,让你在点安装前就能判断值不值得装。
特性
活体目录浏览
- 搜索:输入即查(350ms 防抖),显示结果总数
- 分页:跟随上游 cursor「加载更多」,跨页按 id 去重,不会出现同一服务器两张卡
- 刷新:重拉当前查询;顶部还有全局刷新
- 双源切换:Registry / npm 分段切换,保留搜索词
- 离线降级:两个源都不可达时回退内置零配置种子,并明确标注「目录服务不可用,显示离线种子」,绝不伪装成实时结果
按包名直查(搜索搜不到也能装)
有些 MCP server 的作者没有标注任何 MCP 关键词,description 里也不含 "MCP" —— 靠关键词搜索永远找不到它们。
例如 @jokeran/frontend-code-skimmer:它是真实的 MCP server(README 标题就是 "Frontend-Code-Skimmer MCP",持续依赖 @modelcontextprotocol/sdk),但 keywords 为 null、描述里没有 MCP 字样,在 npm 搜索里排名第 22 位、在 keywords:mcp 前 250 条里查无此包。
因此插件支持直接按包名查询:输入 @scope/name 会直接查 npm registry,并从该包最新版本的 bin 字段自动推导启动命令:
| 包形态 | 推导结果 |
| 单一 bin(字符串或单键对象) | npx -y <pkg> |
| 多个 bin | npx -y -p <pkg> <bin>,优先选命中 /mcp\|skimmer\|server/i 的键 |
| 没有 bin | 不出卡(宁可不显示,也不给你一张点下去必然失败的卡片) |
服务器管理
- 卡片列表:状态点(已连接 / 错误 / 停用)、传输方式徽标、开关、齿轮、删除
- 就地编辑:改参数、环境变量、显示名,保存即生效(走 bundle 重载,不需要重启)
- 显示名可中文:serverName 受 [A-Za-z0-9_-]{1,32} 限制装不下中文,所以显示名单独持久化在 bundle 旁的 manager.json,不会写进服务器配置
- 失败回滚:保存失败时磁盘文件逐字节回滚,不留半成品状态
- 只读保护:你自己手写在 cordis.patch.yml 里的服务器(如 obscura)会标为「外部配置」,只读,不会被本插件误改
自定义接入
- STDIO:启动命令 + 参数 + 环境变量 + 工作目录 + 环境变量传递
- Streamable HTTP:URL + 请求头
- 手动添加时若只填了包名,表单会给出「填入 -y <pkg>」一键按钮,省得你猜 npx 参数
斜杠唤起
- 装完即出现在 / 列表:每台服务器一行,无需为每个 MCP 写 skill
- /名称 任务 一次回车:自动组成一条指定该 MCP 工具前缀的指令并发出
- 三种写法都认:/name、//name、/@scope/name
- 不抢已有命令:回车前查宿主命令目录,与内置命令同名时让位
安装
前提:已安装 DeepSeek Harness 桌面端。
不需要克隆仓库,直接在 GUI 里安装:
1. 打开 插件 页面(左侧边栏)
2. 点右上角 + 添加插件
3. 在输入框里粘贴本仓库地址:
https://github.com/JokerAn/dsh-mcp-manager
4. 点 安装
添加插件:粘贴仓库地址即可
安装成功后:
1. 完全退出并重新打开 DeepSeek Harness(Host 侧代码变更需要重启进程才会载入)
2. 打开 设置 → 内置插件 → MCP 标签页
MCP 标签页
桌面端当前托管的 MCP 目录是 ~/.dsh/mcp-servers/,每安装一个服务器就会在其中生成一个独立的小 bundle。
其他安装方式
如果你已经把仓库克隆到了本地,也可以让智能体用 plugin_manager 工具直接装本地目录:
plugin_manager install_bundle
target: /绝对路径/dsh-mcp-manager
使用
从公共目录安装
1. 在「公共 MCP 目录」里搜索,或直接浏览
2. 零凭据的服务器点「一键安装」即可
3. 需要令牌的(如 GitHub、Slack)点安装后会弹出表单,令牌字段以密码框输入
安装任意 npm 包
1. 切到 npm 源,或直接输入 @scope/name
2. 出现「直接安装」卡片,点一下即可(命令由包的 bin 自动推导)
自定义服务器
点 + 添加,选 STDIO 或 流式 HTTP,填好保存。
使用装好的工具
装完无需重启即可使用:服务器的工具会以 mcp__<serverName>__<toolName> 注册给模型。
例如装好 everything 后直接说「用 echo 工具回个话」,模型就能调用 mcp__everything__echo。
斜杠唤起:/服务器名 任务
每装一个 MCP,输入框的 / 列表里就自动多一行同名命令,不需要为每个 MCP 手写 skill:
/frontend-code-skimmer 用 skimmer 分析 vue2click 这个项目的提交按钮
回车后,这一轮会被替换成一条明确指定该 MCP 的指令(含它的工具名前缀 mcp__frontend-code-skimmer__),然后正常发给模型。也可以只打 /frontend-code-skimmer:光标停在命令后面,补上任务再回车。
三种写法都认:
| 写法 | 说明 |
| /frontend-code-skimmer | 推荐,与服务器名一致 |
| //frontend-code-skimmer | 触发器的 URL 豁免规则让第二个斜杠保留在查询里 |
| /@jokeran/frontend-code-skimmer | npm 包名写法,@scope/ 会被自动剥掉 |
列表行会显示自定义的显示名称作为标题、服务器名作为别名,右侧是「传输方式 · 状态」。行数上限 20。
不会抢内置命令:菜单里内置命令与 skill 排在前面;回车时还会查一次宿主命令目录,若服务器名与 /plan、/model 这类已有命令同名,该行会让给原命令(否则一个叫 plan 的服务器会悄悄废掉 /plan)。
坏了会自己说:万一 / 里没出现 MCP 服务器,设置 → 内置插件 → MCP 顶部会直接写明原因(注册被拒 / 拉取服务器列表失败 + 具体错误),控制台另有一行 [dsh-mcp-manager] … 可直接复制。
工作原理
关键约束:DSH 的 Loader 用 Node 的 ESM 解析器、以每个 patch 层的 baseUrl 为锚点导入插件行,而 @deepseek-ai/dsh-mcp-client 与 @modelcontextprotocol/client 都位于 app.asar 内 —— 插件解析不到它们。
因此本插件不自己实现 MCP,而是驱动真正的 Plugin Manager:
graph LR
UI[Client 半边settings.plugins.tab] -->|Connection RPC/dsh-mcp-rpc| HOST[Host 半边index.js]
HOST -->|作者文件| FS[~/.dsh/mcp-servers/<id>/]
HOST -->|installBundle / setBundleEnabled / removeBundle| PM[真实 Plugin Manager]
REC[官方 MCP Registry] -.->|搜索活体注册表| HOST
NPM[npm registry] -.->|搜索 / 直查| HOST
PM --> REACT[DSH Loader]
REACT --> MC[官方 dsh-mcp-client]
MC -->|mcp__name__tool| TOOLS[ctx.tools]
- 一个受管服务器 = 一个生成的纯配置 bundle(package.json + cordis.patch.yml),其唯一行指向官方 @deepseek-ai/dsh-mcp-client
- 安装/重载/卸载分别走 installBundle / setBundleEnabled / removeBundle(已安装的包绝不重复 install,否则管理器会以 ambiguous-install 拒绝)
- 编辑保存前先快照文件,失败即回滚
本地路径安装实测约 370ms、离线可完成,因此「每服务器一个 bundle」在交互上完全可行。
开发
node --check index.js
node --check client/client.js
node test/host.test.mjs # 98 个用例
node test/client.test.mjs # 渲染 / 交互 / 错误映射
文件结构
| 路径 | 作用 |
| index.js | Host 半边:/dsh-mcp-rpc 频道、注册表抓取、bundle 作者与装载 |
| client/client.js | Client 半边:settings.plugins.tab 的 MCP 标签页 |
| client/catalog.json | 离线降级种子(仅零配置服务器) |
| locale/{zh,en}.json | 插件在插件列表里的显示元数据 |
| cordis.patch.yml | 装载行 |
客户端硬约束
浏览器半边在一个受限模块环境里运行,改动时请遵守:
- 只能 require('react') / require('react/jsx-runtime'),不要 require 任何 @deepseek-ai/ 包
- 样式只用 --dsw- 主题 token,不要写死颜色;class 前缀 dshmcp
- 所有可见文本走 ctx.locale.bind('dshMcpManager'),zh / en 字典 key 必须一致
- 组件渲染不得抛错(已有 ErrorBoundary 兜底)
已知限制
- 活体握手由人工确认,不是自动化验收。 安装链路本身有自动化证据(真实 Plugin Manager 下的 installBundle、生成的配置文件、listBundles 记录、推导命令 npx -y <pkg> 实测 exit 0 启动);但「安装后真实 Loader 观察到该行 active,且工具进入模型工具表」这一步,是在真实桌面上手工安装并确认的(即截图中的「已连接」与 mcp__frontend-code-skimmer__* 工具),未由自动化用例覆盖 —— 自动化环境中的 phase 是从磁盘推导的投影,不构成握手证据。
- Host 侧改动必须重启应用才生效。 插件代码由 Node ESM 按 URL 缓存;remove + install、disable → enable 都不会重新导入源码。Client 侧改动刷新页面即可。
- 自建 harness 请显式设定 DSH_HOME。 未设置时它会回退到真实 ~/.dsh,从而在 ~/.dsh/mcp-servers/ 下留下没有对应插件行的孤儿目录。插件自身按 $DSH_HOME 正确解析路径,这属于 harness 的卫生问题。
给你的 DSH 插件打上 dsh-plugin topic
DSH 的插件发现机制走 GitHub topic:任何公开仓库只要打上 dsh-plugin,就会出现在插件画廊里。
给你自己的插件加上它,别人就能搜到你:
gh repo edit <你的用户名>/<仓库名> --add-topic dsh-plugin
本仓库同时打了这些 topic,便于按关键词被检索到: dsh-plugin · deepseek-harness · dsh · mcp · mcp-server · mcp-client · model-context-protocol · cordis · deepseek · plugin
许可证
MIT预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
JokerAn/dsh-mcp-manager
DSHDeepSeek Harness的 MCP 总管理器:一个页面装好、找到、开关、改配所有 MCP 服务器 ——…
相关插件 · 市场 / 管理
插件精选列表awesome-dsh-plugin/awesome-dsh-plugin
DeepSeek Harness(dsh)插件精选列表
★ 22,225未汉化DSH
73.6
新词雷达zhuyansen/new-term-radar
new-term-radar新词雷达
★ 2,049已汉化MCP
72.8
插件生态导航0xsline/awesome-deepseek-harness
安装 贡献指南 DeepSeek Docs 公开插件目录 Issues
★ 1,188已汉化DSH
72.6
技能注册中心iflytek/skillhub
企业级开源智能体技能注册中心——发布、发现并管理组织内可复用的技能包。
★ 5,370已汉化DSH
71.9
插件市场目录imsai-sh/awesome-deepseek-harness-plugins
面向 DeepSeek Harnessdsh生态的社区插件目录,共收录 13941 个插件含 PR 收录与…
★ 355已汉化DSH
71.8
插件精选清单Anil-matcha/awesome-dsh-plugin
DeepSeek Harnessdsh精选指南——DeepSeek…
★ 1,013已汉化DSH
71.7
这是你的仓库?认领条目