A2A MCP Server
Un servidor puente que conecta el Protocolo de Contexto de Modelo (MCP) con el protocolo Agente a Agente (A2A).
Documentación
Servidor MCP A2A
Un servidor MCP que conecta el Protocolo de Contexto de Modelos (MCP) con el protocolo Agente-a-Agente (A2A), permitiendo que asistentes de IA compatibles con MCP (como Claude) interactúen sin problemas con agentes A2A.
Descripción General
Este proyecto actúa como una capa de integración entre dos protocolos de agentes de IA de vanguardia:
-
Protocolo de Contexto de Modelos (MCP): Desarrollado por Anthropic, MCP permite a los asistentes de IA conectarse a herramientas y fuentes de datos externas. Estandariza cómo las aplicaciones de IA y los modelos de lenguaje grandes se conectan a recursos externos de manera segura y componible.
-
Protocolo Agente-a-Agente (A2A): Desarrollado por Google, A2A permite la comunicación e interoperabilidad entre diferentes agentes de IA a través de una interfaz JSON-RPC estandarizada.
Al conectar estos protocolos, este servidor permite que los clientes MCP (como Claude) descubran, registren, se comuniquen y gestionen tareas en agentes A2A a través de una interfaz unificada.
Demostración
1, Ejecutar el Agente de Moneda en el Ejemplo A2A

also support cloud deployed Agent
2, Usar Claude para Registrar el Agente de Moneda

3, Usar Claude para Enviar una tarea al Agente de Moneda y obtener el resultado

