Agent.Space 博客

Agent Client Protocol 和 MCP 有什么区别?

对比 Agent Client Protocol(ACP)与 MCP:前者连接客户端与 Coding Agent,后者连接 AI 应用与工具、资源和数据,并说明何时用一个或组合使用。

Agent Client Protocol(ACP,智能体客户端协议)与 Model Context Protocol(MCP,模型上下文协议)互相补充,并不是直接替代关系。ACP 主要规范客户端——通常是代码编辑器或 IDE——与 Coding Agent 之间的通信;MCP 规范 AI 应用或 Agent 如何连接外部工具、资源和数据。

一个 Coding 产品可以在“客户端到 Agent”的边界使用 ACP,在“Agent 到外部能力”的边界使用 MCP。这是一种有用的组合方式,不是协议规定的固定栈。产品可以同时使用两者,也可以只用其中一个,甚至两个都不用。

本文中的“ACP”专指 Agent Client Protocol。这个缩写也被其他无关协议使用,因此判断文档或产品支持状态时,应先确认完整名称。

一分钟看懂 ACP 与 MCP

ACP 官方介绍文档把核心边界定义为代码编辑器或 IDE 与 Coding Agent 之间的通信。MCP 官方介绍文档则把 MCP 定义为连接 AI 应用与外部系统的开放标准。

问题Agent Client Protocol(ACP)Model Context Protocol(MCP)
它连接什么?客户端或编辑器与 Coding AgentAI 应用或 Agent 与外部系统
典型角色是什么?ACP Client 与 ACP AgentMCP Host、每条连接对应的 MCP Client,以及 MCP Server
它解决什么问题?用一套共同接口替代编辑器与每个 Agent 之间的一次性集成用可复用的 Server 接口替代工具与数据的一次性集成
它针对什么优化?交互式 Coding Agent 用户体验不同 AI 应用之间的上下文与能力交换
通常有哪些内容跨过边界?Prompt、Session 更新、权限请求、工具活动,以及 diff 等 Coding 专用输出Tools、resources、prompts、发现信息和操作结果
它是否面向 Coding 场景?是,主要用例是 Coding Agent 及其客户端不限于 Coding,它是通用的 AI 应用集成协议
可以不使用另一个协议吗?可以可以
两者可以一起使用吗?可以;通过 ACP 连接的 Agent 也可以连接 MCP Server可以;MCP 可以让该 Agent 使用外部能力

两个协议都使用 JSON-RPC 的相关概念,ACP 也会在合适的地方复用 MCP 的 JSON 表示。这种共同基础可以减少集成工作,但不会让两者的消息、角色或责任变得可以互换。

Agent Client Protocol 规范的是什么

ACP 处理的是 Coding Agent 与其外围用户界面之间的关系。常见情况下,这个应用就是代码编辑器或 IDE。Client 启动或连接 Agent,在 Session 中发送 Prompt、接收流式更新、呈现 Agent 活动,并处理需要用户批准的请求。

这些交互需要的不只是通用的工具调用 API。Coding Client 可能需要展示增量进度、终端活动、拟议改动、diff 和权限决定,同时把多个 Session 分开管理。ACP 官方架构说明介绍了双向 JSON-RPC、并发 Session、流式通知,以及 Agent 向编辑器发起的权限请求。ACP 还定义了面向 Coding 场景的表示方式,让 Client 能把这些内容组织成连贯的界面。

在常见的本地实现中,编辑器会把 Agent 作为子进程启动,并通过 stdio 通信。ACP 也面向远程 Agent,但官方文档目前仍把完整的远程支持描述为持续推进中的工作。评估具体实现时要留意这条边界:支持协议,并不自动代表本地和远程场景的行为完全相同。

ACP 不替产品选择模型、模型 Provider、工具目录或完整 Runtime 架构,这些仍是独立的产品决策。如果希望进一步了解 ACP 本身,包括角色与 Session 模型,可以阅读这篇 Agent Client Protocol 入门指南

MCP 规范的是什么

MCP 处理的是另一个边界:AI 应用如何访问外部能力和上下文。MCP Host 是 AI 应用;它会为每个 MCP Server 连接创建一个 MCP Client,Server 则暴露可以被 Host 发现和使用的能力。

当前的 MCP 官方架构文档列出了三种核心 Server primitive(原语,也就是协议定义的基础能力):

  • Tools 是 AI 应用可以调用的可执行函数,例如搜索服务、查询数据库或修改文件。
  • Resources 提供上下文数据,例如文件内容、数据库记录或 API 响应。
  • Prompts 提供可复用的交互模板。

因此,MCP 并不只服务于 Coding。Coding Agent 可以使用它,普通助手、企业聊天机器人或其他 AI Host 也可以。MCP 定义上下文和能力如何交换;它的架构明确不规定应用如何使用 LLM,也不规定应用如何管理获得的上下文。

所以,在 ACP 与 MCP 的对比中,“Client”这个词容易造成误解。ACP Client 是与 Coding Agent 对话的用户端应用;MCP Client 则是 MCP Host 内部负责维持一条 MCP Server 连接的组件。它们是各自协议中的角色,不是同一个组件的两种叫法。

ACP 与 MCP 如何配合

