MCP vs A2A vs ACP

How AI agents actually talk — to their tools, and to each other.

Các AI agent thực sự "nói chuyện" ra sao — với tool, và với nhau.

The mental model. Three protocols answer three slices of one question: how do the pieces of an agentic system communicate?
Vertical — MCPAn agent reaching down to its tools & data.
Horizontal — A2A & ACPAgents reaching across to each other as peers.
They are complementary, not competitors.
Cách hình dung. Ba giao thức trả lời ba lát cắt của cùng một câu hỏi: các thành phần của một hệ thống agent giao tiếp với nhau ra sao?
Trục dọc — MCPAgent vươn xuống tool & dữ liệu của nó.
Trục ngang — A2A & ACPCác agent vươn ngang tới nhau như đồng cấp.
Chúng bổ sung cho nhau, không phải đối thủ.
● MCP · Agent → Tool

Model Context Protocol

By Anthropic → Agentic AI Foundation (Linux Foundation, Dec 2025) · the "USB-C port for AI applications"

Của Anthropic → Agentic AI Foundation (Linux Foundation, 12/2025) · "cổng USB-C cho ứng dụng AI"

One standard way to plug an agent into any tool or data source — so you don't hand-write a bespoke integration for every API. Turns an M × N problem into M + N.

Một chuẩn duy nhất để cắm agent vào bất kỳ tool / nguồn dữ liệu nào — khỏi phải tự viết tích hợp riêng cho từng API. Biến bài toán M × N thành M + N.

Host AppUser ⇄ LLM ⇄ MCP Client
Host AppNgười dùng ⇄ LLM ⇄ MCP Client
│ JSON-RPC (stdio / Streamable HTTP)
▼
MCP ServerGitHub
MCP ServerPostgres
MCP ServerWeather

The flow

Luồng hoạt động

Server exposes: Tools (callable functions) · Resources (read-only data) · Prompts (reusable templates). Mid-task input: the server answers “input required” and the client resends (Sampling and Roots are deprecated).

Wire (spec 2026-07-28, stateless — no handshake, no session): JSON-RPC 2.0 over stdio (local) or Streamable HTTP (remote). Streamable HTTP replaced the old HTTP+SSE transport in spec 2025-03-26; SSE is now just optional streaming inside it. Auth: OAuth 2.1 for remote servers. Long work: the Tasks extension.

Server phơi bày: Tools (hàm gọi được) · Resources (dữ liệu chỉ đọc) · Prompts (mẫu tái sử dụng). Cần thêm đầu vào giữa chừng: server trả lời “cần thêm đầu vào”, client gửi lại request (Sampling và Roots đã deprecated).

Truyền tải (spec 2026-07-28, stateless — không handshake, không session): JSON-RPC 2.0 qua stdio (cục bộ) hoặc Streamable HTTP (từ xa). Streamable HTTP thay thế transport HTTP+SSE cũ từ spec 2025-03-26; SSE giờ chỉ là phần stream tuỳ chọn bên trong nó. Xác thực: OAuth 2.1 cho server từ xa. Việc chạy dài: extension Tasks.

● A2A · Agent → Agent

Agent2Agent Protocol

By Google → Linux Foundation (since June 2025) · autonomous peer collaboration

Của Google → Linux Foundation (từ 6/2025) · cộng tác giữa các agent đồng cấp tự chủ

For when a single agent can't finish a task alone and needs a capable peer. Remote agents are treated as opaque — you only see the Agent Card, never their internal tools or framework.

Dành cho tình huống một agent không tự làm xong tác vụ và cần một đồng cấp đủ năng lực. Remote agent được coi là hộp đen — bạn chỉ thấy Agent Card, không thấy tool / framework nội bộ của nó.

Client Agent"Can't finish alone"
Client Agent"Không tự làm xong"
→1. discover
/.well-known/agent-card.json
1. khám phá
/.well-known/agent-card.json
Agent Cardskills · endpoint · authkỹ năng · endpoint · auth
▼ 2. delegate task
▼ 2. giao task
Remote Agentworking → input-required → completed → Artifact
Remote Agentworking → input-required → completed → Artifact
↺ input-required → loops back to client for missing input↺ input-required → quay lại client xin thông tin còn thiếu

Task lifecycle

Vòng đời của Task

submitted → working → input-required ⇄ working → completed (full set: submitted, working, input-required, auth-required, completed, failed, canceled, rejected; v1.0 writes them as TASK_STATE_* enums). The input-required loop makes A2A built for long-running, multi-turn collaboration.

submitted → working → input-required ⇄ working → completed (đầy đủ: submitted, working, input-required, auth-required, completed, failed, canceled, rejected; v1.0 viết dạng enum TASK_STATE_*). Vòng lặp input-required khiến A2A phù hợp cho cộng tác nhiều lượt, chạy dài.

