前言¶
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