DSH Rice on a Stick:用 MCP 操作 DeepSeek Harness 真实会话

前言

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: exclusive
  • sessionTtlMs: 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
羽毛球分组比赛记分
小程序二维码

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

Xiaoye