跳到主要内容

dsh-mcp-skill-manager

已验证

dsh-mcp-skill-manager · v0.1.0 · MIT · Web 界面

MCP & Skills management panel for DeepSeek Harness - manage MCP servers and skill library from the Settings page.

安装

dsh plugin add dsh-mcp-skill-manager

用 dsh --profile default --dump-config 确认 layer 已生效 —— 参见安装指南。

源码

标签

作者

说明文档

dsh-mcp-skill-manager

为 DeepSeek Harness 设置页提供的「MCP 与技能」管理面板:一个入口管理 MCP 服务器和技能库。

每张服务器卡片显示传输类型(stdio / streamable-http)、实时可达性徽标、工具数 + token 估算,以及每台的 测试 / 编辑 / 删除 操作。技能库把 130+ 个技能按集合归组(如 hack-skills、superpowers-zh、ui-ux-pro-max),支持批量开启/关闭;分组规则面板列出内置默认规则与你自定义的规则。

设计理念

多数 skill 管理工具把技能平铺,靠搜索/标签。这个面板换了个角度:DSH 用户常安装整套 skill 包(superpowers、hack-skills、ui-ux-pro-max…),每个包自带一组技能。所以面板按集合归组——从 frontmatter 形态自动探测 + 用户规则——让你一眼看清「每个技能来自哪一套」,能对整包批量操作,也能扩展到上百个技能。

核心原则:

  • 溯源优先:每个技能都标明它为什么在这个组(frontmatter 字段 / 手动归类 / 规则);分组规则面板让你应用前先测试某条规则匹配到谁。
  • 启发式只是建议,不是决定:内置形态探测与签名聚簇只给出分组提案,确认后才写入;技能绝不会被静默改组。
  • 日常有电池,进阶有杠杆:默认就是按集合视图,一键建议覆盖常见场景;规则编辑器(10 种匹配、建议/自动开关、实时匹配测试)留给想精细控制的人。

功能

1. MCP 服务器(设置 → MCP & 技能 → MCP 服务器)

MCP管理面板 添加MCP服务器面板
MCP管理面板 添加服务器面板
  • 列出 profile patch(cordis.patch.yml)里全部 mcp-* 服务器,实时显示运行状态(active / failed / loading)。
  • 新增、编辑、删除、启停服务器;写入用户 patch 层并自动备份,保存后 DSH 热重载生效(配置类改动无需重启)。新增服务器自动生成 id(mcp-<slug>)。
  • 真实握手测试(initialize + tools/list),stdio 与 streamable-http 均支持。
  • 服务状态徽标:HTTP 服务器在面板加载时自动探测(服务可达 / 未运行),明确区分「插件已激活」与「服务器真正在线」。
  • 工具数与 token 估算:点「重新采集」(或「测试」)快照每台服务器的 tools/list;卡片显示 工具: N · ~X tokens,停用的服务器仍显示上次快照,帮你判断要不要启用。
  • 可选请求头认证(streamable-http):每行填一个 Key: Value(如 Authorization: Bearer xxx);真实连接(官方 mcp-client)与测试探测都会带上。
  • 「启动时默认关闭所有 MCP」开关:开启后每次启动全部 MCP 不连接,需要哪个手动开(下次重启生效)。配置存于 ~/.dsh/dsh-mcp-skill-manager/settings.json。
  • 顶部摘要栏:总数 / 启用 / 关闭 / 可达数 + 启用服务器的预估 token 占用。
  • 可展开工具列表:采集后点卡片展开看具体工具名。
  • 可选环境变量:每行 Key=Value(stdio 与 http 都支持),真实连接与测试探测都会带上。
