Mar 1, 2026 · Lab notes · 5 min
A2A and communication between agents
A2A defines an interface for communication between agent services. MCP addresses tool and data access; A2A addresses messages, tasks and artifacts exchanged with another agent service. They can be complementary. This technical note pins its wire examples to A2A v0.3.0 rather than presenting them as version-independent instructions.
The missing layer
Consider an illustrative refund workflow: a support service asks separate services to verify a purchase, interpret policy, prepare a payment decision and update a record. The architecture below shows possible communication boundaries. It is not evidence of a deployed customer system, and a successful protocol exchange does not authorize a refund.
graph TB
Customer((Customer)) -->|"Refund request"| Support["Support Agent"]
Support -->|A2A| Finance["Finance Agent"]
Support -->|A2A| Legal["Legal Agent"]
Support -->|A2A| Payments["Payments Agent"]
Support -->|A2A| Sales["Sales Agent"]
Finance -->|MCP| DB[(Transaction DB)]
Legal -->|MCP| Docs["Policy Docs"]
Payments -->|MCP| Stripe["Stripe API"]
Sales -->|MCP| CRM[(Salesforce)]
style Support fill:#e8e8e8,color:#0a0a0a,stroke:#0a0a0a
style Finance fill:none,stroke:#0a0a0a
style Legal fill:none,stroke:#0a0a0a
style Payments fill:none,stroke:#0a0a0a
style Sales fill:none,stroke:#0a0a0a
Google launched the Agent-to-Agent protocol in April 2025 to address exactly this. A2A is not competing with MCP. MCP is vertical: agent to tool. A2A is horizontal: agent to agent. They occupy different layers of the same stack, and they were designed to be complementary from the start.
| Dimension | MCP | A2A |
|---|---|---|
| Created by | Anthropic (Nov 2024) | Google (Apr 2025) |
| Purpose | Agent-to-tool integration | Agent-to-agent collaboration |
| Direction | Vertical (intra-agent) | Horizontal (inter-agent) |
| Analogy | USB-C port for tools | Diplomatic protocol between agents |
| Communication | JSON-RPC 2.0 | JSON-RPC, gRPC, HTTP+JSON; SSE for streaming |
| Remote agents are... | Servers exposing negotiated capabilities | Agent services with declared interfaces |
| Foundation | Linux Foundation AAIF | Linux Foundation LF AI & Data |
Agent Cards: the business card of the agentic web
An Agent Card describes an agent service, its capabilities, skills, interfaces and security requirements. The A2A v0.3.0 specification recommends /.well-known/agent-card.json when using well-known discovery. Registries and direct configuration are also possible.
Agent Card review: verify identity, endpoint, declared protocol version, skills, capabilities and security schemes. Do not put credentials in a public card. The card describes a service; it does not prove that the service can safely perform a task.
Cards can carry signatures. Signature verification requires a trusted key and an appropriate trust policy; the presence of a signature alone is insufficient. A client must separately authenticate to the service and decide what data and authority to delegate.
How agents collaborate
Version 0.3.0 defines JSON-RPC, gRPC and HTTP+JSON bindings. Shared message serialization does not make protocol bridging automatic: task semantics, error handling, authentication and supported capabilities still have to agree. The state diagram below is a simplified task example, not an exhaustive transition mandate.
stateDiagram-v2
[*] --> submitted
submitted --> working : Accepted
submitted --> rejected : Refused
working --> completed : Success
working --> failed : Error
working --> canceled : Canceled
working --> auth_required
auth_required --> working
working --> input_required
input_required --> working
completed --> [*]
failed --> [*]
canceled --> [*]
rejected --> [*]
A task can report progress or request additional input or authentication. Terminal tasks cannot simply be restarted. Streaming and push support depend on advertised capabilities. In the JSON-RPC binding used here, message methods are message/send and message/stream.
| Interaction Pattern | Method | Use Case |
|---|---|---|
| Request / Response | message/send | Quick synchronous answers |
| Streaming (SSE) | message/stream | Long-running tasks with incremental updates |
| Push Notifications | Webhooks | Disconnected, hours-long workflows |
ACP and A2A consolidation
IBM developed ACP for BeeAI. On August 29, 2025, LF AI & Data announced that ACP was joining A2A. That supports a consolidation of those efforts, not a claim that all agent interoperability had converged on one standard.
graph TB ACP["ACP · IBM / BeeAI
Mar 2025"] --> LF["LF AI & Data
ACP / A2A convergence"] A2A1["A2A · Google
Apr 2025"] --> LF LF --> A2A2["A2A effort
ACP joins A2A effort
Aug 2025"] AAIF["Separate AAIF launch
MCP + goose + AGENTS.md
Dec 2025"] style LF fill:#e8e8e8,color:#0a0a0a,stroke:#0a0a0a style AAIF fill:#e8e8e8,color:#0a0a0a,stroke:#0a0a0a style ACP fill:none,stroke:#0a0a0a style A2A1 fill:none,stroke:#0a0a0a style A2A2 fill:none,stroke:#0a0a0a
The announcement describes combining ACP assets and expertise with A2A. Treat the availability of any particular migrated feature as a version-specific implementation question. A governance announcement is not a compatibility test for an existing BeeAI deployment.
The Agentic AI Foundation
The December 9, 2025 Linux Foundation launch announcement names MCP, goose and AGENTS.md as founding contributions. It does not list A2A, BeeAI or Docling as founding projects. The previous diagram incorrectly put all of these efforts in one founding-project list. The corrected diagram separates the ACP/A2A announcement from the AAIF launch.
| Announcement | Supported scope |
|---|---|
| August 29, 2025 | ACP joins A2A effort under LF AI & Data |
| December 9, 2025 | AAIF launch names three founding project contributions |
Open governance can reduce dependence on one vendor, but it does not guarantee interoperability or economic network effects. Our recommendation is to test a concrete delegation workflow across the actual implementations before treating protocol support as a purchasing criterion.
Complementary interfaces
The table below is a map of possible interface responsibilities, not a mandatory stack or a claim that every layer is needed in every application:
| Layer | Protocol | Function |
|---|---|---|
| Agent → Tool | MCP | Connect agents to databases, APIs, tools |
| Agent → Agent | A2A | Discovery, delegation, and collaboration between agents |
| Agent → User | AG-UI | Real-time human-in-the-loop interaction |
| Agent Guidance | AGENTS.md | Project-specific instructions for coding agents |
Layering is useful when it separates responsibilities. A remote service can perform a task through A2A while using MCP internally. A user-facing application can use AG-UI events to represent progress and interaction. Each boundary still needs its own authentication, cancellation and failure behavior.
What this means for builders
Builders should add interoperability where a real workflow requires it. A local deterministic pipeline may not need A2A. A remote task service benefits from a clear contract for inputs, progress, artifacts, errors and ownership. The test is whether another implementation can complete the intended task with appropriate authority.
Builder review: pin the protocol version; verify the Agent Card and endpoint; test message, task and streaming behavior; apply least-privilege credentials; and record who authorized consequential actions. In v0.3.0, use /.well-known/agent-card.json for well-known discovery. Do not assume every deployment uses OAuth or exposes one scope per skill.
The opportunity is collaboration between independently operated services. The work is to make delegation observable and bounded. Preserve the task identifier, returned artifact, failure state and authority record so the caller can distinguish a completed task from a plausible explanation.
Factual review: October 26, 2026. Original publication date retained. Primary sources are linked alongside the revised claims. Wire examples are pinned to A2A v0.3.0.