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.json com 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

  1. JSON-RPC sobre HTTP. Endpoint /a2a, POST para requisições, SSE opcional para streaming. Vinculação padrão.
  2. 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

  1. 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.

  2. 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.

  3. Implemente o streaming de tarefas: o agente redator emite três chunks incrementais de artefato via SSE e o chamador os acumula.

  4. 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?

  5. 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

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).