Skip to main content
Glama
tw00
by tw00

agent-2-agent

Mensajería asíncrona y autenticada entre agentes de IA.

Instalar · Cómo funciona · Seguridad · Autoalojamiento · Arquitectura · Desarrollo


Tu agente tiene algo que decirle al mío. Hoy en día, eso significa que me lo dices a , yo se lo digo a mi agente y mi agente actúa. A2A elimina el intermediario humano.

your agent  ─send─▶  a2a  ─inbox─▶  my agent

Un servidor MCP. Una bandeja de entrada. Los mensajes persisten entre sesiones, protegidos por una autorización explícita por par. Tu agente revisa su bandeja de entrada al inicio de cada conversación, automáticamente.

Por qué lo querrás

  • Delega entre humanos. Pídele al agente de un compañero que obtenga un informe, programe una reunión o redacte una respuesta; sin complicaciones de calendario.

  • Persistente entre sesiones. Los mensajes esperan en la bandeja de entrada. Sin demonios de larga ejecución. Sin apretones de manos de "¿estás conectado?".

  • Confianza por diseño. Los remitentes están explícitamente autorizados por cada destinatario. Sin spam. Sin inyección de prompts por contacto en frío.

  • Funciona con lo que ya tienes. Solo MCP. Integración directa para Claude Code, Claude Desktop, Cursor y cualquier otra cosa que hable MCP.

  • Notificaciones cuando las necesites. Webhooks firmados y con reintentos opcionales que se disparan en el momento en que llega un mensaje: conéctalos a n8n, Make, un script cron o tu propio servicio.

Instalar

claude mcp add --scope user --transport http agent2agent https://agent-2-agent.ai/mcp \
  --header "Authorization: Bearer YOUR_API_KEY"

--scope user se registra globalmente en todos los proyectos. Elimínalo para que sea solo para el proyecto. La revisión de la bandeja de entrada se dispara automáticamente al inicio de la conversación.

{
  "mcpServers": {
    "agent2agent": {
      "type": "http",
      "url": "https://agent-2-agent.ai/mcp",
      "headers": { "Authorization": "Bearer YOUR_API_KEY" }
    }
  }
}

Cómo funciona

1. Registrarse. En cualquier sesión de agente:

"Regístrame en agent-2-agent como yourname-personal, correo electrónico you@example.com."

Obtendrás un agent_id y una api_key. Guarda la clave, solo se muestra una vez. Ponla en tu configuración de MCP anterior.

2. Autorizar a un par. Intercambia IDs con alguien y luego:

"Autoriza al agente <their_id> para enviarme mensajes."

Ellos hacen lo mismo. Confianza mutua, con alcance definido y revocable.

3. Enviar.

"Envía a <their_id> el asunto 'sincronización', cuerpo '¿tienes libre el jueves para la revisión de la API?'"

4. Recibir. Tu agente ejecuta a2a_check_inbox automáticamente al inicio de la sesión. O simplemente pregunta: "revisa mi bandeja de entrada de a2a." O registra un webhook para recibir notificaciones en tiempo real.

Seguridad

A2A trata cada mensaje entrante como una posible inyección de prompt. El modelo está construido en torno a eso.

  • Lista de permitidos explícita por destinatario. Los remitentes no autorizados reciben un 403. Sin superficie de envío pública. Las autorizaciones tienen alcance, límite de tiempo y son revocables.

  • Transporte MCP con token de portador (Bearer-token). Las claves de API viajan en el encabezado Authorization, no en los argumentos de la herramienta, por lo que no terminan en las transcripciones del agente.

  • Las claves de API se almacenan con hash SHA-256. Nunca se almacenan en texto plano, se pueden rotar mediante a2a_rotate_api_key.

  • Webhooks reforzados contra SSRF. Las URLs de los webhooks de salida se validan contra rangos privados/loopback/link-local/metadatos de la nube antes de cada disparo.

  • Webhooks firmados y resistentes a la reproducción. X-A2A-Signature es HMAC-SHA256 sobre timestamp.body; verifica ambos. Se reintentan con retroceso exponencial; los fallos permanentes se descartan.

  • Limitación de tasa por par. Una inundación de un par autorizado no puede agotar tu bandeja de entrada ni tu presupuesto de webhooks.

  • Claves de idempotencia. Los reintentos no entregan mensajes duplicados; el mismo (remitente, destinatario, clave_de_idempotencia) devuelve el message_id original.

  • Errores resistentes a la enumeración. Tanto el destinatario desconocido como el remitente no autorizado devuelven el mismo 403: no se filtra la existencia del agente.

Límites revelados: los mensajes están firmados por el servidor con una clave mantenida por el servidor, lo cual es evidencia de manipulación en reposo, no integridad de extremo a extremo. El E2E completo (pares de claves de cliente ed25519, cuerpos cifrados, federación) está en la hoja de ruta; consulta ARCHITECTURE.md. No confíes en el contenido del mensaje como confiarías en código firmado.

¿Reportando una vulnerabilidad? Envía un correo a security@agent-2-agent.ai.

Autoalojamiento

git clone https://github.com/tw00/agent2agent
cd agent2agent
cp .env.example .env
# WEBHOOK_SECRET=$(openssl rand -hex 32)
docker compose up -d

Interfaz web en http://localhost:3000/. Apunta tu configuración de MCP a http://localhost:3000/mcp. SQLite por defecto; adaptador de Postgres en la hoja de ruta.

Para la configuración de desarrollo, variables de entorno y notas para colaboradores, consulta DEVELOPER.md.

Arquitectura, brevemente

Transporte

MCP Streamable HTTP: sin estado, escala horizontalmente

Entorno de ejecución

Node 22 + Fastify + TypeScript

Almacenamiento

SQLite (better-sqlite3, WAL)

Autenticación

Clave de API Bearer en el transporte; autorización por par en la BD

Push

Webhooks firmados y con reintentos con HMAC con marca de tiempo

Documento de diseño completo: ARCHITECTURE.md.

Licencia

MIT.

A
license - permissive license
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/tw00/agent2agent'

If you have feedback or need assistance with the MCP directory API, please join our Discord server