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

能力库 alone-tree/dsh-skill-mcp-manager

DeepSeek Harnessv1.2.2
alone-tree21 天前有提交已提供中文文档扫描:含敏感能力

能力库(Capability)— 一站式可视化管理 DSH 技能与 MCP:按需加载 MCP、会话内热重载,插件里就能查看 SKILL/MCP 描述。

38.3/100
综合分
6
GitHub 星标
832
npm 周下载
—/5
用户评分

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

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-skill-mcp-manager
npm 源 · dsh-skill-mcp-manager 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.5 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 21 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-skill-mcp-manager @ 1.2.2
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 06:17:55

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 41 处,展示前 39 条)
  • 读取本地文件
    lib/index.js:41
    const pkg = JSON.parse(readFileSync(new URL("../package.json", import.meta.url), "utf8"));
  • 读取本地文件
    lib/index.js:103
    const text = await readFile(join(dataDir, "registry.json"), "utf8");
  • 写入本地文件
    lib/index.js:116
    await mkdir(dataDir, { recursive: true });
  • 写入本地文件
    lib/index.js:119
    await writeFile(tmp, `${JSON.stringify(registry, null, 2)}\n`, "utf8");
  • 写入本地文件
    lib/index.js:120
    await rename(tmp, file);
  • 读取本地文件
    lib/index.js:125
    const text = await readFile(join(dataDir, "settings.json"), "utf8");
  • 写入本地文件
    lib/index.js:136
    await mkdir(dataDir, { recursive: true });
  • 写入本地文件
    lib/index.js:139
    await writeFile(tmp, `${JSON.stringify(settings, null, 2)}\n`, "utf8");
  • 写入本地文件
    lib/index.js:140
    await rename(tmp, file);
  • 读取本地文件
    lib/index.js:148
    names = await readdir(directory);
  • 删除本地文件
    lib/index.js:160
    await unlink(join(directory, item.item));
  • 发起网络请求
    lib/index.js:565
    const response = await client.request(
  • 发起网络请求
    lib/index.js:602
    return await client.request(
  • 读取本地文件
    lib/index.js:1068
    current = await readFile(patchPath, "utf8");
  • 读取本地文件
    lib/index.js:1157
    current = await readFile(patchPath, "utf8");
  • 发起网络请求
    lib/index.js:1198
    const outcome = await approval.request({
  • 发起网络请求
    client/client.js:16
    const res = await fetch(path, { cache: "no-store" });
  • 发起网络请求
    client/client.js:23
    const res = await fetch(path, {
  • 读取本地文件
    lib/skill.js:122
    entries = await readdir(dir, { withFileTypes: true });
  • 读取本地文件
    lib/skill.js:159
    raw = await readFile(path, "utf8");
  • 读取本地文件
    lib/skill.js:294
    const raw = await readFile(path, "utf8");
  • 写入本地文件
    lib/skill.js:314
    await writeFile(tmp, next, "utf8");
  • 写入本地文件
    lib/skill.js:315
    await rename(tmp, path);
  • 读取本地文件
    lib/skill.js:323
    const text = await readFile(join(dataDir, "settings.json"), "utf8");
  • 执行外部命令来自配置/变量
    lib/ui.js:118
    const child = spawn(command, args, { detached: true, stdio: "ignore", windowsHide: true });
  • 执行外部命令固定命令
    lib/ui.js:139
    child = spawn("powershell.exe", ["-NoProfile", "-NonInteractive", "-Command", script], {
  • 写入本地文件
    lib/ui.js:155
    await rename(absPath, dest);
  • 执行外部命令固定命令
    lib/ui.js:166
    child = spawn("gio", ["trash", absPath], { stdio: "ignore" });
  • 写入本地文件
    lib/ui.js:178
    await appendFile(
  • 写入本地文件
    lib/ui.js:203
    await mkdir(trashDir, { recursive: true });
  • 写入本地文件
    lib/ui.js:205
    await rename(absPath, dest);
  • 读取本地文件
    lib/session-audit.js:74
    projects = readdirSync(root, { withFileTypes: true });
  • 读取本地文件
    lib/session-audit.js:83
    sessions = readdirSync(projectPath, { withFileTypes: true });
  • 读取本地文件
    lib/session-audit.js:91
    if (existsSync(path)) targets.push(path);
  • 读取本地文件
    lib/session-audit.js:157
    raw = readFileSync(path);
  • 读取本地文件
    lib/session-audit.js:209
    const record = JSON.parse(await readFile(join(dataDir, AUDIT_FILE), "utf8"));
  • 写入本地文件
    lib/session-audit.js:233
    await mkdir(dataDir, { recursive: true });
  • 写入本地文件
    lib/session-audit.js:236
    await writeFile(temporary, `${JSON.stringify(record, null, 2)}\n`, "utf8");
  • 写入本地文件
    lib/session-audit.js:237
    await rename(temporary, path);
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/dsh-llm@deepseek-ai/dsh-tools@deepseek-ai/cordis@deepseek-ai/schemastery
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 按需加载MCP
  • 会话内热重载

README

由 DeepSeek 最新模型翻译生成
能力库 (Capability) —— dsh-skill-mcp-manager 一站式SKILL和MCP管理器,面向 DeepSeek Harness 的宿主级插件,并提供MCP工具按需加载功能,再也不用担心MCP工具太多浪费token啦 页面截图 MCP 管理 MCP 管理 SKILL 管理 SKILL 管理 核心特性 1. 一站式可视化管理 安装了哪些 Skill 和 MCP?是否启用?每个SKILL和MCP是什么?都在设置页直接查看,不用层层翻找。前端页面直接管理MCP和Skill启停、删除,支持点击SKILL查看原文(使用本地默认的md阅读器)。每个 MCP 工具也可单独启用或禁用,禁用后 AI 无法调用,不影响同服务器的其他工具。 2. MCP 按需加载(核心功能,花了好多心思打磨) 会话开始时,on-demand 服务器只暴露名字 + 简短工具描述。AI 知道每个工具的存在和功能,但看不到完整 schema。因此: - 在token账单和完整上下文之间平衡——只暴露MCP管理器,其他都需要调用工具查看。这会导致AI意识不到有这个东西,进而不会去主动查看有哪些工具可用。但把完整参数发送给AI,又会导致上下文膨胀。本插件将MCP和SKILL一视同仁,提供基础的名字+描述,让AI自己选择调用。
展开完整文档(README 剩余 1 节)
能力库 (Capability) —— dsh-skill-mcp-manager

一站式SKILL和MCP管理器,面向 DeepSeek Harness 的宿主级插件,并提供MCP工具按需加载功能,再也不用担心MCP工具太多浪费token啦

页面截图

MCP 管理 MCP 管理

SKILL 管理 SKILL 管理

核心特性

1. 一站式可视化管理

安装了哪些 Skill 和 MCP?是否启用?每个SKILL和MCP是什么?都在设置页直接查看,不用层层翻找。前端页面直接管理MCP和Skill启停、删除,支持点击SKILL查看原文(使用本地默认的md阅读器)。每个 MCP 工具也可单独启用或禁用,禁用后 AI 无法调用,不影响同服务器的其他工具。

2. MCP 按需加载(核心功能,花了好多心思打磨)

会话开始时,on-demand 服务器只暴露名字 + 简短工具描述。AI 知道每个工具的存在和功能,但看不到完整 schema。因此:

- 在token账单和完整上下文之间平衡——只暴露MCP管理器,其他都需要调用工具查看。这会导致AI意识不到有这个东西,进而不会去主动查看有哪些工具可用。但把完整参数发送给AI,又会导致上下文膨胀。本插件将MCP和SKILL一视同仁,提供基础的名字+描述,让AI自己选择调用。
- 没有启动延迟——服务器只在 AI 真正需要时才连接;
- 不会加载失败导致不可用——按需加载,失败了非致命(可重试 / 稍后重载)。

3. 按会话隔离 MCP 实例

每个 DSH 会话(包括子代理)对同一 MCP 配置各自创建、持有和销毁独立实例:stdio MCP 每个会话一个子进程,HTTP MCP 每个会话一条连接。多个会话并发调用 Playwright 这类有状态工具时,各自操作各自的浏览器页面,互不覆盖;会话结束时实例自动回收。eager 工具由每个会话在自己的上下文中注册;MCP 配置(注册表、档位、单工具禁用、密钥、备注)仍全局共享。

4. 会话内 MCP 热重载

改了自己的本地 MCP 服务器?在会话里 mcp_load 一下即可——重连、重拉工具、新快照。无需新开会话、无需重启 DSH,对MCP开发极度友好。 重连只影响当前会话的实例,其他会话不受影响。

5. SKILL 多层扫描、外接库、临时隐藏

- 任意深度递归发现 <dir>/SKILL.md——支持连接任意数量的外部技能库目录、支持任意层深度,因此可以进行灵活的SKILL分组。插件只扫描 <dir>/SKILL.md,避免把文件夹里的其他文档也扫进来,比如readme.md、reference.md、备份文件.md
- 关闭某技能 = 模型不可见(写 disable-model-invocation),但你的 /name 斜杠命令照常可用。
- 点击删除后整个 <dir>/ 文件夹移动到回收站。必要时可以恢复。

其他辅助特征

为了让各位能用的顺手、放心,本插件还有以下设计

6. 原生 MCP 配置接管,卸载不丢

安装时自动接管原有MCP配置:把 profile 里所有 @deepseek-ai/dsh-mcp-client 条目导入注册表并接管(默认按需加载;原本禁用的保持禁用)。

卸载安全:本插件在新增MCP后,会在原有配置文件同步写入MCP配置,但保持禁用。/mcp prepare-uninstall 会将禁用的MCP转为启用,把每条托管条目连同完整配置交还原生客户端。不会因为删除插件而丢失MCP配置。

7. 每个 MCP 都能写你的备注

给任意MCP附加一条用户备注,会话目录里会展示给 AI,并且不被服务器/开发者更新覆盖。你可以写“A插件挂了就用B插件作为替补”

8. 自动预热

安装后插件会连接一次、抓取真实工具名与描述,目录立刻可用。每次加载MCP后都会自动更新缓存。预热和「刷新快照」都是一次性试连,结束即断开,不留运行实例。

9. 注册自动校验

mcp_register 会先试连 + 列工具,通过才持久化——只有配置正确的服务器才会被放行。

10. 只管理所在 profile

插件只管理它安装进的 profile——不越权、不错位。

安装

dsh plugin --profile <profile> add dsh-skill-mcp-manager

再在该 profile 的 cordis.patch.yml 加一行(参考 cordis.patch.example.yml):

- insert:
- id: skill-mcp-manager
name: 'dsh-skill-mcp-manager'
config:
dataDir: '' # 空 = ~/.dsh/skill-mcp-manager profile: web # 要用在哪里就写哪个 profile trialTimeoutMs: 30000 toolCallTimeoutMs: 60000 catalogDescriptionMaxLength: 500 toolDescriptionMaxLength: 150 # 目录里每条工具的描述截断长度(允许手动修改) importNativeMcp: true # boot 时接管原生 dsh-mcp-client 条目

重启 profile 生效。插件挂在宿主组合里,mcp_register / mcp_load / mcp_call 三件套对该 profile 下所有会话可见;eager 工具由每个会话在自己的上下文中注册,MCP 运行实例按会话独立。

接管说明:importNativeMcp: true(默认)时,原生 dsh-mcp-client 条目会被导入能力库并在原生层禁用——能力库成为唯一入口(三档、mcp-catalog、UI)。卸载插件前先跑 /mcp prepare-uninstall 交还条目。

使用

界面

打开 设置 → 能力库:

- SKILL tab —— 所有托管技能(bundle 型 SKILL.md)按路径排序:模型可见性开关、系统编辑器打开、跨平台删除。部署自带技能(node_modules / app.asar 下)为只读:仅查看 + 打开。
- MCP tab —— 所有已注册服务器(档位徽标、工具数):切档位、查详情(命令 / env / headers / 工具)、逐工具“启用/禁用”(黑名单,新工具默认启用)、密钥打码/显示、查看描述、刷新快照、删除条目。刷新快照只试连并更新注册表,不留下运行实例。禁用工具不向 AI 暴露,并在实际调用入口强制拒绝。顶部设置行可调目录的工具描述截断长度(默认 150 字符)和 stdio 消息上限(MB,留空 = SDK 默认 10):某条响应超过上限时会被丢弃并向 AI 返回带大小数值的报错,连接不断开;若那条响应是合法的大负载(如内联图片的笔记),把上限调大后重新 mcp_load 即可。仅对 stdio 条目生效,对之后加载的连接生效。

模型工具面

插件会提供三个恒定小工具,以管理所有的按需加载MCP。

- mcp_register —— 新增或修改 MCP 条目。试连(30s)+ 列出工具后持久;服务器自报的描述 / 版本 / 标题 / 网站 / 说明自动抓取。可复用它改档位 / 参数 / 备注;只有改连接契约才重连。

mcp_register { name, tier?, transport, command?, args?, env?, cwd?, url?, headers?, notes? }

tier ∈ eager | on-demand | disabled(默认 on-demand)。notes 是用户维护、不被开发者更新MCP所覆盖。
- mcp_load { name, peek? } —— 为当前会话加载 / 热重载服务器实例,返回完整工具定义 + 服务器自报元信息;其他会话不受影响。peek: true 只读快照,不连接、不掉线,用于当AI忘记MCP工具参数时偷看一眼而不打断MCP工具的生命进程。对于浏览器控制等需要连续操作的MCP尤其友好。
- mcp_call { name, tool, args? } —— 通过当前会话已加载的实例调用某个 on-demand 工具(需先 mcp_load)。只传结构化 args,不传 shell 文本、不写临时文件。

配置

| 字段 | 默认 | 含义 |
| dataDir | ~/.dsh/skill-mcp-manager | 注册表/设置目录(~/ 会展开)。 |
| profile | web | 要 reconcile 的 profile。 |
| trialTimeoutMs | 30000 | mcp_register / mcp_load 的试连超时。 |
| toolCallTimeoutMs | 60000 | 单次 tools/call 超时。 |
| catalogDescriptionMaxLength | 500 | 目录里服务器描述的截断长度。 |
| toolDescriptionMaxLength | 150 | 目录里每条工具描述的截断长度(工具名始终完整显示)。可在 UI 调整。 |
| importNativeMcp | true | boot 时导入原生 dsh-mcp-client 条目到能力库并接管。 |

数据

- ~/.dsh/skill-mcp-manager/registry.json —— 权威 MCP 注册表(version 1,entries[])。
- ~/.dsh/skill-mcp-manager/settings.json —— 插件设置(customRecursiveDirs、toolDescriptionMaxLength、stdioMaxBufferSizeMb 等)。
- ~/.dsh/skill-mcp-manager/trash.log —— 删除审计。
- env 值可为明文或 $VAR 进程环境变量引用。

未来方向

- 支持 MCP Resources & prompts —— 当前只支持MCP的工具调用,后期会扩充MCP协议中的其他内容支持。
- UI 内编辑每条MCP备注(notes)。
- UI 内查看和编辑SKILL。

License

MIT
预览分享卡片长什么样 ↓alone-tree/dsh-skill-mcp-manager
分享 · DeepSeek Harness Hub
alone-tree/dsh-skill-mcp-manager

能力库(Capability)— 一站式可视化管理 DSH 技能与 MCP:按需加载 MCP、会话内热重载,插件里就能查看 SKILL/MCP 描述。

这是你的仓库?认领条目

回到顶部