ArvinQi
dsh-mcp
DeepSeek Harness 的 MCP 服务器管理插件:可视化界面管理 + 按需 tool search 热注入,省 token。
- Stars
- 1
- Language
- JavaScript
- Created
- Aug 15, 2026
- Updated
- Aug 15, 2026
Introduction
dsh-mcp — MCP 管理界面 + tool search:稳定工具列表、命中缓存、不撑爆上下文
English | 简体中文

为什么用 dsh-mcp?
解决的核心问题:
- MCP 工具全量注入烧 token:接入多个 MCP 服务器后工具可达上百个,每轮全量注入开销巨大。
search按需检索模式让模型通过mcp_tool_search热注入所需工具,大幅节省 token。 - 工具列表反复更新破坏缓存:
tools/list_changed通知会让同名工具被反复注销/重注册,系统提示词工具列表抖动、prompt cache 频繁失效。工具列表稳定化让未变化的工具保留原注册,最大化 cache 命中。 - 没有可视化管理入口:服务器配置、启停、工具勾选全靠手工改文件。Settings → MCP 一站式可视化完成。
功能优势:
- 可视化管理:服务器列表 / 新建 / 编辑 / 删除 / 测试连接 / 启停 / 刷新,全 UI 操作
- 工具级精细控制:每个服务器展开工具列表,默认全选,可取消勾选只加载需要的部分
- 双注入模式:
search(按需检索,省 token)与full(全量注入) - 零 npm 依赖:直接对接 DeepSeek Harness 内部能力,安装即用
- 三种安装方式:npm / GitHub git 源 / 本地 link;中英文界面与文档
功能
- 托管 MCP 服务器注册表(host):持久化定义(storage-domain
mcp_servers)、按服务器挂载@deepseek-ai/dsh-mcp-client实例、环境变量注入(明文入定义、secret 走 credentials)、 连接探测(test)。 - Web 设置管理页(client):Settings → MCP,列表/编辑/删除/测试服务器。
- Remote 自挂载:client 半部在
apply()里自行ctx.remote.$mount()挂载mcpManager命名空间(原实现依赖 api-remotes 的 in-box 修改,独立版不再需要任何 in-box 包改动)。
结构
dsh-mcp/
├── package.json name=dsh-mcp;dsh.client 声明;零 npm dependencies
├── lib/
│ ├── index.js host 半部(McpManagerService,源自 mcp-manager 构建产物)
│ ├── mcp-client.js vendored MCP 客户端(源自 @deepseek-ai/dsh-mcp-client,含工具列表稳定扩展)
│ ├── probe.js vendored 连接探测(源自 mcp-client/src/probe.ts)
│ ├── transport.js vendored 传输工厂(源自 mcp-client/src/transport.ts)
│ └── client.js 浏览器半部(esbuild 打包,ModuleLoader wire format)
├── src/client/ 浏览器半部源码(TSX + CSS Modules + 本地 types + remote-contribution)
└── scripts/build.mjs 构建脚本(esbuild 取自 DSH checkout,见下)
构建
node scripts/build.mjs
- esbuild 从 DSH 源码 checkout 解析:
$DSH_SOURCE未设置时尝试~/.dsh/source/current。 - 运行时依赖(
@deepseek-ai/*、zod、@modelcontextprotocol/sdk)不装 npm 包, 从$DSH_HOME/profiles/node_modules(DSH profiles 模块 fallback,$DSH_HOME默认~/.dsh)解析;构建时经nodePaths指向同一目录。 - CSS Modules 由 esbuild onLoad 插件处理:样式注入
<style data-plugin="dsh-mcp" data-file="…">,默认导出 identity 类名映射。
安装使用
1. 安装
方式一:npm(发布到 npm 后)
dsh plugin --profile web add dsh-mcp
方式二:GitHub git 源
dsh plugin --profile web add github:ArvinQi/dsh-mcp
# 或
dsh plugin --profile web add git+https://github.com/ArvinQi/dsh-mcp.git
方式三:本地开发(link)
dsh plugin --profile web add link:<本仓库绝对路径>
注意:本地
link:安装时,插件目录内含node_modules -> $DSH_HOME/profiles/node_modulessymlink(本机开发用,不入库),否则link:安装的 symlink 被 realpath 后无法解析@deepseek-ai/*。
2. 注册与生效(三种方式通用)
在 $DSH_HOME/profiles/web/cordis.patch.yml($DSH_HOME 默认 ~/.dsh)追加:
- insert:
- id: dsh-mcp
name: dsh-mcp
然后重启 dsh web(client roster 变更需重启);之后浏览器硬刷新(Cmd/Ctrl + Shift + R)
加载设置页。
3. 使用
打开管理页:重启后浏览器打开 DSH Web → 设置(Settings)→ MCP。
添加服务器:
- 点击「添加服务器」
- 填写:服务器名称(
serverName,决定工具前缀mcp__<serverName>__)、传输方式 (streamable-http填 URL /stdio填命令)、请求头、工具调用超时等 - 点「测试连接」确认连通性与工具列表,点「保存」
日常管理:
- 启用 / 禁用:列表行按钮,禁用后该服务器所有工具即时注销,不再注入
- 刷新:重新拉取服务器状态与工具列表(服务器重启后可同步新工具)
- 测试连接:编辑页可随时测试
工具控制(省 token 的关键):
- 注入模式:页面顶部切换
search(按需检索,默认)或full(全量注入)search模式下,模型需要某 MCP 工具时调用mcp_tool_search检索并热注入当前对话
- 工具勾选:点「展开工具」查看该服务器全部工具(默认全选),取消勾选 = 不注入该工具, 即时生效,无需保存
验证效果:
- 在任意 agent 会话中,可用工具应包含
mcp__<服务器名>__<工具名> search模式下未检索到的工具不占系统提示词,节省 token 并提升 prompt cache 命中率- 工具内容未变化时,
list_changed通知不会反复注销/重注册同名工具,工具列表保持稳定
版本注意
- host 半部
lib/index.js是 mcp-manager 的构建产物(spec/types 已内联),改动请直接编辑 lib 下文件,或改回 TS 后重新用仓库工具链构建。 - 浏览器半部改
src/client/*后重新node scripts/build.mjs;host 半部改动无需重装 (link 安装直接生效)。 - 配置变更(bundles 增删、新插件行)需重启
dsh web才进入 client roster。