工作原理:重新采集如何估算 tool 数与 token 占用 点击顶部「重新采集」后,插件对配置里的每一台 MCP 服务器做一次**真实握手**(stdio 走子进程 `spawn`,streamable-http 走 HTTP POST),依次发送 `initialize` → `notifications/initialized` → `tools/list`。随后:**工具数 N** 为 `tools/list` 返回的工具个数;**schema 字节数** 为将每个工具的 `inputSchema`(兼容 `parameters`)用 `JSON.stringify` 序列化后累加的长度;**单台估算 token** 为 `max(1, ceil(schemaBytes / 4))`,即社区约定「约 4 字节 ≈ 1 token」。每台服务器的「工具数、工具名、schemaBytes、estimatedTokens、服务器名、transport、采集时间」作为上次成功快照写入 `~/.dsh/dsh-mcp-skill-manager/catalog.json`;卡片上的 `工具: N · ~X tokens` 读这份快照,顶部摘要的 `~X tokens` 是**已启用**服务器的 `estimatedTokens` 之和,停用服务器保留快照但不计入总占用。

2.技能库(设置 → MCP & 技能 → 技能库)

按集合分组
按集合分组
按根目录分组
按根目录分组
自定义分组规则
自定义分组规则
查看分组规则
查看分组规则
  • 浏览全部标准根目录的技能(项目 .dsh/skills、.agents/skills、~/.dsh/skills、~/.agents/skills)。
  • 模板新建(kebab-case 名称 + 描述 + 可选 whenToUse)、启停模型调用、修改描述、删除(移入 .trash-dsh-mcp-skill-panel/)。
  • 弹窗查看任意技能(SKILL.md 全文只读)+ 就地编辑描述。
  • 搜索技能(按名称/描述)。删除的技能会移入 .trash-dsh-mcp-skill-panel/;一旦回收站非空,技能库底部会出现回收站区,可一键恢复。
  • 技能集合归组:按集合查看技能——collection: frontmatter 字段优先,其次手动归类,最后用户规则;三种视图(按集合(默认)/按根目录/全部平铺)。卡片快捷归类下拉、多选归入/取消归类、整组开启/关闭 model 调用与整组删除。
  • 特征建议:内置规则(superpowers-zh 靠 metadata.hermes 元数据;hack-skills 靠精简 frontmatter + >- 折叠描述;ui-ux-pro-max 靠 argument-hint 键或已知设计名清单)+ 签名自动聚簇(把共享同一有区分度 frontmatter 形态的技能聚成一簇,≥2 个才成簇、簇名可改)。建议只覆盖尚未归组的技能;应用前可预览确认。
  • 自定义规则与分组规则面板:10 种匹配类型(name 正则 / path 子串 / frontmatter 键=值 / hasKey / missingKey / keysSubset / descFolded / meta 深路径 / anyOf / json),带建议 / 自动开关(建议=只出现在特征建议里、应用后才归组;自动=匹配即立即归组)。分组规则面板可查看某规则匹配的技能、编辑+测试+删除规则;内置默认规则可编辑、带「默认」标识(改前确认)。归组状态存于 ~/.dsh/dsh-mcp-skill-manager/collections.json。

3. Skill 自定义分组展示

下面以 browser-skill 这个技能为例,展示分组使用流程。

1. 查看技能内容

点击「查看」打开 browser-skill,可以看到 frontmatter 头部有 name: browser-skill 这样的特征。

查看 skill 内容

2. 添加自定义规则

按下图填写规则(这里选择的是「建议」;如果你选「自动」,则第 3 步可省略,技能会被立即归到对应分组)。

添加自定义规则

3. 点击特征建议

这时候点击「特征建议」,可以看到刚才添加的自定义规则已经生效。

特征建议

4. 点击「应用所选」

点击「应用所选」后,browser-skill 被自动添加到 tencent 分组中。

添加成功

安装

需要 Node >= 20 与 pnpm,默认目标是 DSH 的 web profile。

方式 A:官方 CLI(推荐)

本包自带 dsh.bundle.patch(cordis.patch.yml),因此用 DSH 官方插件 CLI 一条命令即可同时安装并挂载,无需手动改 cordis.patch.yml。

# 已发布到 npm
dsh plugin --profile web add dsh-mcp-skill-manager

