Two protocols are shaping how AI agents interact with the world. The
[Model Context Protocol (MCP)](https://modelcontextprotocol.io) standardizes how
agents connect to tools and data sources — think of it as agent-to-tool
communication. Google's
[Agent-to-Agent (A2A) protocol](https://a2a-protocol.org/latest/specification/)
tackles the other half of the equation: how autonomous agents discover,
negotiate with, and delegate tasks to each other.

If you're on an API team, A2A matters because it's built entirely on standards
you already work with — HTTP, JSON-RPC, and Server-Sent Events (SSE). Every A2A
interaction is an API call, which means your API gateway is the natural
enforcement point for authentication, rate limiting, and observability on
agent-to-agent traffic.

This guide covers what A2A is, how it works, where it fits alongside MCP, and
what your team can do today to prepare for agent-to-agent communication at
scale.

## What Is the A2A Protocol?

The Agent-to-Agent protocol is an open communication standard that enables AI
agents — built on different frameworks, by different organizations, running on
separate infrastructure — to collaborate directly. Google introduced A2A in
April 2025 and donated it to the Linux Foundation as an open-source project.
Over 150 organizations now support the protocol, including Atlassian,
Salesforce, SAP, PayPal, ServiceNow, Microsoft, and Amazon.

The core idea: agents should be able to work together without exposing their
internal state, memory, or tools. A2A provides a structured way for agents to
advertise capabilities, negotiate interactions, and coordinate on tasks — all
over standard HTTP.

### Core Concepts

A2A is organized around a handful of key primitives.

**Agent Cards** are JSON metadata documents that act as a digital business card
for an agent. Published at a well-known endpoint
(`/.well-known/agent-card.json`), an Agent Card declares the agent's identity,
service endpoint URL, supported capabilities, authentication requirements, and a
list of skills. Clients parse this information to determine whether an agent is
suitable for a given task and how to communicate with it securely.

**Tasks** are the fundamental unit of work in A2A. Each task has a unique
identifier and progresses through a defined lifecycle: `submitted`, `working`,
`input-required`, `auth-required`, `completed`, `failed`, `canceled`, or
`rejected`. Tasks can complete immediately for simple requests or run
asynchronously for complex, long-running operations. A context identifier
(`contextId`) can group related tasks together across multiple interactions.

**Messages** represent individual communication turns between a client and a
remote agent. Each message carries a role (`user` or `agent`), a unique
identifier, and one or more content parts. Messages convey instructions,
context, queries, and responses.

**Parts** are the content containers within messages and artifacts. A2A supports
three part types: `TextPart` for plain text, `FilePart` for binary data (inline
or URL-referenced), and `DataPart` for structured JSON. Parts can also carry
metadata like MIME types and filenames.

**Artifacts** are the tangible outputs generated by an agent during a task — a
document, image, dataset, or any other deliverable. Like messages, artifacts
consist of one or more parts and can be streamed incrementally using chunking
semantics (`append` and `lastChunk`).

**Streaming** happens over Server-Sent Events (SSE). A client opens a persistent
HTTP connection and receives real-time updates as the task progresses — status
changes, new message content, or artifact chunks. For disconnected or
long-running scenarios, A2A also supports **push notifications** via
client-provided webhooks.

### Protocol Transport

All A2A communication happens over HTTP. The client sends a JSON-RPC 2.0 request
as an HTTP POST to the server's endpoint. The server responds with a JSON-RPC
response (or an SSE stream for streaming methods). Starting with v0.3, A2A also
supports an optional gRPC binding for higher-performance deployments.

Clients include an `A2A-Version` header with each request to ensure protocol
compatibility. The gRPC binding's protobuf definition
(`specification/grpc/a2a.proto`) serves as the authoritative definition of all
protocol data objects and request/response messages.

## A2A vs. MCP: When to Use Each

A2A and MCP solve different problems, and most production agentic systems will
use both.

**MCP is for agent-to-tool communication.** It standardizes how an AI agent
discovers and invokes external tools, APIs, and data sources. An MCP server
exposes a set of tools — each with a name, description, and input schema — and
the agent calls them like functions. MCP is vertical integration: connecting an
agent to the capabilities it needs.

**A2A is for agent-to-agent communication.** It standardizes how autonomous
agents find each other, negotiate interaction modalities, and collaborate on
tasks. A2A is horizontal collaboration: enabling multiple agents to work
together as peers while preserving their internal boundaries.

Here's how the two protocols differ in practice:

- **Interaction model**: MCP tools are stateless function calls with structured
  inputs and outputs. A2A tasks are stateful, potentially long-running
  interactions with lifecycle management.
- **Discovery**: MCP servers expose a tool list that clients enumerate. A2A
  agents publish Agent Cards with rich metadata about skills, supported content
  types, and authentication requirements.
- **Communication pattern**: MCP uses a host-client-server model where the host
  orchestrates tool calls. A2A uses a peer-to-peer model where agents
  communicate directly.
- **State management**: MCP interactions are typically stateless — call a tool,
  get a result. A2A tasks carry state across multiple turns and can require
  additional input mid-execution.

### A Practical Example

Consider an enterprise workflow where a customer support agent needs to process
a refund. With MCP, the support agent calls tools — a CRM lookup tool, an order
management tool, a payment processing tool — to gather information and execute
actions. Each tool call is a discrete, stateless operation.

With A2A, the support agent delegates the refund to a specialized billing agent.
The billing agent operates autonomously — it has its own tools, its own logic,
and its own policies. The support agent doesn't need to know how the billing
agent works internally. It sends a task ("process refund for order #12345"),
monitors the task status, and receives the result when it's ready.

In this scenario, the support agent uses MCP to connect to its own tools and A2A
to collaborate with the billing agent. Both protocols are needed. For a deeper
look at the MCP side of this equation, see
[Best Practices for Mapping REST APIs to MCP Tools](/learning-center/mapping-rest-apis-to-mcp-tools).

## How A2A Works with API Gateways

Since A2A is built on HTTP and JSON-RPC, every agent-to-agent interaction is an
API call. This means your existing API gateway infrastructure applies directly.

### Authentication

A2A agents declare their supported authentication schemes in their Agent Cards
using a format aligned with the
[OpenAPI Specification security schemes](https://swagger.io/docs/specification/v3_0/authentication/).
The supported types include `apiKey`, `http` (Bearer tokens), `oauth2`,
`openIdConnect`, and `mtls`.

The authentication flow follows a three-step pattern:

1. **Discovery** — The client reads the server's Agent Card and identifies the
   required auth scheme from the `securitySchemes` field.
2. **Credential acquisition** — The client obtains credentials (OAuth tokens,
   API keys, etc.) through standard external flows.
3. **Transmission** — Credentials are sent in standard HTTP headers
   (`Authorization: Bearer <token>`, `API-Key: <value>`, etc.) with every
   request.

Because A2A uses the same auth patterns as any REST API, your gateway's
authentication policies apply directly. Zuplo's built-in policies for
[JWT/OpenID Connect authentication](https://zuplo.com/docs/policies/open-id-jwt-auth-inbound),
[API key authentication](https://zuplo.com/docs/articles/api-key-authentication),
and [OAuth authentication](https://zuplo.com/docs/articles/oauth-authentication)
can validate credentials on A2A requests before they reach your agent.

### Rate Limiting

Agent-to-agent communication introduces a new traffic pattern: machines talking
to machines at machine speed. Without controls, a misconfigured or runaway agent
can flood your services with requests.

A gateway-level
[rate limiting policy](https://zuplo.com/docs/policies/rate-limit-inbound) lets
you enforce per-agent quotas on A2A task requests. You can limit by API key,
authenticated user identity, IP address, or custom attributes — the same
patterns you already use for human API consumers. The difference is that agent
traffic is more likely to burst, so setting appropriate rate limits early is
essential.

### Observability

Every A2A request flowing through your gateway generates logs, metrics, and
traces. You get visibility into which agents are communicating, how often, what
tasks they're creating, and whether those tasks succeed or fail. This is
particularly valuable for debugging multi-agent workflows where a failure in one
agent can cascade through the system.

### Streaming and SSE

A2A's real-time streaming uses Server-Sent Events, and your gateway needs to
handle these long-lived connections correctly. Zuplo's
[edge runtime](https://zuplo.com/docs/api-management/introduction), built on Web
Worker technology with HTTP/2 support, handles SSE and streaming traffic
natively — requests and responses flow through the gateway without buffering, so
agents receive incremental task updates with minimal latency.

## Security Considerations for A2A

A2A was designed with enterprise security requirements from the start. Rather
than inventing proprietary security mechanisms, the protocol builds on existing
standards.

### Transport Security

The A2A specification requires HTTPS for all production deployments. TLS 1.3 or
later is recommended with strong cipher suites. This applies to both the
JSON-RPC/HTTP binding and the optional gRPC binding.

### Agent Card Security

Agent Cards can contain sensitive information about your agent's capabilities
and endpoint structure. If your Agent Card includes details you don't want
publicly accessible, the specification recommends protecting the card endpoint
with access controls. Don't include plaintext secrets in Agent Cards — instead,
use auth schemes where clients obtain credentials out-of-band.

### Authorization and Scope

Beyond authentication, A2A supports fine-grained authorization. Access can be
controlled on a per-skill basis as advertised in the Agent Card. For example,
specific OAuth scopes might grant a client agent access to invoke certain skills
but not others. Your API gateway can enforce these scope checks as part of its
policy pipeline.

### In-Task Authentication

Sometimes an agent needs additional credentials during task execution — for
example, when accessing a secondary system on behalf of the user. A2A handles
this by transitioning the task to an `auth-required` state. The task status
message describes what authentication is needed, and the client can provide the
required credentials to resume the task.

### Compliance

A2A's alignment with HTTP and OpenAPI standards means it integrates with
existing enterprise compliance infrastructure. Audit logging, data residency
policies, GDPR and HIPAA controls — all of these can be applied at the gateway
layer because A2A traffic is standard HTTP traffic.

## Where A2A Fits in the Zuplo Ecosystem

If you're already using Zuplo for API management, you're well-positioned for
A2A.

Zuplo's [MCP Server Handler](https://zuplo.com/docs/handlers/mcp-server) already
transforms your API routes into MCP tools, handling agent-to-tool traffic. A2A
governance is the natural next step — applying the same gateway capabilities
(authentication, rate limiting, logging, analytics) to agent-to-agent traffic.

The [AI Gateway](https://zuplo.com/ai-gateway) provides additional capabilities
for managing AI traffic, including cost controls, semantic caching, and
guardrails for prompt injection and PII leakage detection. As A2A agents
increasingly interact with LLM-powered services, these controls become relevant
for governing the AI layer underneath agent-to-agent communication.

And because Zuplo runs at the edge with a runtime built on Web Worker
technology, it handles A2A's HTTP, SSE, and JSON-RPC traffic natively — with
low-millisecond overhead and near-zero cold starts across globally distributed
data centers.

## Getting Started: Preparing for A2A Traffic Today

You don't need to wait for a dedicated A2A gateway product to start governing
agent-to-agent traffic. Here's what your API team can do now.

### 1. Audit Your Agent Endpoints

If you're running AI agents that expose HTTP endpoints — whether for MCP, custom
agent frameworks, or internal orchestration — those endpoints are candidates for
A2A communication. Map them, understand their authentication requirements, and
make sure they're behind your API gateway.

### 2. Apply Standard Gateway Policies

A2A is HTTP. That means your existing gateway policies already work:

- **Authentication** — Require OAuth tokens or API keys on all agent-facing
  endpoints.
- **Rate limiting** — Set per-agent quotas to prevent runaway traffic.
- **Request validation** — Validate JSON-RPC request structure before it reaches
  your agent.
- **Logging** — Capture full request/response data for debugging and compliance.

### 3. Publish Agent Cards

Even before you implement A2A fully, you can define Agent Cards for your agents.
An Agent Card is just a JSON file at a well-known endpoint:

```json
{
  "name": "order-management-agent",
  "description": "Manages order lifecycle operations including creation, updates, and refund processing",
  "version": "1.0.0",
  "url": "https://api.example.com/agents/order-management",
  "capabilities": {
    "streaming": true,
    "pushNotifications": false
  },
  "skills": [
    {
      "id": "process-refund",
      "name": "Process Refund",
      "description": "Processes a refund for a given order ID"
    }
  ],
  "securitySchemes": {
    "oidc": {
      "type": "openIdConnect",
      "openIdConnectUrl": "https://auth.example.com/.well-known/openid-configuration"
    }
  }
}
```

This gives other agents (and your own team) a machine-readable description of
what your agent can do and how to authenticate with it.

### 4. Monitor Agent-to-Agent Traffic Patterns

Start collecting data on how your agents communicate. Track request volumes,
latency distributions, error rates, and task completion rates. This baseline
will help you tune rate limits, identify performance bottlenecks, and detect
anomalies as agent-to-agent traffic grows.

### 5. Plan for Both Protocols

If you're investing in MCP for agent-to-tool communication, start thinking about
A2A for agent-to-agent communication. Zuplo's
[MCP Gateway](https://zuplo.com/mcp-gateway) already manages agent-to-tool
traffic — applying the same governance model to A2A traffic is a natural
extension. If you're getting started with MCP, the tutorial
[Create an MCP Server from Your OpenAPI Spec in 5 Minutes](/learning-center/create-mcp-server-from-openapi)
walks through the full setup, and
[Connecting MCP Servers to an API Gateway](/learning-center/connect-mcp-to-api-gateway)
covers production deployment patterns. Design your agent architecture with both
protocols in mind from the start.

## What's Next for A2A

The A2A protocol is evolving quickly. Version 0.3 added gRPC support, agent card
signing for enhanced security, and expanded SDK coverage across Python, Go,
JavaScript, Java, and .NET. Google's Interactions API (launched in beta in
December 2025) maps the A2A protocol surface onto a stateful agent gateway,
further simplifying deployment.

The ecosystem is growing too. Auth0 is partnering with Google Cloud to define
A2A authentication specifications. Microsoft has integrated A2A into Copilot
Studio. Amazon Bedrock AgentCore added native A2A support. And major enterprise
platforms — SAP, Salesforce, ServiceNow — are building A2A into their agent
frameworks.

For API teams, the message is clear: agent-to-agent communication is coming, and
it runs on the same HTTP infrastructure you already manage. The teams that treat
A2A traffic with the same governance rigor as traditional API traffic — through
their API gateway — will be the ones best prepared for the multi-agent future.

Ready to govern agent traffic through your API gateway?
[Start with Zuplo for free](https://portal.zuplo.com/signup) or explore the
[MCP Gateway](https://zuplo.com/mcp-gateway) to see how Zuplo handles AI agent
traffic today.