Skip to main content
Glama

DSH ACP MCP Bridge

把 DeepSeek Harness 的 ACP 服务接入支持 stdio 的 MCP 宿主,提供会话、模型选择、后台任务、取消和子代理观察。Codex 是可用宿主之一;桥接不依赖 Codex,也不会读取或修改 Codex 配置。

版本 0.5.0 面向 Harness 0.1.3-alpha.1源码 · Releases。项目未发布到 npm,private: true 防止误发;从源码或 Release 压缩包安装。

ACP 与 MCP 分别负责什么

ACP 客户端 ── ACP stdio ──> Harness ACP profile
MCP 宿主 ── MCP stdio ──> 本桥接 ── ACP stdio ──> Harness ACP profile

Harness 的 ACP 服务可以直接接受 ACP 客户端,不需要此桥接。桥接为 MCP 宿主启动一个 ACP 子进程;启动命令始终使用构建后的 Harness CLI 和 --profile acp,不直接启动 ACP 包。

基础会话和模型工具不要求子代理扩展,但仍受 ACP 服务实际提供的标准方法限制。完整的子代理树和持久化事件读取需要配套 dsh-acp-extensions;它针对 Harness 0.1.3-alpha.1 提供自定义 ACP API,需要按其 README 适配和构建 Harness,不能只安装桥接就获得这些能力。

Related MCP server: cursor_worker

安装与配置

需要 Node.js ^22.19.0 || >=24.0.0,以及已安装依赖、完成构建、可以正常启动 ACP profile 的 Harness。先配置该 profile 的模型提供方和凭据;桥接本身不提供订阅登录或模型服务。

源码安装:

git clone https://github.com/krkr521/dsh-acp-mcp-bridge.git
cd dsh-acp-mcp-bridge
pnpm install --frozen-lockfile
pnpm build
pnpm test

Release 的 .tgz 可在独立目录中作为本地依赖安装,随后用 node <安装目录>/node_modules/dsh-acp-mcp-bridge/server.mjs 启动。源码安装直接使用仓库内的 server.mjs。服务通过 stdin/stdout 收发 MCP,不能用浏览器打开。

参考 mcp-server.example.json 配置宿主。所有路径必须替换为本机实际绝对路径,宿主的配置文件格式以其自身说明为准:

{
  "mcpServers": {
    "dshacp": {
      "command": "node",
      "args": ["/absolute/path/to/dsh-acp-mcp-bridge/server.mjs"],
      "env": {
        "DSH_ACP_ROOT": "/absolute/path/to/prepared-harness",
        "DSH_ACP_PROFILE": "acp",
        "DSH_HOME": "/absolute/path/to/private-dsh-home",
        "DSH_ACP_REQUIRE_EXTENSIONS": "1"
      }
    }
  }
}

Windows 路径在 JSON 中可写 D:/apps/prepared-harness,或对反斜杠转义。桥接继承宿主进程环境,ACP 子进程继承桥接环境;请在宿主配置中显式传入所需的 DSH_HOME 等变量。

多个 Harness 版本建议各用独立 DSH_HOME,ACP 与 Web 也建议独立配置,以免共享 SDK fallback、会话锁或不兼容数据。 迁移时自行备份并按对应 Harness 版本要求迁移配置、凭据和会话资料;桥接不会复制、升级或删除这些资料。私人 home、密钥和宿主个人配置都不要上传到仓库。

环境变量

用途

DSH_ACP_ROOT

必填,已构建 Harness 根目录,需存在 apps/cli/lib/bin.js

DSH_ACP_PROFILE

默认 acp,由 Harness CLI 加载。

DSH_HOME

传给 Harness 的独立私有配置与数据目录。

DSH_ACP_REQUIRE_EXTENSIONS

1 要求子代理扩展握手成功,否则连接失败;默认 0 允许基础 ACP 模式。

DSH_ACP_STARTUP_TIMEOUT_MS

initialize 等待时间,默认 30000,范围 1–300000 毫秒。

DSH_ACP_DEFAULT_MODEL_VALUE

新会话的默认 opaque model value,直接使用发现结果。

DSH_ACP_DEFAULT_PROVIDER / DSH_ACP_DEFAULT_MODEL

默认路由的便捷写法,必须成对提供,不能与 MODEL_VALUE 同时设置。

DSH_ACP_DEFAULT_REASONING_EFFORT

默认推理强度,使用该模型实际公布的值。