Discovery: Agent Card at /.well-known/agent-card.json (was agent.json before v0.3). Wire (since v0.3): JSON-RPC 2.0, gRPC or HTTP+JSON (REST) over HTTP(S), plus SSE streaming and push notifications.

Khám phá: Agent Card tại /.well-known/agent-card.json (trước v0.3 là agent.json). Truyền tải (từ v0.3): JSON-RPC 2.0, gRPC hoặc HTTP+JSON (REST) qua HTTP(S), kèm luồng SSE và push notification.

● ACP · Agent → Agent (REST)

Agent Communication Protocol

By IBM / BeeAI · REST-first — historical, merged into A2A (2025)

Của IBM / BeeAI · ưu tiên REST — đã thành lịch sử, gộp vào A2A (2025)

Same agent-to-agent problem as A2A, but treats agents as ordinary web resources you call over plain HTTP — no JSON-RPC envelope. Instantly familiar to any web developer.

Cùng bài toán agent–agent như A2A, nhưng coi agent như tài nguyên web thường, gọi qua HTTP thuần — không cần lớp bọc JSON-RPC. Quen thuộc ngay với mọi lập trình viên web.

Status (as of 2026): in August 2025 ACP was announced as merging into A2A under the Linux Foundation. New projects should use A2A — its HTTP+JSON (REST) binding covers the REST-first use case. Read this card as history.
Name clash: "ACP" today also means Zed’s Agent Client Protocol (code editor ↔ coding agent) and the Agentic Commerce Protocol (OpenAI / Stripe, agents making purchases). Different things — ask which one.
Hiện trạng (tính đến 2026): tháng 8/2025, nhóm ACP thông báo gộp ACP vào A2A dưới Linux Foundation. Dự án mới hãy dùng A2A — binding HTTP+JSON (REST) của nó đáp ứng nhu cầu ưu tiên REST. Hãy đọc thẻ này như lịch sử.
Trùng tên: "ACP" ngày nay còn chỉ Agent Client Protocol của Zed (trình soạn thảo code ↔ coding agent) và Agentic Commerce Protocol (OpenAI / Stripe, agent đi mua hàng). Là những thứ khác nhau — hãy hỏi lại là cái nào.
Caller Agentdiscovers via Manifest
Caller Agentkhám phá qua Manifest
→direct HTTP / RESTgọi HTTP / REST trực tiếp
Peer Agentsync: result in response
async: SSE progress stream
Peer Agentsync: kết quả trong response
async: luồng SSE báo tiến độ

The flow

Luồng hoạt động

Putting it together

Ghép tất cả lại

They compose. A user talks to an agent; that agent uses MCP to reach its own tools; when it hits work outside its scope, it uses A2A to delegate to a specialist peer; and that peer uses its own MCP servers to finish the job.

Chúng kết hợp được. Người dùng nói chuyện với một agent; agent đó dùng MCP để với tới tool của nó; khi gặp việc ngoài phạm vi, agent dùng A2A để giao việc cho một đồng cấp chuyên biệt; và đồng cấp đó lại dùng các MCP server của riêng nó để hoàn tất.

User
Người dùng
▼
Agent A
→MCP
tools / data
công cụ / dữ liệu
▼ A2A (delegate what it can't do)
▼ A2A (giao phần không tự làm được)
Agent B
→MCP
its own tools / data
công cụ / dữ liệu riêng

Quick comparison (as of 2026)

So sánh nhanh (tính đến 2026)

DimensionMCPA2AACP (→ A2A)
DirectionAgent → Tool (vertical)Agent → Agent (horizontal)Agent → Agent (horizontal)
OriginAnthropic → AAIF (Linux Foundation)Google → Linux FoundationIBM / BeeAI
DiscoveryServer config / listingAgent Card (/.well-known/agent-card.json)Agent Manifest
Wire formatJSON-RPC 2.0JSON-RPC 2.0, gRPC, HTTP+JSON (REST)REST over HTTP
Transportstdio, Streamable HTTPHTTP(S) + SSE + push notif.HTTP sync + async SSE
Long tasksTool call result; Tasks extensionTask states + input-requiredAsync SSE stream
AuthOAuth 2.1 (remote)Declared in Agent CardHTTP auth
StatusActiveActiveMerged into A2A (Aug 2025)
Tiêu chíMCPA2AACP (→ A2A)
HướngAgent → Tool (dọc)Agent → Agent (ngang)Agent → Agent (ngang)
Nguồn gốcAnthropic → AAIF (Linux Foundation)Google → Linux FoundationIBM / BeeAI
Khám pháCấu hình / liệt kê serverAgent Card (/.well-known/agent-card.json)Agent Manifest
Định dạng truyềnJSON-RPC 2.0JSON-RPC 2.0, gRPC, HTTP+JSON (REST)REST qua HTTP
Transportstdio, Streamable HTTPHTTP(S) + SSE + push notif.HTTP sync + async SSE
Tác vụ dàiKết quả tool call; Tasks extensionTrạng thái task + input-requiredLuồng SSE bất đồng bộ
Xác thựcOAuth 2.1 (từ xa)Khai báo trong Agent CardXác thực HTTP
Hiện trạngĐang hoạt độngĐang hoạt độngĐã gộp vào A2A (8/2025)

Bottom line: MCP = how does my agent use tools? A2A = how do agents work with each other? Build with MCP to give one agent reach; add A2A when many agents must collaborate.

Kết luận: MCP = agent của tôi dùng tool ra sao? A2A = các agent làm việc với nhau ra sao? Dùng MCP để cho một agent có "tầm với"; thêm A2A khi cần nhiều agent cộng tác.

Which one do I need? — 30-second decision treeCần cái nào? — Cây quyết định 30 giây

What are you connecting?
├─ Agent → tool, API, database, files?
│   └─▶ MCP  (local: stdio · remote: Streamable HTTP + OAuth)
├─ Agent → another agent someone else builds or runs?
│   └─▶ A2A  (publish an Agent Card, delegate tasks)
├─ Two "agents" in one codebase, same team, same process?
│   └─▶ Neither yet: a function call or a sub-agent is enough
├─ Someone says "ACP"?
│   ├─ IBM/BeeAI Agent Communication Protocol ─▶ use A2A (merged)
│   ├─ Editor ↔ coding agent (Zed)             ─▶ Agent Client Protocol
│   └─ Agent buying things (OpenAI/Stripe)     ─▶ Agentic Commerce Protocol
└─ Both tools and peer agents?
    └─▶ MCP for each agent's tools + A2A between agents
Bạn đang nối cái gì?
├─ Agent → tool, API, database, file?
│   └─▶ MCP  (cục bộ: stdio · từ xa: Streamable HTTP + OAuth)
├─ Agent → agent khác do người khác xây hoặc vận hành?
│   └─▶ A2A  (công bố Agent Card, giao task)
├─ Hai "agent" trong cùng codebase, cùng team, cùng tiến trình?
│   └─▶ Chưa cần: một lời gọi hàm hoặc sub-agent là đủ
├─ Có người nhắc "ACP"?
│   ├─ Agent Communication Protocol (IBM/BeeAI) ─▶ dùng A2A (đã gộp)
│   ├─ Editor ↔ coding agent (Zed)              ─▶ Agent Client Protocol
│   └─ Agent đi mua hàng (OpenAI/Stripe)        ─▶ Agentic Commerce Protocol
└─ Cần cả tool lẫn agent đồng cấp?
    └─▶ MCP cho tool của từng agent + A2A giữa các agent

SecurityBảo mật

Anti-patternsAnti-patterns

MistakeWhy it's wrongThe fix
New remote MCP server on old HTTP+SSEDeprecated since 2025-03-26Streamable HTTP
New project on IBM's ACPMerged into A2A in 2025A2A (REST binding if you want plain HTTP)
A2A between two functions in one appNetwork, auth and task states for a function callCall the function
Every internal API as an MCP toolCosts tokens, confuses tool choiceExpose only what the agent needs
MCP servers from random repos, full accessTool poisoning runs with your permissionsReview, pin versions, narrow scopes
Hard-coding agent.jsonRenamed in A2A v0.3agent-card.json
Sai lầmVì sao saiCách sửa
MCP server từ xa mới dùng HTTP+SSE cũĐã bị deprecated từ 2025-03-26Streamable HTTP
Dự án mới dùng ACP của IBMĐã gộp vào A2A năm 2025A2A (binding REST nếu muốn HTTP thuần)
A2A giữa hai hàm trong cùng appThêm lượt gọi qua mạng, xác thực, trạng thái task cho việc một lời gọi hàm làm đượcGọi hàm trực tiếp
Mọi API nội bộ thành MCP toolTốn token, model khó chọn toolChỉ expose thứ agent cần
MCP server từ repo lạ, toàn quyềnTool poisoning chạy với quyền của bạnĐọc code, ghim phiên bản, thu hẹp quyền
Hard-code agent.jsonĐã đổi tên ở A2A v0.3agent-card.json

Pre-production checklistChecklist trước khi lên production

What to read nextHọc tiếp

Three things to rememberBa câu cần nhớ

  1. MCP is vertical, A2A is horizontal. Real systems use both.
  2. ACP (IBM) is now part of A2A. And "ACP" may also mean Zed's Agent Client Protocol or the Agentic Commerce Protocol.
  3. Every server and Agent Card is untrusted until checked. Least privilege, OAuth, a human click before anything risky.
  1. MCP là trục dọc, A2A là trục ngang. Hệ thống thực tế dùng cả hai.
  2. ACP (IBM) giờ là một phần của A2A. Và "ACP" còn có thể là Agent Client Protocol của Zed hoặc Agentic Commerce Protocol.
  3. Mọi server và Agent Card đều không đáng tin cho tới khi kiểm tra. Đặc quyền tối thiểu, OAuth, một người bấm xác nhận trước mọi thao tác rủi ro.