A2A Protocol Implementation Checklist for Production Agent Systems
A production-focused guide to deciding where Agent2Agent fits, designing the trust boundary, and testing an A2A v1.0 client or server.
Implement A2A by first confirming that the boundary is truly agent-to-agent, then publish the smallest safe Agent Card, select one v1.0 protocol binding, negotiate versions explicitly, authenticate every caller, authorize every operation and task, validate messages and artifacts, and test retries, cancellation, streaming, tenant isolation, and mixed-version behavior end to end.
Key takeaways
- A2A coordinates independent agents; it does not replace MCP or an agent framework
- An Agent Card is capability metadata, not proof that an agent is trustworthy
- Authentication identifies a caller, while server-side authorization decides which tasks and data it may access
- Version and binding support must be advertised and tested instead of inferred from an endpoint
- Task state, streaming, cancellation, retries, artifacts, and errors need explicit operational semantics
- Interoperability testing must include failure, isolation, and mixed-version cases—not only a successful demo
Decide whether A2A belongs at this boundary
A2A is designed for independent, potentially opaque agents that need to discover capabilities, exchange messages or artifacts, and manage collaborative tasks without sharing their internal memory or tools. Use it at a service boundary where one agent delegates work to another agent owned by a different team, platform, or organization. Do not introduce it merely because one application has several internal functions.
Keep the layers distinct. An agent framework can orchestrate components inside one application. MCP can expose tools and resources to that agent. A2A provides a common interface between agent applications. This separation makes ownership clearer: the remote A2A server decides how it reasons and which tools it uses, while the client relies on the advertised contract and observable task results.
Before implementation, write a one-page boundary statement. Name the requesting and serving organizations, intended skills, data classifications, allowed artifacts, maximum task duration, approval points, and consequences of a wrong or duplicated action. If both sides cannot agree on those basics, protocol compatibility will not rescue the workflow.
- Use A2A for delegation across an agent service boundary
- Use MCP for an agent's tool and resource connections
- Use framework-native calls for tightly coupled internal orchestration
- Keep consequential business authorization outside model judgment
Treat discovery as metadata, not trust
An Agent Card describes the server's identity, endpoint, supported interfaces, capabilities, security schemes, and skills. A public card can live at the standardized well-known location, while sensitive detail can be placed in an authenticated extended card or a curated registry. Publish only what a legitimate client needs. Internal hostnames, privileged skills, tenant structure, debug examples, and secrets do not belong in a public document.
Validate a discovered card before use. Confirm the HTTPS origin, apply an allowlist or registry policy, check required fields and supported versions, constrain redirects, and record the card version used for each connection. Version 1.0 supports signed Agent Cards, but a valid signature establishes integrity and signer association—not the truth of every capability claim or the safety of the service.
Cache cards using ordinary HTTP semantics, but plan for change. Authentication requirements, interfaces, and skills can be revised. Respect cache headers and ETags, set a maximum acceptable staleness for high-risk workflows, and fail safely when a formerly approved interface changes to an unapproved origin or security scheme.
Choose a binding and negotiate versions explicitly
A2A v1.0 defines a canonical model with three standard bindings: JSON-RPC, gRPC, and HTTP+JSON. Pick one according to existing infrastructure, observability, client support, and payload needs. Multiple bindings expand the test matrix because equivalent operations, errors, authentication, streaming, and task states must behave consistently across them.
Do not infer compatibility from a URL. In v1.0, each advertised interface carries its protocol binding and version, and HTTP clients send the A2A version with requests. Reject unsupported versions predictably. During migration, publish separate supported interfaces or an explicitly tested compatibility path rather than translating silently at an edge proxy.
The move from v0.3 to v1.0 includes breaking changes: operation names, enum representations, part discrimination, Agent Card structure, paths, and several task and push-notification objects changed. Build migration fixtures from real v0.3 messages and cards. Test them against the intended SDK versions and preserve a rollback path until production traffic confirms which versions are actually in use.
Engineer the complete task lifecycle
A production integration is more than SendMessage returning a result. Define what creates a task, when a direct message is sufficient, which state transitions are legal, how clients poll or subscribe, how history is bounded, and what cancellation means after downstream work has begun. Terminal states must be stable and observable.
Specify timeouts and retries at each layer. A client that loses a response may not know whether a server accepted the task. Use stable client correlation and application-level idempotency for operations that could send money, publish content, create accounts, or trigger another system. Cancellation should be best-effort where effects cannot be reversed, with the final task record explaining what completed.
Streaming clients need ordering, reconnection, duplicate-event handling, and a way to reconcile against the current task. Push notifications require authenticated delivery, destination validation, egress restrictions, rotation, replay protection, and lifecycle cleanup. Never let a caller turn the server into an unrestricted request proxy.
Test interoperability, isolation, and recovery
Start with conformance fixtures for cards, messages, parts, tasks, artifacts, errors, timestamps, extensions, and each selected binding. Then cross-test independent SDKs or implementations. Two services generated from the same library can share the same bug and still appear interoperable.
Exercise malformed cards, unsupported versions, expired credentials, forbidden tasks, cross-tenant identifiers, oversized artifacts, hostile URLs, interrupted streams, repeated notifications, timeouts, cancellation races, and server restarts. Confirm that logs show the negotiated version, authenticated principal, authorization decision, task transition, error mapping, and sanitized artifact metadata without storing secrets or unnecessary prompt content.
Roll out in observation or low-consequence mode. Limit task duration, cost, concurrency, artifact size, and downstream authority. Establish service-level objectives for completion, cancellation, error rate, stream recovery, and notification delivery. Rehearse disabling one agent, revoking credentials, draining tasks, preserving evidence, and switching back to a known-compatible version. This guidance is based on the public specification and project documentation; it is not a hands-on certification of any product's A2A implementation.
Practical checklist
- Write the cross-agent use case, trust boundary, data classes, and success and stop conditions
- Confirm that A2A is the external agent interface while framework calls and MCP remain behind that boundary
- Publish a minimal Agent Card with accurate skills, interfaces, versions, modes, and security schemes
- Choose a standard binding and send or validate the A2A version on every request
- Acquire credentials out of band and authenticate every protected operation
- Authorize each operation, task, artifact, tenant, and callback against the authenticated identity
- Validate media types, sizes, URLs, structured data, extension URIs, and state transitions
- Define idempotency, timeout, retry, cancellation, stream recovery, and terminal-state behavior
- Protect push destinations against server-side request forgery and authenticate notifications
- Log protocol version, caller, task, state change, policy decision, error, and sanitized artifact metadata
- Run conformance, mixed-version, load, tenant-isolation, and adversarial-content tests before rollout
Warning signs
- The public Agent Card exposes internal endpoints, sensitive skills, tenant details, or credentials
- A valid bearer token can read or cancel any task if its identifier is guessed
- The implementation treats remote text, files, URLs, or structured data as trusted instructions
- Retries can create duplicate external actions because task submission is not idempotent
- A push-notification URL can reach private network services or cloud metadata endpoints
- The team claims A2A compliance after testing only two components built with the same SDK
- A v0.3 client is silently routed to v1.0 behavior without explicit compatibility handling
Frequently asked questions
What is the A2A Protocol?
Agent2Agent is an open protocol for discovery, communication, task management, and artifact exchange between independent agent systems. Version 1.0 defines common data objects and standard JSON-RPC, gRPC, and HTTP+JSON bindings.
Does A2A replace MCP?
No. A2A addresses agent-to-agent communication. MCP commonly connects an individual agent to tools, APIs, and resources. A system may use MCP inside each agent and A2A between agents.
Is an Agent Card a security credential?
No. It advertises identity, skills, interfaces, capabilities, and authentication requirements. Credentials should be obtained out of band, and sensitive extended cards need access control.
Which A2A protocol binding should a team choose?
Choose the binding your infrastructure can operate consistently: HTTP+JSON for conventional web APIs, gRPC for strongly typed service environments, or JSON-RPC where that ecosystem fits. Start with one and prove semantic equivalence before adding others.
Can A2A make a multi-agent system safe?
No protocol can establish business trust by itself. A2A supplies interoperability semantics, while operators remain responsible for identity, authorization, validation, data governance, limits, monitoring, and recovery.
Primary sources and further reading
- Agent2Agent Protocol Specification 1.0A2A Protocol Project, Linux Foundation · 2026
- A2A Protocol Ships v1.0: Production-Ready Standard for Agent-to-Agent CommunicationA2A Protocol Project, Linux Foundation · 2026
- What's New in A2A Protocol v1.0A2A Protocol Project, Linux Foundation · 2026
- Agent Discovery in A2AA2A Protocol Project, Linux Foundation · 2026