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.
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.
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.
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ó.
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.
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.
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.
| Dimension | MCP | A2A | ACP (→ A2A) |
|---|---|---|---|
| Direction | Agent → Tool (vertical) | Agent → Agent (horizontal) | Agent → Agent (horizontal) |
| Origin | Anthropic → AAIF (Linux Foundation) | Google → Linux Foundation | IBM / BeeAI |
| Discovery | Server config / listing | Agent Card (/.well-known/agent-card.json) | Agent Manifest |
| Wire format | JSON-RPC 2.0 | JSON-RPC 2.0, gRPC, HTTP+JSON (REST) | REST over HTTP |
| Transport | stdio, Streamable HTTP | HTTP(S) + SSE + push notif. | HTTP sync + async SSE |
| Long tasks | Tool call result; Tasks extension | Task states + input-required | Async SSE stream |
| Auth | OAuth 2.1 (remote) | Declared in Agent Card | HTTP auth |
| Status | Active | Active | Merged into A2A (Aug 2025) |
| Tiêu chí | MCP | A2A | ACP (→ A2A) |
|---|---|---|---|
| Hướng | Agent → Tool (dọc) | Agent → Agent (ngang) | Agent → Agent (ngang) |
| Nguồn gốc | Anthropic → AAIF (Linux Foundation) | Google → Linux Foundation | IBM / BeeAI |
| Khám phá | Cấu hình / liệt kê server | Agent Card (/.well-known/agent-card.json) | Agent Manifest |
| Định dạng truyền | JSON-RPC 2.0 | JSON-RPC 2.0, gRPC, HTTP+JSON (REST) | REST qua HTTP |
| Transport | stdio, Streamable HTTP | HTTP(S) + SSE + push notif. | HTTP sync + async SSE |
| Tác vụ dài | Kết quả tool call; Tasks extension | Trạng thái task + input-required | Luồng SSE bất đồng bộ |
| Xác thực | OAuth 2.1 (từ xa) | Khai báo trong Agent Card | Xá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.
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
| Mistake | Why it's wrong | The fix |
|---|---|---|
| New remote MCP server on old HTTP+SSE | Deprecated since 2025-03-26 | Streamable HTTP |
| New project on IBM's ACP | Merged into A2A in 2025 | A2A (REST binding if you want plain HTTP) |
| A2A between two functions in one app | Network, auth and task states for a function call | Call the function |
| Every internal API as an MCP tool | Costs tokens, confuses tool choice | Expose only what the agent needs |
| MCP servers from random repos, full access | Tool poisoning runs with your permissions | Review, pin versions, narrow scopes |
Hard-coding agent.json | Renamed in A2A v0.3 | agent-card.json |
| Sai lầm | Vì sao sai | Cách sửa |
|---|---|---|
| MCP server từ xa mới dùng HTTP+SSE cũ | Đã bị deprecated từ 2025-03-26 | Streamable HTTP |
| Dự án mới dùng ACP của IBM | Đã gộp vào A2A năm 2025 | A2A (binding REST nếu muốn HTTP thuần) |
| A2A giữa hai hàm trong cùng app | Thê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 được | Gọi hàm trực tiếp |
| Mọi API nội bộ thành MCP tool | Tốn token, model khó chọn tool | Chỉ expose thứ agent cần |
| MCP server từ repo lạ, toàn quyền | Tool 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.3 | agent-card.json |
input-required, auth-required, failed, canceled, rejected.input-required, auth-required, failed, canceled, rejected.