
Repositório Git:A2A MCP
Este repositório demonstra como configurar e usar o a2a-python SDK para criar um servidor e cliente simples que implementam o protocolo a2a, e o servidor do agente é implementado por mcp.
Visão Geral
- A2A (Agent2Agent): Um protocolo e SDK para construir agentes de IA interoperáveis.
- Este Exemplo: Mostra como executar um servidor e cliente A2A básico, trocar mensagens e visualizar a resposta.
Pré-requisitos
- Python 3.13+
- uv (para gerenciamento rápido de dependências e execução)
- Uma chave API para OpenRouter (definir como
OPENROUTER_API_KEY)
Instalação
-
Clonar o repositório:
git clone https://github.com/sing1ee/a2a-mcp-openrouter cd https://github.com/sing1ee/a2a-mcp-openrouter -
Instalar dependências:
uv venv source .venv/bin/activate -
Definir variáveis de ambiente:
export OPENROUTER_API_KEY=your-openrouter-api-keyOu criar um arquivo
.envcom:OPENROUTER_API_KEY=your-openrouter-api-keyNota: Você pode obter sua chave API do OpenRouter em https://openrouter.ai/
Executando o Exemplo
1. Iniciar o Servidor
uv run --env-file .env a2a-server
- O servidor será iniciado na porta 9999.
Validar o cartão do agente:
2. Executar o Cliente
Em um novo terminal:
uv venv
source .venv/bin/activate
uv run --env-file .env a2a-client --question "O que é o protocolo A2A?"
- O cliente se conectará ao servidor e enviará uma solicitação.
3. Visualizar a Resposta
- A resposta do cliente será salva em response.xml.
Configuração
O sistema usa a seguinte configuração:
- Modelo:
google/gemini-flash-1.5via OpenRouter - URL Base:
https://openrouter.ai/api/v1
Estrutura de Arquivos
src/a2a_mcp_openrouter/server/: Implementação do servidor.src/a2a_mcp_openrouter/client/: Implementação do cliente.response.xml: Exemplo de resposta do cliente.
Solução de Problemas
- Dependências ausentes: Certifique-se de ter o
uvinstalado. - Erros de chave API: Certifique-se de que
OPENROUTER_API_KEYestá definida corretamente. - Conflitos de porta: Certifique-se de que a porta 9999 está livre.
A2A vs MCP: Semelhanças de Protocolo e Abordagem Unificada
Através desta implementação, descobrimos que A2A (Agent2Agent) e MCP (Model Context Protocol) compartilham semelhanças arquiteturais notáveis. Ambos os protocolos seguem um padrão similar para descoberta, troca de capacidades e execução.
Padrão de Implementação Unificado
Descoberta Principal: Tanto A2A quanto MCP seguem o mesmo padrão de implementação subjacente:
- Comunicação baseada em HTTP: Ambos usam HTTP para comunicação (A2A usa APIs REST, MCP usa Server-Sent Events)
- Design orientado por prompts: Ambos dependem de prompts LLM para decidir o que chamar e como chamar
- Mecanismo de descoberta: Ambos fornecem maneiras de descobrir capacidades disponíveis
- Respostas estruturadas: Ambos retornam dados estruturados que podem ser processados programaticamente
Observando a implementação mcp.py, podemos ver:
# Descoberta de ferramentas MCP via HTTP
async with sse_client(url) as (read, write):
resources = await session.list_tools()
# Gerar prompt para tomada de decisão LLM
return template.render(tools=resources.tools)
# Executar chamada de ferramenta via HTTP
return await session.call_tool(tool_name, arguments=arguments)
Isto é conceitualmente idêntico ao padrão de chamada de agente A2A - descobrir capacidades, usar LLM para decidir o que chamar, então executar a chamada.
A2A como Interface Universal
Insight Principal: A2A pode servir como uma interface unificada tanto para comunicação agente-agente quanto para invocação de ferramentas, porque os padrões de chamada são essencialmente os mesmos:
- A2A → Agente:
Cliente → HTTP → Agente → Resposta LLM - A2A → Ferramenta:
Cliente → HTTP → Wrapper de Ferramenta → Resposta de Ferramenta MCP
Ambos os padrões usam:
- Comunicação HTTP
- Descoberta de capacidades
- Tomada de decisão orientada por LLM
- Formato estruturado de solicitação/resposta
Benefícios desta Abordagem Unificada
- Interface Única: Clientes precisam entender apenas um padrão de chamada
- Interoperabilidade: Misturar agentes e ferramentas perfeitamente no mesmo fluxo de trabalho
- Arquitetura Consistente: Mesmo padrão de implementação em diferentes tipos de capacidades
- Design nativo para LLM: Ambos aproveitam o raciocínio LLM para seleção inteligente de capacidades
Isto demonstra que A2A e MCP não são protocolos concorrentes, mas padrões complementares que podem ser unificados sob um paradigma de interface única.
Arquitetura do Sistema e Fluxo
Abaixo está um diagrama de sequência detalhado mostrando o fluxo completo do protocolo A2A desde a entrada do cliente até a resposta final:
sequenceDiagram
participant User
participant Client as A2A Client
participant LLM_Client as OpenRouter LLM (Client)
participant Server as A2A Server
participant AgentExecutor as Agent Executor
participant Agent as Server Agent
participant LLM_Server as OpenRouter LLM (Server)
participant MCP as MCP Tool
User->>Client: Entrada da pergunta: "O que é o protocolo A2A?"
Note over Client: Inicializar Agente com agent_urls
Client->>Server: GET /agent-card - Descobrir agentes disponíveis
Server-->>Client: Retornar AgentCard com capacidades
Note over Client: Renderizar template de prompt do agente
Client->>LLM_Client: Enviar prompt de decisão com pergunta e agentes disponíveis
LLM_Client-->>Client: Retornar JSON com agentes selecionados
loop Para cada agente selecionado
Client->>Server: POST /send-message-streaming
Server->>AgentExecutor: execute(context, event_queue)
AgentExecutor->>Agent: stream(query)
Agent->>MCP: Obter ferramentas disponíveis
MCP-->>Agent: Retornar definições de ferramentas
Note over Agent: Renderizar template de prompt de ferramenta
Agent->>LLM_Server: Enviar prompt de decisão com pergunta e ferramentas
LLM_Server-->>Agent: Retornar JSON com ferramentas selecionadas
loop Para cada ferramenta selecionada (máx. iterações)
Agent->>MCP: Chamar ferramenta com argumentos
MCP-->>Agent: Retornar resultado da ferramenta
Note over Agent: Atualizar histórico called_tools
Agent->>LLM_Server: Enviar prompt atualizado com resultados das ferramentas
LLM_Server-->>Agent: Retornar próximas ferramentas ou resposta final
alt Mais ferramentas necessárias
Note over Agent: Continuar para próxima iteração
else Tarefa completa
Note over Agent: Tarefa concluída
end
end
Agent-->>AgentExecutor: Produzir eventos de streaming
AgentExecutor-->>Server: Encaminhar eventos para event_queue
Server-->>Client: Transmitir chunks de resposta via HTTP
Client->>Client: Extrair resposta das tags de resposta
Note over Client: Adicionar à lista agent_answers
end
alt Necessita síntese final
Client->>LLM_Client: Enviar prompt de síntese com todas as respostas
LLM_Client-->>Client: Retornar resposta final sintetizada
else Síntese não necessária
Note over Client: Usar respostas existentes
end
Client-->>User: Transmitir resposta final com saídas dos agentes
Características Principais
- Descoberta de Agentes: Descoberta automática de agentes disponíveis via protocolo A2A
- Seleção Orientada por LLM: Seleção inteligente de agentes e ferramentas usando raciocínio LLM
- Integração MCP: Integração perfeita com ferramentas MCP para recuperação de conhecimento
- Pipeline de Streaming: Respostas de streaming em tempo real por todo o pipeline
- Processamento Iterativo: Chamadas de ferramentas multi-iteração com contexto mantido
Descrição do Fluxo
O sistema segue estas fases principais:
Fase do Cliente: Usuário insere pergunta → Cliente descobre agentes → LLM seleciona agentes relevantes
Fase do Servidor: Servidor recebe solicitação → Agente descobre ferramentas → LLM seleciona ferramentas → Ferramentas executam iterativamente
Fase de Resposta: Resultados retornam pelo pipeline → Cliente sintetiza resposta final → Usuário recebe resposta
Esta arquitetura demonstra o poder do protocolo A2A na criação de agentes de IA interoperáveis que podem se descobrir e colaborar, enquanto aproveitam ferramentas MCP para acessar fontes de conhecimento externas.
Related Articles
Explore more content related to this topic
Building an A2A Currency Agent with LangGraph
This guide provides a detailed explanation of how to build an A2A-compliant agent using LangGraph and the Google Gemini model. We'll walk through the Currency Agent example from the A2A Python SDK, explaining each component, the flow of data, and how the A2A protocol facilitates agent interactions.
AP2 (Agent Payments Protocol) Usage Tutorial
"AP2 (Agent Payments Protocol) is a protocol for agent payments that supports both human-present and human-absent commerce flows. This tutorial provides detailed instructions on how to use the AP2 Python sample project."
A2A vs MCP Protocol Relationship: In-Depth Community Discussion Analysis
Comprehensive analysis of A2A vs MCP protocol relationship based on GitHub community discussions. Explores design philosophy differences, ecosystem maturity, and practical guidance for choosing between agent-to-agent communication vs tool standardization approaches.
AgentMaster Multi-Agent Conversational Framework - Multimodal Information Retrieval System Based on A2A and MCP Protocols
AgentMaster is a next-generation multi-agent conversational framework jointly developed by Stanford University and George Mason University, pioneering the integration of A2A and MCP protocols in a single system. It supports multimodal inputs including text, images, and audio, automatically decomposes complex tasks through coordinator agents, and implements various functions such as SQL queries, information retrieval, and image analysis with excellent performance and user-friendliness.
A2A Protocol Specification (Python)
Comprehensive guide to the A2A protocol Python implementation specification, covering agent cards, message passing, task management, security authentication, and other core functionalities' data structures and object relationships, providing developers with a complete protocol implementation guide.