前言¶
给 DeepSeek Harness(下称 dsh)接 MCP server,最直接的路径是官方的 @deepseek-ai/dsh-mcp-client:它在启动时连接 server,把每个声明的工具注册成原生 mcp__<server>__<tool> 函数。代价是 schema 成本——server 一多,成百个工具定义会随每次请求进入上下文,不管这一轮用不用得上。
dsh-mcp-adapter 是针对这个问题的另一种接法:只注册一个 mcp 代理工具,server 懒启动,模型按需 search / describe / call。DSH 的理念是「一切皆插件」,这个插件就是这套思路下的社区实现。下面介绍它的定位、核心功能、配置方法和注意事项。
这是什么¶
dsh-mcp-adapter 是 NexusAgentX 开发的 dsh 插件,当前版本 0.6.3,MIT 许可证,要求 Node >= 20。设计上沿用 pi-mcp-adapter(MIT)的契约,仓库附有 NOTICE 文件。
它是独立插件,与 DeepSeek AI 没有关联。一句话定位:一个代理工具替代全量 MCP schema 注册,用按需搜索、描述、调用换取上下文开销。
核心设计¶
单一代理工具¶
插件只向模型注册一个 mcp 工具,动作靠参数区分:search 找工具、describe 看某个工具的 schema、tool 加 args 真正调用。上下文里始终只有一个工具定义,schema 成本从「每次请求 × 全部工具」变成「调用时才拉取」。
懒启动与元数据缓存¶
server 不在启动时全部连上。lifecycle 支持 lazy(默认)/ eager / keep-alive / lazy-keep-alive;idleTimeout 控制空闲 server 多久后关闭,单位分钟,默认 10,设 0 关闭。
配合懒启动的是元数据缓存:在真正 live connect 之前,search 就能用。模型可以先搜到工具名,再决定要不要连接。
双面插件¶
这是个双面插件:Host 半注册工具与命令,Web 客户端半提供 /mcp 弹窗与 MCP 工具卡片。卡片用与官方 Skill / Tool 行同一套 DisclosureRow / StateDot / SearchBlock 组件,视觉上和第一方一致。
安装与启用¶
1、执行官方安装命令:
dsh plugin --profile web add dsh-mcp-adapter
2、重启 dsh web,并硬刷新浏览器。此时 Host 半的工具与命令、Web 半的 /mcp 弹窗都已就位。
3、在 Chat 输入框敲 /mcp,进入配置菜单。
有个容易踩的坑提前说明:Settings → Plugins 下没有 MCP 表单。官方插件设置是 allowlist,外部插件不能在那里注册卡片。配置入口只有两个——Web 的 /mcp 菜单,或直接写 JSON 文件。
配置方式¶
Web /mcp 菜单¶
菜单里可以查看 Status / Sources / Prompts;对已有 server 执行连接、OAuth 授权、停用、移除;内置五个预设一键写入项目 .mcp.json:DeepWiki、Context7、Notion、GitHub、Chrome DevTools。
添加自定义 server 也走这里,写入项目 .mcp.json 并在进程内重载:
/mcp add docs url=https://mcp.example.com/mcp
/mcp add fs command=npx args=-y,@modelcontextprotocol/server-filesystem,/tmp
或直接用预设:
/mcp add-preset <deepwiki|context7|notion|github|chrome-devtools>
文件配置¶
想和其他 MCP 宿主(比如 Cursor)共用同一批 server,直接写标准 .mcp.json:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@1.6.0"]
}
}
}
插件做多级文件发现,后读的文件优先:
| 文件 | 用途 |
|---|---|
~/.config/mcp/mcp.json |
用户全局共享配置 |
~/.agents/mcp.json / ~/.agents/mcp/mcp.json |
用户全局工具无关配置 |
.mcp.json |
项目级共享配置(Web 添加 / 移除写在这里) |
$DSH_HOME/mcp.json |
dsh 全局覆盖(默认 ~/.dsh/mcp.json) |
.dsh/mcp.json |
dsh 项目覆盖 |
/mcp disable 和 /mcp enable 只向 .dsh/mcp.json 写 disabled 字段,不会复制凭据。
宿主配置发现¶
插件能发现 Cursor / Claude Code / Codex / OpenCode / Windsurf / VS Code 等宿主的配置(dsh-mcp-adapter init 和 /mcp list 会检测),但默认不加载。要启用,把 settings.hostConfigDiscovery 设为 "on",或在 imports 里列出:
{
"imports": ["cursor"],
"settings": {
"hostConfigDiscovery": "off",
"toolPrefix": "server",
"idleTimeout": 10
},
"mcpServers": {}
}
server 级选项¶
每个 server 可以单独配置生命周期、过滤和认证:
{
"mcpServers": {
"my-server": {
"command": "npx",
"args": ["-y", "some-mcp-server"],
"lifecycle": "lazy",
"idleTimeout": 10,
"requestTimeoutMs": 30000,
"directTools": ["search"],
"includeTools": ["search", "get_*"],
"excludeTools": ["admin_*"],
"searchKeywords": {
"search": ["find", "lookup"]
}
}
}
}
几个值得单独说明的字段:
directTools:true或工具名列表,把热路径工具提升为原生 dsh 工具,高频工具可以绕过代理这一跳;includeTools/excludeTools/searchKeywords:工具过滤,支持 glob 与搜索关键词;approveTools:true或 glob,命中的工具在 Chat Ask 对话框确认后才执行;socket:rmcp-mux Unix domain socket,与command/url互斥。
认证与传输¶
传输层走 Streamable HTTP,遇到 404 / 405 自动回退 SSE。认证两种方式:OAuth 的 token 存入 OS credential store;bearer 通过 bearerToken / bearerTokenEnv 配置。
OAuth 流程模型侧通过两个动作驱动:
mcp({ action: "auth-start", server: "notion" })
mcp({ action: "auth-complete", server: "notion", args: { redirectUrl: "..." } })
Web 菜单里也可以对单个 server 直接发起 Authorize。
模型侧用法¶
安装后模型侧的接口集中在 mcp 一个工具上。典型序列是先搜、再看、后调用:
mcp({ search: "screenshot" })
mcp({ describe: "chrome-devtools_take_screenshot" })
mcp({ tool: "chrome-devtools_take_screenshot", args: { format: "png" } })
需要提前建连时用 connect:
mcp({ connect: "chrome-devtools" })
args 可以是 JSON 对象,也可以是 JSON 字符串。
两个进阶能力:
mcpScript:在一次 JavaScript 请求内循环、搜索、调用多个 MCP 工具,适合单次请求串联多步的场景;- MCP prompts:
mcp({ prompt: "create_plan", server: "agent-board", args: "harden retry policy" })。
CLI 与人机命令¶
独立 CLI 提供两个子命令:
dsh-mcp-adapter init
dsh-mcp-adapter status
init 检测各宿主配置,status 查看插件与 server 状态。
Chat 侧 /mcp 命令族的完整列表:/mcp、/mcp status、/mcp list、/mcp json、/mcp setup、/mcp prompts、/mcp add-preset、/mcp add、/mcp connect、/mcp auth、/mcp enable、/mcp disable、/mcp remove。
适用场景与注意¶
适合的场景:
1、挂多个 MCP server,但不想让全部工具 schema 常驻上下文;
2、希望和其他宿主共用一份 .mcp.json;
3、敏感工具需要调用前人工确认(approveTools);
4、少数高频工具希望走原生路径(directTools)。
注意事项:
1、不要和 @deepseek-ai/dsh-mcp-client 挂同一批 server,会双重连接并争抢名称;
2、宿主特定配置默认不加载,需要时显式开启 hostConfigDiscovery 或写进 imports;
3、elicitation / sampling / MCP UI apps 在 dsh host 尚未支持;
4、插件以当前 dsh 进程的权限运行,安装前建议检查仓库源码与许可证——本项目 MIT,代码开在 GitHub。
经过上面的步骤,一个 dsh 实例就能按需接入任意数量的 MCP server,而上下文里始终只有 mcp 一个工具定义。这是这个插件的核心价值。
链接¶
- GitHub:https://github.com/NexusAgentX/dsh-mcp-adapter
- 社区目录页:https://www.skillhub.cn/plugins/NexusAgentX/dsh-mcp-adapter(社区目录为独立站点,与 DeepSeek / 幻方无官方从属关系)