一种可能的 Coding 产品架构如下:

text
开发者ACP Client / 编辑器 ⇄ ACP ⇄ Coding Agent(MCP Host)                                  └─ MCP Client ⇄ MCP ⇄ MCP Server ⇄ 外部系统

在这个设计中,ACP 承载 Client 与 Agent 之间的交互式 Coding Session。Coding Agent 同时充当 MCP Host,并管理一条连接到 Server 的 MCP Client 连接;Server 暴露 tools、resources 或 prompts,也可以继续连接其他外部系统。一个请求可以从编辑器发起,由 Agent 处理,再通过 Server 触发 MCP 操作,最后经 ACP Session 把进度和结果返回给用户。

ACP 的设计支持这种组合,但并不强制这样做。ACP 架构描述了一种方式:Client 把已经配置的 MCP Server 信息交给 Agent,让 Agent 建立自己的 MCP 连接。它不会把 ACP 连接变成 MCP transport,也不要求所有 ACP 实现都暴露相同的工具拓扑。

以下几种只出现一个协议的设计同样有效:

  • 通过 ACP 连接的 Coding Agent 可以使用内置工具、原生集成或直接 API,而不使用 MCP。
  • AI 应用可以作为 MCP Host 连接多个 Server,同时完全不通过 ACP 暴露 Coding Agent。
  • 编辑器与 Coding Agent 可以使用另一套集成接口,而 Agent 仍通过 MCP 使用工具和数据。

因此,“ACP 位于 MCP 上层”只是在描述某一种实现,不是两个协议之间的普遍层级关系。

你需要哪个协议

先看你要标准化的边界,而不是先看哪个协议名字更熟悉。

你的目标更可能的选择原因
构建能连接多个 Coding Agent 的编辑器或 ClientACP需要解决的是用户端 Client 与每个 Agent 之间的互操作问题
构建可以出现在兼容 Client 中的 Coding AgentACPAgent 需要一套用于 Session、更新、权限和 Coding UX 的共同合同
向多个 AI 应用暴露可复用工具、数据源或工作流MCP Server这些能力应能被多个 MCP Host 发现和使用
构建会使用外部工具与上下文的 AI 应用MCP Host 与 Client应用需要连接一个或多个 MCP Server
构建 Client、Agent 与能力层可分别替换的完整 Coding 产品考虑同时使用两者两个协议可以分别标准化不同边界,但是否都需要由产品架构决定
使用现成 Coding 产品,而不是自己开发集成通常不需要自己实现任何一个查看产品明确记录的协议支持,只配置实际需要的功能

如果你的任务是为 OpenCode 配置工具,那么协议对比不能代替具体实施步骤。请按 OpenCode MCP 配置指南操作,并同时核对产品的最新文档。

ACP 与 MCP 对比中的常见误区

把两者当成争夺同一个位置的竞争协议。 ACP 主要处理 Client 与 Coding Agent 之间的体验,MCP 主要处理工具和上下文访问。用一个替换另一个,会留下不同的通信边界没有解决。

把一张有用的图变成硬性的协议栈。 Client → ACP → Agent → MCP → Tool 是一种有效组合,但不是任何一个协议的定义。两侧都可以使用其他集成方式。

认为“Client”代表同一个角色。 ACP 与 MCP 各自定义参与方。分配实现责任前,先明确写出编辑器、Coding Agent、MCP Host、MCP Client 和 MCP Server。

认为共同的 JSON-RPC 基础意味着可以互换。 Transport 和编码方式相似,并不会消除方法、数据模型、生命周期规则或 UX 责任上的差异。

只根据架构图推断协议支持状态。 兼容性是实现事实。应检查产品当前文档、支持的协议版本、连接方式和功能覆盖,不要因为概念图看起来吻合就假定已经支持。

先看边界的检查清单

在采用 ACP、MCP 或两者之前,先回答五个问题:

  1. 哪两个组件需要稳定合同? 直接写出两端名称,不要用“平台”或“集成”含糊带过。
  2. 这个边界是否承载交互式 Coding Session? 如果包含 Agent 轮次、流式 Coding 活动、权限和 diff,应评估 ACP。
  3. 这个边界是否暴露可复用能力或上下文? 如果多个 AI 应用需要发现 tools、resources 或 prompts,应评估 MCP。
  4. 谁负责认证、权限和连接生命周期? 把 Client 到 Agent 的策略与每条 MCP Server 连接分开,不要假定一个协议会替另一个协议完成安全控制。
  5. 今天到底实现了什么? 按 Client、Agent、Host 和 Server 各自的当前文档与兼容版本逐项核对。

如果 Agent、模型和 Provider 这几个概念仍混在一起,可以先看清 Agent harness 与模型的区别。每个组件的职责清楚后,协议选择会容易很多。

实际结论

当集成边界是客户端或编辑器 ↔ Coding Agent时,选择 ACP;当边界是 AI 应用或 Agent ↔ 工具、资源和数据时,选择 MCP。如果同一个产品同时存在这两个互操作问题,可以考虑两者都用——但应把它们保留为两份独立合同,而不是硬性的固定协议栈。

边界清楚以后,可以打开 Agent.Space,先从一个权限和结果都容易检查的小而可逆的任务开始。