A2A MCP Server
Um servidor de ponte que conecta o Model Context Protocol (MCP) com o protocolo Agent-to-Agent (A2A).
Documentação
A2A MCP Server
Um servidor MCP que faz a ponte entre o Model Context Protocol (MCP) e o protocolo Agent-to-Agent (A2A), permitindo que assistentes de IA compatíveis com MCP (como o Claude) interajam perfeitamente com agentes A2A.
Visão Geral
Este projeto serve como uma camada de integração entre dois protocolos de agentes de IA de ponta:
-
Model Context Protocol (MCP): Desenvolvido pela Anthropic, o MCP permite que assistentes de IA se conectem a ferramentas externas e fontes de dados. Ele padroniza como aplicações de IA e modelos de linguagem de grande porte se conectam a recursos externos de forma segura e componível.
-
Agent-to-Agent Protocol (A2A): Desenvolvido pelo Google, o A2A permite comunicação e interoperabilidade entre diferentes agentes de IA por meio de uma interface JSON-RPC padronizada.
Ao fazer a ponte entre esses protocolos, este servidor permite que clientes MCP (como o Claude) descubram, registrem, comuniquem-se e gerenciem tarefas em agentes A2A por meio de uma interface unificada.
Demonstração
1, Execute o Agente de Moeda no Exemplo A2A

also support cloud deployed Agent
2, Use o Claude para Registrar o Agente de Moeda

3, Use o Claude para Enviar uma tarefa ao Agente de Moeda e obter o resultado

