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 中的编码流程。

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

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

小夜