- Home
- Plugins
- Tools & Capabilities
- dsh-tool-keeper
dsh-tool-keeper
wufeng0105/dsh-tool-keeper
AI re-reads every tool's manual on every reply, including the tools you never use. Hide the ones you don't need and rewrite the manuals of the ones you keep — a tool's own manual or any single parameter's. Rewriting touches only the wording, never the schema, so a rewritten tool still works. Both the settings page and a model-callable tool write the same config; changes apply after a restart. Its HTTP routes have no DSH access check, so a web page open in your browser could call them.
Install
dsh plugin --profile web add github:wufeng0105/dsh-tool-keeperREADME
Tool Keeper
AI 每回答你一次,都要把手上所有工具的说明书重读一遍——包括你从来用不到的那些。这个插件让你把用不到的收起来,把留下的说明书改成你自己的话。
为什么需要它
- 装一个服务,带来十几个工具,你只用得上两三个。 它们的说明书照样每轮被 AI 读一遍。
- 说明书不是你写的,而且你改不了。 服务商写的说明里常有大段「你必须先调用我」这类命令句,AI 读到的就是这些话。
- 工具一多,AI 会挑错。 几十个名字相近的工具摆在一起,说明书越啰嗦越容易被带偏。
这个插件做两件事:把用不上的工具真收起来(不是界面隐藏,是从发给 AI 的清单里消失);把说明书改成你自己的话。
改说明是它跟 DSH 自带隐藏功能的本质区别——自带的只能拿掉,改不了工具说的话。 为什么只能这样实现,见 docs/DESIGN.md。
装上之后
什么都不做也是对的。出厂状态不管任何工具——工具数量、说明书内容,跟没装完全一样。 「哪个该关、哪句该改」只有你知道,管理工具不该替你做这个决定。
先跟 AI 说一句「列出所有工具」,它会按来源分组报给你,每个工具带占用字符数。
两种用法
一、直接说话
AI 会调这个插件自带的 tool_keeper 工具替你改:
| 你说 | 会发生什么 |
|---|---|
| 列出所有工具 | 按来源分组列出,受保护的会标出来 |
| exa 只留网页搜索 | exa 那台只保留一个,其余消失 |
| 把 lexiang 整个关掉 | lexiang 的工具全部消失(服务器总开关,开回来之后你的逐条配置原样生效) |
| 关掉 create_dataset | 只关这一个 |
| context7 那个说明太啰嗦了,改成「把包名解析成库 ID」 | 改这个工具的说明 |
| include_selectors 那个参数说明也砍掉 | 改某个参数的说明 |
| 恢复某个工具的原始说明 | 撤销改写,变回服务商原样 |
| 全部关掉,别管工具了 | 总开关,插件完全停止干预 |
| 恢复出厂 | 清空所有规则 |
二、点界面
打开 设置 → 工具管理。
| 位置 | 有什么 |
|---|---|
| 顶部 | 搜索框、展开/折叠、刷新、导出、导入 |
| 摘要 | 当前屏幕上有多少个工具 |
| 分组 | 内置工具、MCP · 各服务器,每个来源一张卡片,默认折叠,点标题行展开 |
| MCP 卡片标题行 | 最右边有一个服务器总开关:关掉整台全部消失,开回来逐条规则原样生效 |
| 每一行 | 图标、工具名、右边的开关;整台停用时行级开关置灰并注明「服务器已停用」 |
| 点工具名 | 展开编辑区:左边是服务商的原文,右边是你的改写,两栏一样高 |
| 底部 | 恢复出厂 |
几个细节:
- 导出把配置下载成
tool-keeper-config-<时间戳>.json。导出的永远是磁盘上的当前配置——如果改了还没重启,导出的也是还没生效的这份。 - 导入整份替换现有配置。导入前自动备份成
tool-keeper.json.bak-<时间戳>;内容有问题会被拒绝,配置不会被写坏。文件不要超过 256KB。 - 标着「受保护」的工具没有开关。画一个永远点不动的开关是骗人。
- 开关显示的状态是真的。被任何规则关掉的工具在这里就显示关闭,不会骗你说还开着。
- 改完没重启时,顶部有一条常驻提示。为什么,见下面「改完要重启」。
改完要重启
这是目前最大的不方便,得说清楚。
工具是在注册那一刻被拦下来的,已经注册进去的,改配置不会自动更新。 设置页那条「改了还没重启」的提示比的是磁盘上的配置和内存里正在用的配置,不一样就报警。
也可以直接改文件
配置文件在 ~/.dsh/tool-keeper.json,第一次运行自动生成一份空的。
{
"enabled": true, // 总开关。false = 插件完全不干预
"servers": {
// 只留列出的这几个,其余消失
"tinyfish": { "keep": ["search", "fetch_content"] },
// 整台服务器关掉(开回来之后,逐条规则原样生效)
"lexiang": { "enabled": false }
},
"tools": {
// 单独关一个。(受保护的工具写了会被拒绝,并告诉你原因)
"mcp__exa__agent_run": "drop"
},
"rewrite": {
// 只改工具说明,写法很省事
"mcp__tinyfish__search": "搜索网页与外部知识。",
// 同时改工具说明和参数说明
"mcp__tinyfish__fetch_content": {
"description": "读取网页正文,支持一次 10 个 URL。",
"properties": {
"include_selectors": "CSS 选择器,只提取匹配的元素。"
}
}
}
}
冲突时听谁的
服务器总开关是「整台取消注册」的闸,压过一切逐条规则——关就是一台不剩; 最具体的赢只在逐条规则之间成立:
受保护 > 服务器总开关 > 单工具规则 > 服务器白名单
比如你把整台 tinyfish 关了,就算单独给 search 写了 "keep",search 也会跟着消失——
总开关优先。开回来之后,你的逐条配置原样生效。
反过来,给某个工具写了 "drop",它比白名单更具体,照丢;
而给不在白名单里的工具写 "keep" 捞不回来——想留它,把它的名字加进白名单。
设置页显示的开关状态就是按这条链算出来的,不是页面自己猜的。
有几个工具关不掉
下面这些是保命的,任何配置都关不掉。关掉它们你的会话会直接卡死。
read write edit glob grep pwsh
present todo_write ask_user_question tool_keeper skill
硬写进配置不会生效,而且会告诉你怎么回事——不会静默忽略。
只改文字,不碰结构
工具的定义里除了说明,还有一堆真正决定怎么调用的东西:参数类型、哪些必填、 可选值范围、默认值。这个插件一个都不动。
理由:结构改错 → AI 按错误的格式调用,工具直接报错,功能彻底坏;文字改错 → 最多是说明写得不准,工具照样能用。风险不对等,只做低风险的那一半。
出问题的时候不会把你锁死
| 情况 | 结果 |
|---|---|
| 配置文件写坏了 | 照常启动,全部工具放行,日志报错 |
| 插件自己出 bug | 那个工具原样放行,不卡住别的工具注册 |
| 补丁装不上 | 明确告诉你「没装上」,不假装在工作 |
| 卸载插件 | 一切回到服务器原样 |
| 重启 DSH | 正常生效(同类插件有过重启后失效的毛病,见 DESIGN「可靠性与已知风险」) |
想了解更多
| 你想知道 | 看哪里 |
|---|---|
| 为什么要这样实现,为什么不用官方推荐的做法 | docs/DESIGN.md |
| 还有哪些坑没填 | docs/KNOWN-ISSUES.md |
| DSH 的接口到底长什么样 | docs/HOST-CONTRACT.md |
| 怎么验证它真的在工作 | docs/TESTING.md |
| 每个版本改了什么 | CHANGELOG.md |
| 要在这个项目里写代码 | AGENTS.md |
开发者速览
npm install # 只有测试需要(react / react-dom 用来离线渲染页面)
npm test # 182 条测试
node_modules 里只有测试用的 react,插件运行时不需要——页面用的 react 由 DSH 自己提供。
技术栈一句话:宿主半边拦截 DSH 的工具注册入口,浏览器半边是设置页,两者通过一个本地 HTTP 接口通信。
Related plugins
archify (deepseek-harness)
tt-a1i/archify
WeKnora (dsh-weknora)
tencent/weknora
next-ai-draw-io (dsh-plugin)
dayuanjiang/next-ai-draw-io
weknora
tencent/weknora