前言¶
在 DeepSeek Harness(DSH)里接 MCP 或装多个插件后,全局注册的工具名会一起进模型侧的工具 schema。名字一多,每条定义都占上下文;很多工具日常根本不会调用,却长期挂在列表里。常见做法是手动删插件或改 MCP 配置,但那样要么动基础设施,要么失去「需要时再连」的灵活性。
@littleplus/dsh-toolbox(GitHub:littleplus/dsh-toolbox)是社区维护的工作流类插件:按正则把全局工具分组,用 open / close / request 三种状态控制它们在会话上下文里的呈现方式,并在左侧栏提供面板,直接读写 profile 的 cordis.patch.yml。下面介绍它的定位、机制、安装与典型配置。
这是什么¶
一句话:DeepSeek Harness 工具箱——管理插件与 MCP 引入的工具,减少上下文里不必要的工具 schema,并提供渐进式工具获取(request 模式)。
- 维护者:littleplus
- 分类:工作流(社区目录 SkillHub)
- 许可证:MIT(见仓库
package.json) - 当前包版本:0.2.0(以仓库发布信息为准)
插件不替代 MCP 或宿主本身的工具注册,而是在工具已经全局注册之后,在 agent 作用域里通过 ctx.tools.restrict() 从 schema 中隐藏匹配项,或在 request 模式下先只暴露一个与分组同名的入口工具。
三种状态¶
| status | 行为 |
|---|---|
open(开启) |
完全不处理(默认)。 |
close(关闭) |
匹配到的工具从该会话的工具 schema 里消失,不注入任何上下文。 |
request(按需) |
匹配到的工具先隐藏,同时注册一个与分组同名的入口工具(描述 = 分组 description)。模型调用该入口后,该组工具才出现在下一次请求的工具列表里。 |
request 即渐进式披露:模型默认只看到「这组有什么」的说明,需要时才展开整组工具。展开状态按会话记录,并在 agent 重建(resume / fork)时从 session 日志里的 tool/call 事件重放。
优先级:有序分组,先匹配先得¶
分组是有序的。一个工具只归属第一个匹配它的分组,后面的分组只看剩下的名字。这不是按状态比强弱,而是按顺序裁决。
- { id: vk_read, tools_regex: '^mcp__openviking__read$', status: open } # 先认领 read
- { id: vk_rest, tools_regex: '^mcp__openviking__', status: close } # 只剩 write/…,吃不掉 read
上面这样写,open 先把 mcp__openviking__read 认领走,后面 close 的通配碰不到它——open 组既可以是「什么都不做」,也可以是占位保护,取决于顺序。把两行对调则 close 先吃光,open 一个也拿不到。
面板上每张卡片左上角有序号,↑ / ↓ 直接改 YAML 里的顺序。若某组正则能匹配工具却一个都没拿到,卡片会提示「N 个匹配已被上面更靠前的分组认领」。
核心功能¶
左侧栏「工具箱」面板¶
安装成功后左侧栏出现「工具箱」。面板读写的是 profile 自己的 patch 层,写入经宿主 configEditor:加锁、保留 YAML 注释、原子替换,Loader 热协调后配置立即生效,无需重启 DSH。
推荐用法包括:
- 工具状态表(默认):按名字密排全部工具,颜色表示经本插件处理后的实际状态——正常色会进上下文,灰色删除线表示
close,灰色虚线表示request下尚未展开;悬停可见归属分组。 - 列表:每个分组一节,带序号、状态、正则、当前命中的工具名。
- 新增 / 编辑 / 删除 / 调序 / 状态下拉:正则输入时可预览命中;改 id 会按旧 id 定位并替换对应行。
缺 configEditor 时面板退化为只读。
手写 cordis.patch.yml¶
配置写在 profile 的 cordis.patch.yml(Windows 下路径形如 %USERPROFILE%\.dsh\profiles\<profile>\),用与本插件相同的 id: toolbox 覆盖 config。config 为分组数组(也接受 { groups: [...] }):
- id: toolbox
config:
- id: web
tools_regex: '^web_'
description: Web search and page fetch tools. Call this to load them.
status: request
- id: browser
tools_regex: '^(browser|computer)_'
description: Browser control tools.
status: close
- id: todo
tools_regex: '^todo_'
description: Task list tools.
status: open
字段约束(摘自 README):
id:必填,须匹配^[A-Za-z][A-Za-z0-9_-]*$,不能是宿主保留名run_code,不能重复。tools_regex:必填,JS 正则,按 search 语义匹配工具名;不做整串锚定,^/$需自行书写。description:request组必填(入口工具给模型的唯一说明);其它组可空。status:open/close/request,缺省为open。
写错的行不会导致插件整体加载失败,会出现在面板「配置问题」里;手写 YAML 中除这四个字段外的内容,面板修改时会原样保留。
安装与启用¶
在目标 profile 下执行官方安装命令:
dsh plugin --profile desktop add @littleplus/dsh-toolbox
将 desktop 换成你实际使用的 profile 名。安装后 profile 的 dsh.profile.bundles 会自动追加本包,dsh.bundle.patch 指向的 cordis.patch.yml 生效(往插件树插入 id: toolbox)。左侧栏出现「工具箱」即表示装好。
首次通过面板写入时,若 profile 里还没有本插件配置行,configEditor 会自动追加类似下面的结构(示例来自 README):
- id: toolbox
name: '@littleplus/dsh-toolbox'
config:
- { id: web, tools_regex: '^web_', description: '...', status: request }
典型用法:OpenViking MCP 工具白名单¶
README 中有一份在用的示例:OpenViking MCP 工具名很多,日常只用检索与读写相关几个,其余(health、ACL、watch、用户/组管理等)不必进工具列表。
- id: toolbox
name: '@littleplus/dsh-toolbox'
config:
- id: openviking_default_enable
tools_regex: ^mcp__openviking__(read|list|forget|remember|write|find|search|edit|grep)$
description: ""
status: open
- id: openviking_default_disable
tools_regex: ^mcp__openviking__.*$
description: ""
status: close
读法:
- 第一组
open先认领 9 个日常工具;对它们不做 restrict,但认领本身阻止第二组碰到这些名字。 - 第二组
close的^mcp__openviking__.*$只能处理第一组剩下的名字,于是只有 health、ACL 等从会话工具列表消失。 - 两条正则都带
$,避免read误匹配read_*,或list误抓list_users等。
若把两行对调,close 会先隐藏整组 mcp__openviking__*,后面的 open 无法 reclaim——面板上会直接暴露这种顺序错误。
适用场景与注意¶
适合谁
- 已接多个 MCP / 插件、工具 schema 明显偏长,希望按名字批量隐藏或按需展开的 DSH 用户。
- 需要在不改 MCP 服务端的前提下,用 profile 层配置做「白名单 + 通配兜底」一类规则的场景。
运行与权限
插件随当前 DSH 进程运行,对工具列表的 restrict / 注册入口工具都在 agent 作用域生效。安装前应在 GitHub 仓库阅读源码与 MIT 许可证,确认分组正则不会误伤仍需使用的工具名。入口工具名等于分组 id;若与已有工具重名,插件不会静默注册,面板会提示。
生态说明
DSH 采用「一切皆插件」的扩展方式;SkillHub 为社区插件目录,与 DeepSeek / 幻方无官方从属关系,本文安装与配置均以仓库 README 为准。
结尾¶
dsh-toolbox 用有序正则分组和三种状态,把「全量工具 schema」收成可管理的 profile 配置:该藏的从上下文去掉,该按需的只留一条入口,该原样留下的用 open 占位保护顺序。需要细节与 issue 时见 GitHub:https://github.com/littleplus/dsh-toolbox;目录页:https://www.skillhub.cn/plugins/littleplus/dsh-toolbox。