Phase 13 - Lesson 19
A2A — Protocolo Agente para Agente
This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.
O MCP é agente-para-ferramenta. O A2A (Agent2Agent) é agente-para-agente — um protocolo aberto para permitir que agentes opacos construídos em diferentes frameworks colaborem. Lançado pelo Google em abril de 2025, doado para a Linux Foundation em junho de 2025, atingindo a v1.0 em abril de 2026 com mais de 150 apoiadores, incluindo AWS, Cisco, Microsoft, Salesforce, SAP e ServiceNow. Ele absorveu o ACP da IBM e adicionou a extensão de pagamentos AP2. Esta lição aborda o Agent Card, o ciclo de vida da Tarefa e as duas vinculações de transporte.
Type: Build Languages: Python (stdlib, Agent Card + Task harness) Prerequisites: Phase 13 · 06 (MCP fundamentals), Phase 13 · 08 (MCP client) Time: ~75 minutes
Objetivos de Aprendizado
- Distinguir casos de uso agente-para-ferramenta (MCP) de agente-para-agente (A2A).
- Publicar um Agent Card em
/.well-known/agent.jsoncom habilidades e metadados de endpoint. - Percorrer o ciclo de vida de uma Tarefa (submitted → working → input-required → completed / failed / canceled / rejected).
- Usar Mensagens com Partes (text, file, data) e Artefatos como saídas.
O Problema
Um agente de atendimento ao cliente precisa delegar a escrita de relatórios a um agente redator especializado. Opções anteriores ao A2A:
- API REST personalizada. Funciona, mas cada emparelhamento é pontual.
- Base de código compartilhada. Exige que os dois agentes executem o mesmo framework.
- MCP. Não se encaixa: o MCP serve para chamar ferramentas, não para fazer dois agentes colaborarem preservando o raciocínio interno opaco de cada um.
O A2A preenche essa lacuna. Ele modela a interação como um agente enviando uma Tarefa para outro, com um ciclo de vida, mensagens e artefatos. O estado interno do agente chamado permanece opaco — o chamador vê apenas as transições de estado da tarefa e as saídas finais.
O A2A é o protocolo para "permitir que agentes de diferentes frameworks conversem entre si". Ele não substitui o MCP; os dois são complementares.
O Conceito
Agent Card
Todo agente compatível com A2A publica um card em /.well-known/agent.json:
{
"schemaVersion": "1.0",
"name": "research-agent",
"description": "Summarizes academic papers and drafts citations.",
"url": "https://research.example.com/a2a",
"version": "1.2.0",
"skills": [
{
"id": "summarize_paper",
"name": "Summarize a paper",
"description": "Read a paper PDF and produce a 3-paragraph summary.",
"inputModes": ["text", "file"],
"outputModes": ["text", "artifact"]
}
],
"capabilities": {"streaming": true, "pushNotifications": true}
}
A descoberta é baseada em URL: busca-se o card, descobre-se a URL do endpoint A2A e enumeram-se as habilidades.
Agent Cards Assinados (AP2)
A extensão AP2 (setembro de 2025) adiciona assinaturas criptográficas aos Agent Cards. Um publicador assina seu próprio card com um JWT; os consumidores realizam a verificação. Isso evita falsificação de identidade.
Ciclo de vida da Tarefa
submitted -> working -> completed | failed | canceled | rejected
-> input_required -> working (loop via message)
Os clientes iniciam com tasks/send. O agente chamado faz a transição entre os estados; os clientes se inscrevem para atualizações de estado via SSE ou por meio de consulta (polling).
Mensagens e Partes
Uma mensagem carrega uma ou mais Partes:
text— conteúdo em texto plano.file— blob em base64 com mimeType.data— payload JSON tipado (entrada estruturada para o agente chamado).
Exemplo:
{
"role": "user",
"parts": [
{"type": "text", "text": "Summarize this paper."},
{"type": "file", "file": {"name": "paper.pdf", "mimeType": "application/pdf", "bytes": "..."}},
{"type": "data", "data": {"targetLength": "3 paragraphs"}}
]
}
Artefatos
Saídas são Artefatos, não strings brutas. Um Artefato é uma saída nomeada e tipada:
{
"name": "summary",
"parts": [{"type": "text", "text": "..."}],
"mimeType": "text/markdown"
}
Os artefatos podem ser transmitidos em fluxo (streaming) como chunks. O chamador realiza a acumulação deles.
Duas vinculações de transporte
- JSON-RPC sobre HTTP. Endpoint
/a2a, POST para requisições, SSE opcional para streaming. Vinculação padrão. - gRPC. Para ambientes corporativos onde o gRPC é nativo.
Ambas as vinculações carregam o mesmo formato lógico de mensagem.
Preservação da opacidade
Um princípio fundamental de design: o estado interno do agente chamado é opaco. O chamador vê o estado da tarefa e os artefatos. A cadeia de raciocínio (chain-of-thought) do agente chamado, suas chamadas de ferramentas, sua delegação para subagentes — tudo é invisível. Isso é diferente do MCP, no qual as chamadas de ferramentas são transparentes.
Justificativa: O A2A permite que concorrentes colaborem sem revelar seus detalhes internos. O A2A pode significar "chamar este agente de atendimento ao cliente" sem que o chamador saiba como esse agente implementa o serviço.
Cronologia
- 2025-04-09. Google anuncia o A2A.
- 2025-06-23. Doado para a Linux Foundation.
- 2025-08. Absorve o ACP da IBM.
- 2025-09. A extensão AP2 (Agent Payments) é lançada.
- 2026-04. Versão 1.0 lançada com mais de 150 organizações apoiadoras.
Relação com o MCP
| Dimension | MCP | A2A |
|---|---|---|
| Use case | Agent-to-tool | Agent-to-agent |
| Opacity | Transparent tool calls | Opaque inner reasoning |
| Typical caller | Agent runtime | Another agent |
| State | Tool-call result | Task with lifecycle |
| Authorization | OAuth 2.1 (Phase 13 · 16) | JWT-signed Agent Cards (AP2) |
| Transport | Stdio / Streamable HTTP | JSON-RPC over HTTP / gRPC |
Use o MCP quando quiser invocar uma ferramenta específica. Use o A2A quando quiser delegar uma tarefa inteira a outro agente. Muitos sistemas em produção usam ambos: um agente usa MCP para sua camada de ferramentas e A2A para sua camada de colaboração.
Use It
O arquivo code/main.py implementa um harness A2A mínimo: um agente de pesquisa publica seu card, um agente redator recebe um tasks/send com partes que incluem um PDF e uma instrução de texto, passa pelas transições working → input_required → working → completed, e retorna um artefato de texto. Tudo com a biblioteca padrão (stdlib); utiliza um transporte em memória para focar nos formatos das mensagens.
O que observar:
- Formato JSON do Agent Card.
- Atribuição de ID de tarefa e transições de estado.
- Mensagens com partes de tipos mistos.
- Ramificação de entrada necessária (input-required) no meio da tarefa.
- Retorno de artefato na conclusão.
Ship It
Esta lição produz o arquivo outputs/skill-a2a-agent-spec.md. Dado um novo agente que deve ser chamável por outros agentes, a skill produz o JSON do Agent Card, o esquema de habilidades e o blueprint do endpoint.
Exercícios
Execute
code/main.py. Rastreie o ciclo de vida completo da Tarefa, incluindo a pausa de entrada necessária (input-required) onde o agente chamado solicita esclarecimentos.Adicione um Agent Card assinado. Assine com HMAC sobre o JSON canônico do card. Escreva um verificador e confirme que ele falha em um card modificado.
Implemente o streaming de tarefas: o agente redator emite três chunks incrementais de artefato via SSE e o chamador os acumula.
Projete um agente A2A que envolva um servidor MCP. Mapeie cada ferramenta MCP para uma habilidade A2A. Observe os prós e contras — qual opacidade é perdida?
Leia o anúncio do A2A v1.0 e identifique o recurso que ainda não foi implementado por nenhum framework até abril de 2026. (Dica: refere-se à delegação de tarefas em múltiplos saltos ou multi-hop.)
Key Terms
| Term | What people say | What it actually means |
|---|---|---|
| A2A | "Protocolo Agent-to-Agent" | Protocolo aberto para colaboração de agentes opacos |
| Agent Card | ".well-known/agent.json" |
Metadados publicados que descrevem as habilidades e o endpoint de um agente |
| Skill | "Uma unidade chamável" | Uma operação nomeada suportada pelo agente (análoga à ferramenta MCP) |
| Task | "Unidade de delegação" | Um item de trabalho com um ciclo de vida e um artefato final |
| Message | "Entrada da tarefa" | Carrega Partes (text, file, data) |
| Part | "Chunk tipado" | Elemento text / file / data de uma mensagem |
| Artifact | "Saída da tarefa" | Saída nomeada e tipada retornada após a conclusão |
| AP2 | "Agent Payments Protocol" | Extensão de Agent Cards assinados para confiança e pagamentos |
| Opacity | "Colaboração black-box" | Os detalhes internos do agente chamado são ocultados do chamador |
| Input-required | "Pausa de tarefa" | Estado do ciclo de vida quando o agente precisa de mais informações |
Further Reading
- a2a-protocol.org — especificação canônica do A2A
- a2aproject/A2A — GitHub — implementações de referência e SDKs
- Linux Foundation — A2A launch press release — transferência de governança em junho de 2025
- Google Cloud — A2A protocol upgrade — roadmap e momentum com parceiros
- Google Dev — A2A 1.0 milestone — notas de lançamento da v1.0 e orientações de compatibilidade retroativa