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、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 / 幻方無官方從屬關係)
羽毛球分组比赛记分
小程序二维码

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

小夜