前言¶
DeepSeek Harness(dsh)本身已經提供 Web 界面裏的會話中心、模型與 preset、工作區管理。若你希望在 Claude Code、Cursor、Cline 或自研 Agent 裏「遠程」創建、投遞任務、輪詢結果,常見做法是再包一層 shell 或腳本,會話狀態往往與 UI 裏看到的不一致。
下面介紹的是 Leawind 維護的工作流類 dsh 插件 DSH Rice on a Stick(包名 dsh-rice-on-a-stick):在本地 dsh 進程內啓動 MCP 服務,把 session 控制器、模型目錄、工作區與實時活動暴露給任意 MCP 客戶端;同一套能力也會在本實例內註冊爲原生 rice_ 工具,便於 dsh 自身會話自舉編排。
這是什麼¶
插件通過 Streamable HTTP(默認 http://127.0.0.1:8090/mcp)對接 MCP 客戶端,請求經 sessionController 進入與 UI 相同的 dsh 宿主,而不是簡單的 shell 包裝。
架構關係可概括爲:
Claude Code / Cursor / Cline / your agent
│ Streamable HTTP · 127.0.0.1:8090/mcp
▼
dsh-rice-on-a-stick
│ sessionController · agents · tools · workspaces
▼
dsh host — the same sessions the UI shows
- 維護者:Leawind
- 許可證:MIT
- 依賴 dsh 版本:
>= 0.2.1-rc.2(engines.dsh) - 插件當前版本(package.json):
0.1.0-rc.1 - Node:
>= 18
完整工具與資源定義見倉庫 src/mcp/tools/、src/mcp/resources.ts;Agent 側建議先調用 dsh_get_started,其中包含 dsh 速成、配方與錯誤恢復說明。
核心功能¶
真實會話與異步編排¶
工具走宿主 session 控制器,支持創建、prompt、排隊、fork、歸檔、切換模型等。長任務採用 session_submit / session_poll / session_result 模式:客戶端超時只結束等待,不會中斷 dsh 側 turn;若要停止執行,需通過 session_cancel。
新建會話必須顯式傳入 provider、model、preset(來自 model_list),插件不會自動填默認;用已有 sessionId 恢復時會沿用該會話的 model 與 preset。
審批(Approvals)¶
提供 approval_list / approval_answer / approval_policy。配置項 approvalControl 決定由誰應答本插件創建或恢復的會話上的審批:
| 值 | 含義 |
|---|---|
exclusive(默認) |
僅 MCP 調用方應答,UI 不再展示該請求 |
fallback |
UI 優先,UI 無法應答時交給調用方 |
off |
僅展示,不應答 |
自舉與部署形態¶
同一 MCP 工具面在本 dsh 實例內註冊爲原生 rice_ 工具。配置 http: false 時可做「僅自舉、不對外 HTTP」的部署。
默認「Tools-first」¶
默認綁定 127.0.0.1,可選 Bearer 認證、Host/Origin 允許列表、空閒 transport 會話回收;resourceFirst 默認爲 false,只理解 tools 的客戶端無需改動。資源優先模式需顯式開啓。
環境與前置條件¶
- 需要 web/desktop 類 profile 才能使用設置面板與完整 session 能力;minimal/headless profile 仍可跑 MCP 服務。
- 僅支持 stdio 的 MCP 客戶端需自行準備 Streamable HTTP 橋接。
- 包 未發佈到 npm,需從構建後的本地目錄以 link 方式安裝(見下一節)。
安裝與啓用¶
官方 README 給出的流程如下:克隆倉庫、安裝依賴、構建,再用 link 安裝到 web profile。
git clone https://github.com/Leawind/dsh-rice-on-a-stick.git
cd dsh-rice-on-a-stick
npm install
npm run build
dsh plugin --profile web add link:"$(pwd)"
完成後 重啓 dsh web,在 Settings → MCP Service 中查看服務狀態。卸載:
dsh plugin --profile web remove dsh-rice-on-a-stick
連接 MCP 客戶端¶
默認端點:http://127.0.0.1:8090/mcp。未配置 token 時認證關閉;開啓後從 Settings → MCP Service 取得 token,以 Bearer 方式發送:
{
"mcpServers": {
"dsh": {
"type": "http",
"url": "http://127.0.0.1:8090/mcp",
"headers": { "Authorization": "Bearer <token>" }
}
}
}
典型調用順序示例(工具名與參數字段與 README 一致):
{ "name": "model_list", "arguments": {} }
{ "name": "session_create", "arguments": { "cwd": "/path/to/project", "provider": "…", "model": "…", "preset": "standard" } }
{ "name": "session_submit", "arguments": { "sessionId": "…", "task": "…" } }
{ "name": "session_poll", "arguments": { "sessionIds": ["…"], "waitMs": 20000 } }
{ "name": "session_result", "arguments": { "sessionId": "…", "requestId": "…" } }
配置要點¶
字段與默認值以 src/core/config.ts 爲唯一來源;設置面板覆蓋全部配置項。結構類字段(監聽地址與端口、對外 MCP 開關、resource-first、審批應答方與等待上限、transport 空閒 TTL、Host 允許列表等)在失焦或關閉設置對話框時寫入並自動重載插件;無 Apply 按鈕,非法值就地報錯且不寫入。
常用默認:
resourceFirst: false(tools 優先)approvalControl: exclusivesessionTtlMs: 604800000(一週)
在 profile 的 cordis.patch.yml 中可覆蓋 transport 等:
- id: dsh-rice-on-a-stick
config:
http: true
port: 8090
host: 127.0.0.1 # localhost only by default; add auth before exposing
# authToken: 'your-secret-token'
適用場景與注意事項¶
適合誰:已在用 dsh 做本地/agent 工作流,希望用 MCP 統一驅動「與 UI 同源」的會話;或希望在同一 dsh 實例內用 rice_ 工具做自編排。
安全(務必閱讀):插件暴露的是 本地代碼執行 能力。默認僅監聽 127.0.0.1,但未配置 authToken 時,本機任意能訪問該端口的進程都可驅動 dsh。建議設置 authToken;在未做反向代理、TLS 與認證前,不要綁定 0.0.0.0 或暴露到局域網/公網。會話 cwd 無目錄白名單,調用方可指定任意路徑。原生 rice_ 工具繞過 HTTP/認證,本實例內所有會話均可調用;若不需要,可關閉對應註冊開關。
安裝前:插件以 當前 dsh 進程權限 運行,安裝前應自行審閱源碼與 MIT 許可證。項目源於 chushixixin/dsh-harness-mcp-server 的分支演進,現爲獨立倉庫。
DeepSeek Harness 生態強調「一切皆插件」;社區目錄站點與 DeepSeek / 幻方無官方從屬關係,本文僅作第三方插件說明。
結尾¶
經過上面的步驟,你可以在 MCP 客戶端裏創建、投遞與輪詢 dsh 真實會話,並與 UI 側狀態對齊;複雜編排可從 dsh_get_started 與倉庫 docs/architecture.zh.md 入手。
- 社區目錄頁:https://www.skillhub.cn/plugins/Leawind/dsh-carrot-on-a-stick
- 源碼與 README:https://github.com/Leawind/dsh-rice-on-a-stick