dsh-as-mcp:把 DeepSeek Harness 暴露爲 MCP 服務

前言

DeepSeek Harness(DSH)本身已經能管理 workspace、跑 agent 會話、讀寫文件和執行命令。若你同時在用 Claude Code、Codex、另一個 DSH 實例,或想在 CI 裏用腳本驅動同一套 harness,常見做法是再寫一層膠水:單獨封裝 API、或在本機重複實現沙箱與權限邏輯。

dsh-as-mcp 走另一條路:在 DSH 宿主進程內部掛一個 MCP 端點,對外暴露與 harness 一致的能力。通過 MCP 創建的會話就是 DSH 界面裏可見的真實會話,跑在同一沙箱、同一權限策略下,agent 側沒有「再實現一遍 DSH」。

下面介紹插件定位、工具能力、安裝接入方式,以及分發 token 前需要了解的安全邊界。

這是什麼

  • 名稱:dsh-as-mcp(npm 包名與插件 id 相同)
  • 維護者:xiseliuli
  • 分類:工作流(社區目錄 SkillHub)
  • 源碼:github.com/xiseliuli/dsh-as-mcp(MIT 許可證;package.json 當前版本 0.1.5)
  • 一句話:把正在運行的 DSH 實例暴露爲 MCP server,供任意 MCP 客戶端創建工作區、開 session、下發編碼任務、讀寫文件、執行 shell。

端點跑在宿主進程內,經插件註冊的 MCP 工具調用 harness 自帶的 workspace、session、fs、shell 等服務,而不是平行再造一套 agent 運行時。

核心功能

傳輸與鑑權

  • 客戶端經 Streamable HTTP 或 stdio(隨包提供的 dsh-as-mcp 橋接)連接。
  • 每個請求需 Bearer token,解析順序爲:插件配置 auth.token → $DSH_HOME/dsh-as-mcp/token → 首次運行自動生成並寫入(權限 0600)。
  • 默認 HTTP 端點:http://127.0.0.1:8790/mcp;無法設 Header 時可用 ?token=,文檔建議優先用 Header,避免憑證進 shell 歷史或代理日誌。

MCP 工具一覽

工具 作用
dsh_info 端點、token 來源、已啓用的工具組、當前 profile 可用的 harness 服務
workspace_create / workspace_list 註冊或列出工作區
session_create / session_list / session_messages / session_cancel 創建、列舉、讀記錄、取消 DSH agent 會話
session_prompt 向會話下發任務;默認等待本輪結束並返回回覆與 agent 調用的工具
file_read / file_write / file_list 經 DSH 文件系統服務讀寫、列目錄
shell_run 經 DSH shell 服務執行命令
dsh_tool_list / dsh_tool_call 在指定 sessionId 下列舉或調用 DSH agent 工具白名單內的工具

接入後應先調用 dsh_info,以區分「profile 未掛載某服務」與「命令執行失敗」等情況。

典型編碼鏈路

README 給出的順序是:建工作區 → 建會話 → 用自然語言任務驅動 agent:

workspace_create { path: "/Users/me/project" }
  -> session_create { workspaceId: "..." }
  -> session_prompt { sessionId: "...", prompt: "給 CLI 加一個 --verbose 開關,並補一個測試。" }
  • session_prompt:讓 DSH agent 自行規劃、改文件、調內置工具(含子 agent)。
  • file_* / shell_run:調用方直接操作,不經過 agent 推理。
  • dsh_tool_call:在已有會話上直接跑 harness 白名單內的 agent 工具;須先 dsh_tool_list,且必須帶 sessionId。

tools 配置項可以關閉某一組工具的暴露,但文檔強調:這收窄的是「客戶端能發現什麼」,不是操作系統級隔離(見下文「適用場景與注意」)。

安裝與啓用

DSH 通過 profile 的 bundle 機制加載插件;dsh plugin add 會寫入 dsh.profile.bundles,並由包內 cordis.patch.yml 提供默認插件行。安裝後需重啓 DSH——bundle patch 在啓動時讀取,不支持熱重載。

從 npm(推薦)

dsh plugin --profile <名稱> add dsh-as-mcp

在 DSH 源碼 checkout 內等價於:

pnpm dsh plugin --profile <名稱> add dsh-as-mcp

從 GitHub

dsh plugin --profile <名稱> add github:xiseliuli/dsh-as-mcp

Git 依賴拉的是源碼,需執行包的 prepare(tsdown && node scripts/build-client.mjs)。pnpm ≥10 可能因未放行構建腳本報 ERR_PNPM_GIT_DEP_PREPARE_NOT_ALLOWED;按報錯中的精確 git spec,在 ~/.dsh/profiles/<名稱>/pnpm-workspace.yaml 的 allowBuilds 裏放行後再重試 add,並建議 pin 到具體 commit。細節見倉庫 README「安裝」一節。

從本地 tarball

pnpm pack
dsh plugin --profile <名稱> add /絕對路徑/dsh-as-mcp-<版本>.tgz

確認已加載

dsh --profile <名稱> --dump-config | grep -A 30 '# == dsh-as-mcp'

環境要求(package.json):Node ^22.19.0 || >=24.0.0;Harness peer @deepseek-ai/dsh ≥ 0.1.5-rc.1。

DSH Desktop 的 desktop profile 不能直接用 CLI dsh plugin add,需按 README「裝進 DSH Desktop」手動 pnpm add tarball 並編輯 cordis.patch.yml,且避免與 dsh.profile.bundles 重複插入同 id 插件行。

典型用法:連接 MCP 客戶端

HTTP 客戶端

在 MCP 配置裏指向本地端點並帶上 token(設置面板的「複製」會生成已填 token 的片段):

{
  "mcpServers": {
    "dsh": {
      "type": "http",
      "url": "http://127.0.0.1:8790/mcp",
      "headers": { "Authorization": "Bearer <token>" }
    }
  }
}

僅支持 stdio 的客戶端

{
  "mcpServers": {
    "dsh": {
      "command": "npx",
      "args": ["-y", "dsh-as-mcp"],
      "env": { "DSH_AS_MCP_TOKEN": "<token>" }
    }
  }
}

本地可執行 dsh-as-mcp --help 查看橋接將使用的端點與 token 狀態。

冒煙驗證

安裝目錄下提供 scripts/smoke.mjs:握手、tools/list、dsh_info、workspace_list;成功時輸出 OK。加 --prompt "..." 可跑完整鏈路(臨時工作區 → 會話 → agent 任務)。

適用場景與注意

適合誰

  • 已在本機或內網跑 DSH,希望 Claude Code、Codex、另一個 agent、CI 腳本通過 MCP 標準 驅動同一 harness。
  • 需要遠程編排「真實 DSH 會話」(UI 可見、審計與權限與手工操作一致),而不是在外部進程裏模擬 coding agent。

安裝與信任

  • 插件以 當前 DSH 進程的用戶權限 運行;MCP 側的動作最終走 harness 的 fs、shell、session 服務。
  • 文檔將 bearer token 類比爲 SSH 私鑰:token 即安全邊界,默認監聽 127.0.0.1。持有 token 的調用方可通過 file_*、shell_run 觸及 DSH 進程能觸及的路徑;工作區主要約束 agent 的起點,並不圍住這些直接工具。
  • 橋是 實例級 的:session_list / session_messages 可看到本實例內其它會話(含你在 UI 裏手工開的對話),分發 token 前需評估隱私與信任範圍。
  • tools.shell: false 等開關不能替代獨立賬號或 OS 級沙箱;若調用方不可信,應單獨實例、非特權用戶,並在安裝前閱讀源碼與 MIT 許可證。

審批策略

  • approval.policy: inherit(默認):無瀏覽器接入時,需人工審批的工具對 agent 失敗關閉。
  • approval.policy: allow:對本插件創建的會話自動批准審批請求,便於無人值守任務,但擴大 agent 可執行範圍。

社區插件目錄 SkillHub 與 DeepSeek / 幻方無官方從屬關係;DSH 生態強調「一切皆插件」,本包亦標註 dsh-plugin topic 便於發現。

結尾

dsh-as-mcp 把 DSH 從「只能在本機 UI 或 CLI 裏用」擴展成 標準 MCP 後端:外部 agent 仍操作同一套 workspace、session 與沙箱,無需重複實現 harness。按 profile 安裝、重啓、配置 token 與客戶端後,用 dsh_info 覈對服務與工具組,再按 workspace_create → session_create → session_prompt 即可復現 README 中的編碼流程。

羽毛球分组比赛记分
小程序二维码

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

小夜