Características
-
Gestión de Agentes
- Registrar agentes A2A con el servidor puente
- Listar todos los agentes registrados
- Anular el registro de agentes cuando ya no sean necesarios
-
Comunicación
- Enviar mensajes a agentes A2A y recibir respuestas
- Transmitir respuestas de agentes A2A en tiempo real
-
Gestión de Tareas
- Rastrear qué agente A2A maneja cada tarea
- Recuperar resultados de tareas usando IDs de tarea
- Cancelar tareas en ejecución
-
Soporte de Transporte
- Múltiples tipos de transporte: stdio, streamable-http, SSE
- Configurar el tipo de transporte usando la variable de entorno MCP_TRANSPORT
Instalación
Instalación vía Smithery
Para instalar A2A Bridge Server para Claude Desktop automáticamente vía Smithery:
npx -y @smithery/cli install @GongRzhe/A2A-MCP-Server --client claude
Opción 1: Instalar desde PyPI
pip install a2a-mcp-server
Opción 2: Instalación Local
-
Clonar el repositorio:
git clone https://github.com/GongRzhe/A2A-MCP-Server.git cd A2A-MCP-Server -
Configurar un entorno virtual:
python -m venv .venv source .venv/bin/activate # On Windows: .venv\Scripts\activate -
Instalar las dependencias:
pip install -r requirements.txt
Configuración
Variables de Entorno
Configure cómo se ejecuta el servidor MCP usando estas variables de entorno:
# 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
El Servidor MCP A2A soporta múltiples tipos de transporte:
-
stdio (predeterminado): Usa entrada/salida estándar para la comunicación
- Ideal para uso desde línea de comandos y pruebas
- No se inicia ningún servidor HTTP
- Requerido para Claude Desktop
-
streamable-http (recomendado para clientes web): Transporte HTTP con soporte de transmisión
- Recomendado para implementaciones de producción
- Inicia un servidor HTTP para manejar solicitudes MCP
- Permite la transmisión de respuestas grandes
-
sse: Transporte de Eventos Enviados por el Servidor
- Proporciona transmisión de eventos en tiempo real
- Útil para actualizaciones en tiempo real
Para especificar el 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
Ejecutar el Servidor
Desde la Línea de Comandos
# 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
Configuración en Claude Desktop
Claude Desktop le permite configurar servidores MCP en el archivo claude_desktop_config.json. Este archivo normalmente se encuentra en:
- 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: Instalación desde PyPI (Recomendado)
Agregue lo siguiente a la sección mcpServers de su claude_desktop_config.json:
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
Tenga en cuenta que para Claude Desktop, debe usar "MCP_TRANSPORT": "stdio" ya que Claude requiere comunicación stdio con los servidores MCP.
Método 2: Instalación Local
Si ha clonado el repositorio y desea ejecutar el servidor desde su instalación 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"
}
}
Reemplace C:\\path\\to\\ con las rutas reales en su sistema.
Usando el Creador de Configuración
Este repositorio incluye un script config_creator.py para ayudarle a generar la configuración:
# If using local installation
python config_creator.py
El script:
- Detectará automáticamente las rutas de Python, script y repositorio cuando sea posible
- Configurará el transporte stdio que es requerido para Claude Desktop
- Le permitirá agregar variables de entorno adicionales si es necesario
- Creará o actualizará su archivo de configuración de Claude Desktop
Ejemplo Completo
Aquí hay un ejemplo de un archivo claude_desktop_config.json completo con el A2A-MCP-Server configurado:
{
"mcpServers": {
"a2a": {
"command": "uvx",
"args": [
"a2a-mcp-server"
]
}
}
}
Uso con Clientes MCP
Claude
Claude puede usar agentes A2A a través de las herramientas MCP proporcionadas por este servidor. Aquí se explica cómo configurarlo:
-
Para Claude Web: Inicie el servidor MCP con el transporte streamable-http:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server -
Para Claude Web: En la interfaz web de Claude, habilite la conexión URL MCP en su menú de Herramientas.
- Use la URL:
http://127.0.0.1:8000/mcp
- Use la URL:
-
Para Claude Desktop: Agregue la configuración a su archivo
claude_desktop_config.jsoncomo se describió anteriormente. La forma más fácil es usar el scriptconfig_creator.pyproporcionado, que detectará automáticamente las rutas y creará la configuración adecuada. -
En Claude, ahora puede usar las siguientes funciones:
Registrar un agente A2A:
I need to register a new agent. Can you help me with that? (Agent URL: http://localhost:41242)Enviar mensaje a un agente:
Ask the agent at http://localhost:41242 what it can do.Recuperar resultados de tareas:
Can you get the results for task ID: 550e8400-e29b-41d4-a716-446655440000?
IDE Cursor
Cursor IDE puede conectarse a servidores MCP para agregar herramientas a su asistente de IA:
-
Ejecute su servidor MCP A2A con el transporte streamable-http:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server -
En Cursor IDE, vaya a Configuración > IA > Servidores MCP
- Agregue un nuevo Servidor MCP con URL:
http://127.0.0.1:8000/mcp - Habilite el servidor
- Agregue un nuevo Servidor MCP con URL:
-
Ahora puede usar las herramientas A2A desde el asistente de IA de Cursor.
Navegador Windsurf
Windsurf es un navegador con soporte MCP integrado:
-
Ejecute su servidor MCP A2A con el transporte streamable-http:
MCP_TRANSPORT=streamable-http MCP_HOST=127.0.0.1 MCP_PORT=8000 uvx a2a-mcp-server -
En el navegador Windsurf, vaya a Configuración > Conexiones MCP
- Agregue una nueva conexión MCP con URL:
http://127.0.0.1:8000/mcp - Habilite la conexión
- Agregue una nueva conexión MCP con URL:
-
Ahora puede usar las herramientas A2A desde el asistente de IA de Windsurf.
Herramientas MCP Disponibles
El servidor expone las siguientes herramientas MCP para integración con LLMs como Claude:
Gestión de Agentes
-
register_agent: Registrar un agente A2A con el servidor puente
{ "name": "register_agent", "arguments": { "url": "http://localhost:41242" } } -
list_agents: Obtener una lista de todos los agentes registrados
{ "name": "list_agents", "arguments": {} } -
unregister_agent: Eliminar un agente A2A del servidor puente
{ "name": "unregister_agent", "arguments": { "url": "http://localhost:41242" } }
Procesamiento de Mensajes
-
send_message: Enviar un mensaje a un agente y obtener un task_id para la respuesta
{ "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 un mensaje y transmitir la respuesta
{ "name": "send_message_stream", "arguments": { "agent_url": "http://localhost:41242", "message": "Tell me a story about AI agents.", "session_id": "optional-session-id" } }
Gestión de Tareas
-
get_task_result: Recuperar el resultado de una tarea usando su ID
{ "name": "get_task_result", "arguments": { "task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1", "history_length": null } } -
cancel_task: Cancelar una tarea en ejecución
{ "name": "cancel_task", "arguments": { "task_id": "b30f3297-e7ab-4dd9-8ff1-877bd7cfb6b1" } }
Ejemplos de Uso
Flujo de Trabajo 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
Ejemplo con 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."
Arquitectura
El servidor MCP A2A consta de varios componentes clave:
- Servidor FastMCP: Expone herramientas a los clientes MCP
- Cliente A2A: Se comunica con los agentes A2A registrados
- Gestor de Tareas: Maneja el reenvío y la gestión de tareas
- Obtenedor de Tarjetas de Agente: Recupera información sobre los agentes A2A
Flujo de Comunicación
MCP Client → FastMCP Server → A2A Client → A2A Agent
↑ ↓
└──── Response ──┘
Gestión de IDs de Tarea
Al enviar un mensaje a un agente A2A, el servidor:
- Genera un
task_idúnico - Mapea este ID a la URL del agente en el diccionario
task_agent_mapping - Devuelve el
task_idal cliente MCP - Usa este mapeo para enrutar las solicitudes de recuperación y cancelación de tareas
Manejo de Errores
El servidor proporciona mensajes de error detallados para problemas comunes:
- Agente no registrado
- ID de tarea no encontrado
- Errores de conexión con los agentes
- Errores de análisis en las respuestas
Solución de Problemas
Problemas de Registro de Agentes
Si un agente no puede registrarse:
- Verifique que la URL del agente sea correcta y accesible
- Compruebe si el agente tiene una tarjeta de agente adecuada en
/.well-known/agent.json
Problemas de Entrega de Mensajes
Si los mensajes no se están entregando:
- Asegúrese de que el agente esté registrado (use
list_agents) - Verifique que el agente esté ejecutándose y sea accesible
Problemas de Recuperación de Resultados de Tareas
Si no puede recuperar un resultado de tarea:
- Asegúrese de estar usando el task_id correcto
- Compruebe si ha pasado demasiado tiempo (algunos agentes podrían descartar tareas antiguas)
Problemas de Transporte
Si tiene problemas con un tipo de transporte específico:
- Problemas de stdio: Asegúrese de que los flujos de entrada/salida no estén redirigidos o modificados
- Problemas de streamable-http: Compruebe si el puerto está disponible y no está bloqueado por un firewall
- Problemas de sse: Verifique que el cliente soporte Eventos Enviados por el Servidor
Problemas de Configuración de Claude Desktop
Si Claude Desktop no está iniciando su A2A-MCP-Server:
- Compruebe que las rutas en su
claude_desktop_config.jsonsean correctas - Verifique que Python esté en su PATH si usa
"command": "python" - Para instalación local, asegúrese de que PYTHONPATH sea correcto
- Asegúrese de que
MCP_TRANSPORTesté configurado en"stdio"en la secciónenv - Intente ejecutar el comando manualmente para ver si funciona fuera de Claude
- Use el script
config_creator.pypara la detección automática de rutas y configuración
Desarrollo
Agregar Nuevos Métodos de Herramientas
Para agregar nuevas capacidades al servidor, agregue métodos decorados con @mcp.tool() en el archivo a2a_mcp_server.py.
Gestor de Tareas Personalizado
El servidor usa una clase A2AServerTaskManager personalizada que extiende InMemoryTaskManager. Puede personalizar su comportamiento modificando esta clase.
Estructura del Proyecto
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
Licencia
Este proyecto está licenciado bajo la Licencia Apache, Versión 2.0 - consulte el archivo LICENSE para más detalles.
El código en el directorio common/ proviene del proyecto Google A2A y también está licenciado bajo la Licencia Apache, Versión 2.0.
Agradecimientos
- Anthropic por el Protocolo de Contexto de Modelos
- Google por el Protocolo Agente-a-Agente
- Contribuyentes a la biblioteca FastMCP