dsh-mcp-adapter:让 DeepSeek Harness 按需调用 MCP,而不是把全部 schema 塞进上下文

前言

给 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、toolargs 真正调用。上下文里始终只有一个工具定义,schema 成本从「每次请求 × 全部工具」变成「调用时才拉取」。

懒启动与元数据缓存

server 不在启动时全部连上。lifecycle 支持 lazy(默认)/ eager / keep-alive / lazy-keep-aliveidleTimeout 控制空闲 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.jsondisabled 字段,不会复制凭据。

宿主配置发现

插件能发现 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"]
      }
    }
  }
}

几个值得单独说明的字段:

  • directToolstrue 或工具名列表,把热路径工具提升为原生 dsh 工具,高频工具可以绕过代理这一跳;
  • includeTools / excludeTools / searchKeywords:工具过滤,支持 glob 与搜索关键词;
  • approveToolstrue 或 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 / 幻方无官方从属关系)
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye