zx2021210538/dsh-skills-mcp-manager ↗★ 0
dsh-skills-mcp-manager
DSH 设置面板:一个页面里管理技能(SKILL.md)与 MCP 服务器,全局 / 项目级分层,改完即生效。Manage skills and MCP servers from the DSH settings panel — global and per-project tiers, effective immediately. 适合需要分层管理、快速检索和配置Skills与MCP服务的用户。
Install
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:zx2021210538/dsh-skills-mcp-managerREADME
Read the full README ↗使用
入口:设置 → Skills & MCP(与内置插件页同一套设置槽位)。
- 搜索只匹配名称,不匹配地址 / 参数 / 环境变量
- 一份列表,没有分区标题:全局的排前面,然后按工作区顺序;卡片上的标签说明它属于谁
- 「添加」按钮与搜索框同一行,表单紧贴列表上方(点完就能看到它要追加到的位置)
- 没有项目筛选器:列表跨工作区展示(全局在前,然后按工作区顺序),卡片上的标签说明归属。 新条目要写到哪个工作区,在添加对话框里选
- 卡片标签统一:全局显示「全局」,项目级显示工作区名 —— MCP 与 Skills 同一套词表
- 卡片操作收进
…菜单(预览 / 编辑 / 删除);技能没有启用开关——磁盘上有文件就是启用
MCP
| 全局 MCP | 项目级 MCP | |
|---|---|---|
| 存在哪 | profile cordis.patch.yml 的 Loader 行 | profile cordis.patch.yml 里带 scope 的 Loader 行 |
| 谁去连接 | 官方 @deepseek-ai/dsh-mcp-client 直接加载这些行 | 插件在 agent/created 时按项目路径挂载 |
| 生效范围 | 所有会话(含 subagent) | 只有该项目里运行的会话 agent |
| 增删改 | 写回配置文件(加锁 + 原子写 + 写前校验 + 自动备份) | 同一个行命令路由,写回带 scope 的行 |
-
卡片上的「配置文件」标签表示这一行来自
cordis.patch.yml;这种行可以编辑 / 停用 / 删除,改动通过带鉴权的POST /dsh-skills-mcp-manager/rows立即写回(新增/删除在点击瞬间就生效,不等轮询) -
展开卡片能看传输方式、地址或命令、参数、环境变量(值打码)、范围与启停状态
-
展开卡片的「工具」一栏可以只保留你需要的工具。每个服务器的工具清单下面有三档:
档位 含义 全部保留(默认) 不做任何干预,该服务器列出的工具全部注册 只保留勾选 勾选的才注册,没勾的不会进入工具注册表(也不占 token) 只挡勾选 勾选的被挡住,其余照常注册 被挡下的工具不只是「不显示」——它们从未注册,所以也不占用每次组装工具面的 JSON schema 体积。 实测本机 chrome-devtools 一个服务器就占 30 个工具、约 25 KB(≈5.8k tokens), 只留常用的几个收益很明显。
两点如实说明:
- 改动要等该服务器重新注册工具时才完全生效。规则本身是即时读取的(改完保存即可, 不用重启),但已经注册进注册表的工具无法被插件注销,所以已存在的工具不会当场消失。 想立刻看到效果:把这张卡片**「停用」再「启用」**(几秒即可)——停用会销毁该服务器的桥接、 连带注销它的工具,启用时重新连接并重新注册,于是全部工具重新过一遍过滤;或者重启 DSH。
- 过滤靠劫持工具服务的
register实现——因为dsh-mcp-client自身没有白名单字段, 而ctx.tools.restrict()要求 scoped 上下文(全局调用会抛错)、且只遮罩不注销。 这是唯一能真正把工具挡在注册表外的接缝。装不上时面板会显示原因,而不是假装在工作。
-
停用只是把该行的
enabled置 false,不删你的配置 -
连接与重连(添加/编辑 MCP 时的最后一组输入,全局与项目级都支持):直接对应
@deepseek-ai/dsh-mcp-client自己的配置字段表单里填的 落到 config 的 默认值 作用 连不上时拒绝激活 failOnStartupErrorfalse勾上后:首次连接或工具同步失败会让插件激活失败(不勾则照常启动,只是没有该服务器的工具) 工具调用超时(ms) toolCallTimeoutMs60000单次 tools/call的超时。导入/分析这类分钟级操作会被默认 60 秒打断(本机实测一次 Ghidra 导入+全量分析约 158 秒),按需调大重连首次延迟(ms) reconnect.initialDelayMs500第一次重连等待多久,之后逐次翻倍 重连最大延迟(ms) reconnect.maxDelayMs30000退避延迟的上限 重连最大次数 reconnect.maxAttempts10单次断线最多连续尝试几次,超出则放弃 输入框预填真实默认值,落库也写成显式值( 500 / 30000 / 10):表单显示的就是实际生效的,不用去翻 dsh-mcp-client的源码才知道这一行怎么重连。清空输入框会回到默认值,而不是删掉键。failOnStartupError例外——false与「键不存在」完全等价,写它只是噪音,所以只在勾选时写入。填了非法值(非整数、超范围)会被拒绝并提示——因为写进去会让整行加载失败 -
导入 MCP:选来源 → 扫描 → 预览「哪些文件存在、识别出几个、几个形态不支持」→ 确认。全局与项目级都写成配置文件行(项目行带
scope)
技能
- 列表 = 磁盘扫描结果:
$DSH_HOME/skills、~/.agents/skills、以及各项目的.agents/skills/.dsh/skills。磁盘文件是唯一真源,config.skills[]/ 对账镜像已删除(旧条目会在升级时一次性写成文件) - 「添加技能」写入
//SKILL.md:区域选全局或项目,名字同时是目录名 - 预览/编辑按需通过
GET //skill?path=读取正文(只允许读扫描到的文件;正文不进 profile patch) - 重命名会同时移动目录并改写 frontmatter 里的
name(否则面板和文件夹会对不上) - 删除是两步确认:先把目录备份到同级的
.smp-backup--,再删除;备份会保留,需要时手动改回原名即可
状态与失败
在途操作在卡片上显示进度(保存中… / 删除中… / 切换中…),期间该卡片的其它按钮不可点;操作失败会就地显示原因(例如「该技能不在当前扫描结果里」)。删除若 15 秒没有回执,会停止转圈并提示重试。