# 直接从 GitHub 仓库安装(安装时会构建客户端 bundle)
dsh plugin --profile web add github:<用户>/dsh-mcp-skill-manager

# 本地 checkout(自链接,用于开发)
dsh plugin --profile web add .

然后重启 DSH web,打开设置 → MCP & 技能。

[!IMPORTANT]

  • npm 方式需要先把包发布到 npm;发布产物(files)必须包含 cordis.patch.yml 和构建好的 client/client.js。
  • GitHub 方式依赖包的 prepare 脚本(node client/build.mjs)在安装时构建客户端,因此仓库需要有 esbuild(devDependency)。如果 pnpm 拦截了构建,需要在 profile 的 pnpm-workspace.yaml 的 allowBuilds 里放行 —— DSH CLI 拦截 git 安装时会把要加的 key 打印出来。
  • 不要在一个 profile 里混用两种方式。 如果插件已经通过 bundle 通道激活(dsh.profile.bundles 里已有本插件),就不要再跑 node install.mjs,也不要在 cordis.patch.yml 里保留手动 - insert: 行 —— 否则会重复挂载(两个宿主半、两个客户端 bundle)。install.mjs 会自动检测 bundle 通道并跳过手动写入。

方式 B:node install.mjs(本地 / 非 CLI)

node install.mjs
# 指定其他 profile:
node install.mjs --profile web

脚本会备份 cordis.patch.yml、把本包装入 profile(pnpm add file:...)并追加插件行。重启一次 DSH web(客户端 bundle 在启动时组装):

cd <你的 DSH 安装目录>   # 例如 D:/deepseek-harness
pnpm exec dsh web

然后打开设置 → MCP & 技能。重启后想无头验证:node scripts/smoke.mjs(端到端检查 loader 条目、客户端 bundle、MCP/Skills RPC 端点)。

等价的手动安装:

cd ~/.dsh/profiles/web
pnpm add file:<本包路径> --config.auto-install-peers=false
cat >> cordis.patch.yml <<'EOF'

- insert:
    - id: dsh-mcp-skill-manager
      name: 'dsh-mcp-skill-manager'
EOF
# 重启 DSH web

卸载

cd ~/.dsh/profiles/web
pnpm remove dsh-mcp-skill-manager
# 从 cordis.patch.yml 删除 "- id: dsh-mcp-skill-manager" 行
# 需要时还原 install.mjs 生成的备份

兼容性

  • 实测版本:DeepSeek Harness 0.1.1-rc.2(Windows,web profile)。
  • 运行时 peer 依赖仅 @deepseek-ai/cordis(宿主提供);常规依赖仅 js-yaml(frontmatter 解析)。
  • 特性探测:拿不到 connection.rpc 服务(旧版/headless 宿主)时,面板降级为「当前版本不支持」提示,绝不影响启动。
  • 只使用稳定契约:connection.rpc、settings.section slot、locale,以及官方文件格式(cordis.patch.yml、SKILL.md frontmatter);patch 文件按行编辑,保留你的注释与手写条目。
  • 升级 DSH 后:在本包目录运行 node --test,并重跑 node scripts/smoke.mjs(端到端 loader/bundle/RPC 检查)。

安全

  • 所有写操作 RPC 仅限 loopback(authority: "loopback")。
  • 原子写(临时文件 + rename)+ 自动备份:cordis.patch.yml.bak-mcp-skill-panel;技能删除进 .trash-dsh-mcp-skill-panel/。
  • 插件状态存于 ~/.dsh/dsh-mcp-skill-manager/(catalog.json 工具快照、settings.json 偏好、collections.json 归组规则/assignments/excluded);HTTP 请求头写入你的 profile patch,仅 loopback 面板可见。
  • stdio 探测使用 shell: false;id/serverName 严格模式校验;技能路径限定在已发现根内(防目录穿越)。

开发

npm install
npm run build   # 打包 client/index.jsx -> client/client.js
npm test        # node --test

许可证

MIT