使用顺序

  1. 调用 status,确认 connectedagentCapabilitiessubagentObservation。这会启动 ACP,但不调用模型。

  2. 调用 list_models 获取 modelChoices[].value,然后在 new_sessionset_session_modelmodel_value。值属于 ACP 服务,不应自行拼接;providers 只是可解码 DSH 路由的便利视图,其他 opaque 值仍保留在 modelChoices

  3. prompt 等待单轮结果;较长任务用 start_prompt,持有返回的 runId,通过 activity 查看进度。将响应 nextCursor 原样传回下次请求的 after_cursor;状态变化可以返回空事件页。

  4. 需要停止时调用 cancel_prompt,继续读取 activity 直到终态。结束会话用 close_session,持久化历史仍由 Harness 保存;后续可 resume_session

  5. 增强 ACP 模式下,调用 list_subagents,从 entrieskind: "child"id,再传给 read_subagent.subagent_session_id。将 nextSeq 传回 after_seq;该序号属于持久化会话日志,与 MCP run cursor 不通用。

共 17 个 MCP 工具:statuslist_modelsdefault_routeset_default_routerunnew_sessionsession_optionsset_session_modelpromptstart_promptactivitycancel_promptlist_sessionsresume_sessionlist_subagentsread_subagentclose_session

set_default_route 只改变当前 MCP 进程后续新建会话的默认选择,不修改已有会话,也不写入配置。持久默认值使用环境变量;未设置桥接默认值时,由 Harness profile 决定。

扩展与生命周期约定

桥接在 initialize 的 _meta["_deepseek.ai/dsh"] 中发送 { "subagents": true }。只有服务返回版本 1,且公布 _deepseek.ai/dsh/subagents/list_deepseek.ai/dsh/subagents/activity 两个方法时,subagentObservation 才为 true。基础模式下调用两个子代理工具会返回明确的 MCP isError,不会把普通会话接口冒充子代理观察。严格模式用于希望启动即发现适配缺失的部署。

子代理请求由增强 ACP 服务检查当前连接拥有的根会话及其后代关系;桥接原样返回扩展结果。Harness 0.1.3 的持久化 assistant/message 包含 data.streamdata.message.content,读取的是已提交事件,不保证正在生成的每一个 token 都立即出现在子代理日志中,也不会构造旧版 assistant/chunk 序号。

模型发现和默认路由校验会创建临时会话,按服务公布的能力关闭,并仅在支持 delete 时删除。0.1.3 的 close 保留持久化记录,因此列表中可能出现空探测会话。若服务既不提供 close 也不提供 delete,发现操作会在创建会话前失败。其他可选标准方法以 ACP 服务是否实现为准,未实现时返回协议错误。

同一会话的操作串行执行。宿主取消同步 promptrun 请求时,桥接向对应 ACP 任务发送取消;run 在创建会话期间收到取消则关闭新会话,不发模型请求。start_prompt 返回后由 cancel_prompt 显式管理后台任务。排队期间或恢复会话期间取消,不会继续发出模型 prompt。MCP 宿主关闭 stdin 或进程收到退出信号时,桥接先结束 ACP stdin 并等待退出,超过 5 秒终止该子进程;Windows 启动隐藏控制台。后台 run 与其进度保存在桥接进程内存中,记录总数超过 100 时优先淘汰最早创建的已结束记录,活动任务不会被淘汰;重启后不可继续使用旧 runId,应通过持久化 sessionId 恢复会话。

桥接不实现交互式批准界面,ACP requestPermission 一律返回 cancelled,同时记录到任务结果的 permissionRequestsCancelled。需要批准才能执行的工具会被拒绝;不要把本桥接当作自动批准器。

验证

pnpm test 包括模型路由测试和真实 ACP/MCP stdio fixture;fixture 使用临时目录,不访问私人 DSH home,不调用付费模型。pnpm build 对直接运行的 ESM 源文件做 Node 语法检查,无编译产物要求。pnpm pack --pack-destination artifacts 生成本地发布包并执行同一检查。

已完成检查及其范围见 VALIDATION.md。显式设置 Harness 环境后可运行 pnpm smoke:live,它连接实际 ACP 并查询能力与模型目录,不发送 prompt;会按上述约定创建并释放探测会话。

本项目采用 MIT,来源与依赖说明见 NOTICE.mdLICENSE

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/krkr521/dsh-acp-mcp-bridge'

If you have feedback or need assistance with the MCP directory API, please join our Discord server