Recursos
-
Gerenciamento de Agentes
- Registrar agentes A2A no servidor de ponte
- Listar todos os agentes registrados
- Cancelar o registro de agentes quando não forem mais necessários
-
Comunicação
- Enviar mensagens para agentes A2A e receber respostas
- Transmitir respostas de agentes A2A em tempo real
-
Gerenciamento de Tarefas
- Rastrear qual agente A2A lida com qual tarefa
- Recuperar resultados de tarefas usando IDs de tarefa
- Cancelar tarefas em execução
-
Suporte a Transporte
- Múltiplos tipos de transporte: stdio, streamable-http, SSE
- Configure o tipo de transporte usando a variável de ambiente MCP_TRANSPORT
Instalação
Instalando via Smithery
Para instalar o A2A Bridge Server para Claude Desktop automaticamente via Smithery:
npx -y @smithery/cli install @GongRzhe/A2A-MCP-Server --client claude
Opção 1: Instalar a partir do PyPI
pip install a2a-mcp-server
Opção 2: Instalação Local
-
Clone o repositório:
git clone https://github.com/GongRzhe/A2A-MCP-Server.git cd A2A-MCP-Server -
Configure um ambiente virtual:
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate -
Instale as dependências:
pip install -r requirements.txt
Configuração
Variáveis de Ambiente
Configure como o servidor MCP é executado usando estas variáveis de ambiente:
# Transport type: stdio, streamable-http, or sse
export MCP_TRANSPORT="streamable-http"
# Host for the MCP server
export MCP_HOST="0.0.0.0"
# Port for the MCP server (when using HTTP transports)
export MCP_PORT="8000"
# Path for the MCP server endpoint (when using HTTP transports)
export MCP_PATH="/mcp"
# Path for SSE endpoint (when using SSE transport)
export MCP_SSE_PATH="/sse"
# Enable debug logging
export MCP_DEBUG="true"
Tipos de Transporte
O A2A MCP Server suporta múltiplos tipos de transporte:
-
stdio (padrão): Usa entrada/saída padrão para comunicação
- Ideal para uso em linha de comando e testes
- Nenhum servidor HTTP é iniciado
- Necessário para o Claude Desktop
-
streamable-http (recomendado para clientes web): Transporte HTTP com suporte a streaming
- Recomendado para implantações em produção
- Inicia um servidor HTTP para lidar com requisições MCP
- Permite o streaming de respostas grandes
-
sse: Transporte Server-Sent Events
- Fornece streaming de eventos em tempo real
- Útil para atualizações em tempo real
Para especificar o tipo de transporte:
# Using environment variable
export MCP_TRANSPORT="streamable-http"
uvx a2a-mcp-server
# Or directly in the command
MCP_TRANSPORT=streamable-http uvx a2a-mcp-server
Executando o Servidor
Pela Linha de Comando
# Using default settings (stdio transport)
uvx a2a-mcp-server
# Using HTTP transport on specific host and port
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8080 uvx a2a-mcp-server
Configurando no Claude Desktop
O Claude Desktop permite configurar servidores MCP no arquivo claude_desktop_config.json. Este arquivo normalmente está localizado em:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Método 1: Instalação via PyPI (Recomendado)
Adicione o seguinte à seção mcpServers do seu claude_desktop_config.json:
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
Observe que para o Claude Desktop, você deve usar "MCP_TRANSPORT": "stdio" pois o Claude requer comunicação stdio com servidores MCP.
Método 2: Instalação Local
Se você clonou o repositório e deseja executar o servidor a partir da sua instalação local:
"a2a": {
"command": "C:\\path\\to\\python.exe",
"args": [
"C:\\path\\to\\A2A-MCP-Server\\a2a_mcp_server.py"
],
"env": {
"MCP_TRANSPORT": "stdio",
"PYTHONPATH": "C:\\path\\to\\A2A-MCP-Server"
}
}
Substitua C:\\path\\to\\ pelos caminhos reais do seu sistema.
Usando o Criador de Configuração
Este repositório inclui um script config_creator.py para ajudar você a gerar a configuração:
# If using local installation
python config_creator.py
O script irá:
- Detectar automaticamente os caminhos do Python, do script e do repositório quando possível
- Configurar o transporte stdio, que é necessário para o Claude Desktop
- Permitir que você adicione variáveis de ambiente adicionais, se necessário
- Criar ou atualizar seu arquivo de configuração do Claude Desktop
Exemplo Completo
Aqui está um exemplo de um arquivo claude_desktop_config.json completo com o A2A-MCP-Server configurado:
{
"mcpServers": {
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
}
}
Usando com Clientes MCP
Claude
O Claude pode usar agentes A2A por meio das ferramentas MCP fornecidas por este servidor. Veja como configurar:
-
Para o Claude Web: Inicie o servidor MCP com o transporte streamable-http:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server -
Para o Claude Web: Na interface web do Claude, habilite a conexão de URL MCP no seu menu Ferramentas.
- Use a URL:
http://127.0.0.1:8000/mcp
- Use a URL:
-
Para o Claude Desktop: Adicione a configuração ao seu arquivo
claude_desktop_config.jsonconforme descrito acima. A maneira mais fácil é usar o scriptconfig_creator.pyfornecido, que detectará automaticamente os caminhos e criará a configuração adequada. -
No Claude, agora você pode usar as seguintes funções:
Registrar um agente A2A:
I need to register a new agent. Can you help me with that? (Agent URL: http://localhost:41242)Enviar mensagem para um agente:
Ask the agent at http://localhost:41242 what it can do.Recuperar resultados de tarefas:
Can you get the results for task ID: 550e8400-e29b-41d4-a716-446655440000?
Cursor IDE
O Cursor IDE pode se conectar a servidores MCP para adicionar ferramentas ao seu assistente de IA:
-
Execute seu servidor A2A MCP com o transporte streamable-http:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server -
No Cursor IDE, vá para Configurações > IA > Servidores MCP
- Adicione um novo Servidor MCP com URL:
http://127.0.0.1:8000/mcp - Habilite o servidor
- Adicione um novo Servidor MCP com URL:
-
Agora você pode usar as ferramentas A2A dentro do assistente de IA do Cursor.
Navegador Windsurf
O Windsurf é um navegador com suporte MCP integrado:
-
Execute seu servidor A2A MCP com o transporte streamable-http:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server -
No navegador Windsurf, vá para Configurações > Conexões MCP
- Adicione uma nova conexão MCP com URL:
http://127.0.0.1:8000/mcp - Habilite a conexão
- Adicione uma nova conexão MCP com URL:
-
Agora você pode usar ferramentas A2A dentro do assistente de IA do Windsurf.
Ferramentas MCP Disponíveis
O servidor expõe as seguintes ferramentas MCP para integração com LLMs como o Claude:
Gerenciamento de Agentes
-
register_agent: Registrar um agente A2A no servidor de ponte
{ "name": "register_agent", "arguments": { "url": "http://localhost:41242" } } -
list_agents: Obter uma lista de todos os agentes registrados
{ "name": "list_agents", "arguments": {} } -
unregister_agent: Remover um agente A2A do servidor de ponte
{ "name": "unregister_agent", "arguments": { "url": "http://localhost:41242" } }
Processamento de Mensagens
-
send_message: Enviar uma mensagem para um agente e obter um task_id para a resposta
{ "name": "send_message", "arguments": { "agent_url": "http://localhost:41242", "message": "What's the exchange rate from USD to EUR?", "session_id": "optional-session-id" } } -
send_message_stream: Enviar uma mensagem e transmitir a resposta
{ "name": "send_message_stream", "arguments": { "agent_url": "http://localhost:41242", "message": "Tell me a story about AI agents.", "session_id": "optional-session-id" } }
Gerenciamento de Tarefas
-
get_task_result: Recuperar o resultado de uma tarefa usando seu ID
{ "name": "get_task_result", "arguments": { "task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1", "history_length": null } } -
cancel_task: Cancelar uma tarefa em execução
{ "name": "cancel_task", "arguments": { "task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1" } }
Exemplos de Uso
Fluxo de Trabalho Básico
1. Client registers an A2A agent
↓
2. Client sends a message to the agent (gets task_id)
↓
3. Client retrieves the task result using task_id
Exemplo com o Claude como Cliente MCP
User: Register an agent at http://localhost:41242
Claude uses: register_agent(url="http://localhost:41242")
Claude: Successfully registered agent: ReimbursementAgent
User: Ask the agent what it can do
Claude uses: send_message(agent_url="http://localhost:41242", message="What can you do?")
Claude: I've sent your message. Here's the task_id: b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1
User: Get the answer to my question
Claude uses: get_task_result(task_id="b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1")
Claude: The agent replied: "I can help you process reimbursement requests. Just tell me what you need to be reimbursed for, including the date, amount, and purpose."
Arquitetura
O servidor A2A MCP consiste em vários componentes principais:
- Servidor FastMCP: Expõe ferramentas para clientes MCP
- Cliente A2A: Comunica-se com agentes A2A registrados
- Gerenciador de Tarefas: Lida com o encaminhamento e gerenciamento de tarefas
- Buscador de Cartões de Agente: Recupera informações sobre agentes A2A
Fluxo de Comunicação
MCP Client → FastMCP Server → A2A Client → A2A Agent
↑ ↓
└──── Response ──┘
Gerenciamento de IDs de Tarefa
Ao enviar uma mensagem para um agente A2A, o servidor:
- Gera um
task_idúnico - Mapeia este ID para a URL do agente no dicionário
task_agent_mapping - Retorna o
task_idpara o cliente MCP - Usa este mapeamento para rotear solicitações de recuperação e cancelamento de tarefas
Tratamento de Erros
O servidor fornece mensagens de erro detalhadas para problemas comuns:
- Agente não registrado
- ID de tarefa não encontrado
- Erros de conexão com agentes
- Erros de análise em respostas
Solução de Problemas
Problemas de Registro de Agentes
Se um agente não puder ser registrado:
- Verifique se a URL do agente está correta e acessível
- Verifique se o agente possui um cartão de agente adequado em
/.well-known/agent.json
Problemas de Entrega de Mensagens
Se as mensagens não estiverem sendo entregues:
- Certifique-se de que o agente está registrado (use
list_agents) - Verifique se o agente está em execução e acessível
Problemas na Recuperação de Resultados de Tarefas
Se você não conseguir recuperar um resultado de tarefa:
- Certifique-se de que está usando o task_id correto
- Verifique se muito tempo se passou (alguns agentes podem descartar tarefas antigas)
Problemas de Transporte
Se você tiver problemas com um tipo específico de transporte:
- Problemas com stdio: Certifique-se de que os fluxos de entrada/saída não estejam redirecionados ou modificados
- Problemas com streamable-http: Verifique se a porta está disponível e não está bloqueada por um firewall
- Problemas com sse: Verifique se o cliente suporta Server-Sent Events
Problemas de Configuração do Claude Desktop
Se o Claude Desktop não estiver iniciando seu A2A-MCP-Server:
- Verifique se os caminhos no seu
claude_desktop_config.jsonestão corretos - Verifique se o Python está no seu PATH se estiver usando
"command": "python" - Para instalação local, certifique-se de que o PYTHONPATH está correto
- Certifique-se de que
MCP_TRANSPORTestá definido como"stdio"na seçãoenv - Tente executar o comando manualmente para ver se funciona fora do Claude
- Use o script
config_creator.pypara detecção automática de caminhos e configuração
Desenvolvimento
Adicionando Novos Métodos de Ferramenta
Para adicionar novas capacidades ao servidor, adicione métodos decorados com @mcp.tool() no arquivo a2a_mcp_server.py.
Gerenciador de Tarefas Personalizado
O servidor usa uma classe A2AServerTaskManager personalizada que estende InMemoryTaskManager. Você pode personalizar seu comportamento modificando esta classe.
Estrutura do Projeto
a2a-mcp-server/
├── a2a_mcp_server.py # Main server implementation
├── common/ # A2A protocol code (from google/A2A)
│ ├── client/ # A2A client implementation
│ ├── server/ # A2A server implementation
│ ├── types.py # Common type definitions
│ └── utils/ # Utility functions
├── config_creator.py # Script to help create Claude Desktop configuration
├── .gitignore # Git ignore file
├── pyproject.toml # Project metadata and dependencies
├── README.md # This file
└── requirements.txt # Project dependencies
Licença
Este projeto está licenciado sob a Apache License, Versão 2.0 - consulte o arquivo LICENSE para obter detalhes.
O código no diretório common/ é do projeto Google A2A e também está licenciado sob a Apache License, Versão 2.0.
Agradecimentos
- Anthropic pelo Model Context Protocol
- Google pelo Agent-to-Agent Protocol
- Contribuidores da biblioteca FastMCP