A2A Protocol: Descubrimiento Multi-Agente
Arquitectura del sistema
Sección titulada «Arquitectura del sistema»El directorio examples/a2a_demo/ contiene tres agentes que se comunican entre sí via A2A Protocol:
DevOps Agent (0 tools propios)├── descubre via A2A│ ├── DNS Agent → 6 tools internos (Cloudflare)│ └── Monitoring Agent → 3 tools internos (HTTP, SSL, WHOIS)└── delega tareas a cada agente especializadoEl DevOps Agent no conoce los tools internos de los otros agentes — solo conoce los skills publicados en sus agent.json.
agent.json — AgentCard
Sección titulada «agent.json — AgentCard»Cada agente especializado tiene un agent.json que declara sus capacidades para que otros agentes los descubran.
DNS Agent (dns_agent/agent.json)
Sección titulada «DNS Agent (dns_agent/agent.json)»{ "name": "DNS Management Agent", "description": "Gestiona registros DNS via Cloudflare API para un dominio específico", "url": "http://localhost:9999/a2a/dns_agent", "version": "1.0.0", "capabilities": { "streaming": false, "pushNotifications": false }, "defaultInputModes": ["text/plain"], "defaultOutputModes": ["text/plain"], "skills": [ { "id": "dns-management", "name": "DNS Management", "description": "Gestiona registros DNS: crear, buscar, actualizar, validar y verificar propagación", "tags": ["dns", "cloudflare", "infrastructure", "devops"], "examples": [ "Crea api.nicolasneira.dev apuntando a 203.0.113.50", "Migra mail.nicolasneira.dev a la IP 5.6.7.8", "Verifica si staging.nicolasneira.dev está propagado" ] } ]}Los 6 tools internos (list_dns_records, create_dns_record, etc.) no aparecen en la AgentCard — son un detalle de implementación. El DevOps Agent solo ve el skill "dns-management".
Monitoring Agent (monitoring_agent/agent.json)
Sección titulada «Monitoring Agent (monitoring_agent/agent.json)»{ "name": "Infrastructure Monitoring Agent", "description": "Verifica estado de sitios web, certificados SSL y WHOIS", "url": "http://localhost:9999/a2a/monitoring_agent", "skills": [ { "id": "infrastructure-monitoring", "name": "Infrastructure Monitoring", "tags": ["monitoring", "health-check", "ssl", "whois", "devops"], "examples": [ "Verifica si nicolasneira.com está respondiendo", "Revisa el certificado SSL de api.nicolasneira.dev", "Consulta el WHOIS de nicolasneira.com" ] } ]}devops_agent/agent.py — Orquestador
Sección titulada «devops_agent/agent.py — Orquestador»El DevOps Agent usa RemoteA2aAgent para conectarse a los agentes especializados. No tiene tools propios — solo sub-agentes remotos.
from google.adk.agents.remote_a2a_agent import RemoteA2aAgentfrom google.adk import Agent
dns_remote = RemoteA2aAgent( name="dns_agent", agent_card="http://localhost:9999/a2a/dns_agent/.well-known/agent-card.json")
monitoring_remote = RemoteA2aAgent( name="monitoring_agent", agent_card="http://localhost:9999/a2a/monitoring_agent/.well-known/agent-card.json")
root_agent = Agent( name="devops_agent", model="gemini-2.5-flash", sub_agents=[dns_remote, monitoring_remote], # 0 tools, solo sub-agentes instruction=""" Eres un DevOps Agent que coordina tareas de infraestructura. Para DNS: delega al dns_agent. Para monitoreo: delega al monitoring_agent. """)Levantar el sistema
Sección titulada «Levantar el sistema»-
Levanta los agentes especializados como servidores A2A:
cd examples/a2a_demoadk api_server --a2a --port 9999 .Esto inicia DNS Agent y Monitoring Agent como endpoints HTTP en:
http://localhost:9999/a2a/dns_agenthttp://localhost:9999/a2a/monitoring_agent
-
Desde otra terminal, corre la demo de delegación:
python examples/a2a_demo/demo_a2a.py --demo
Tres escenarios de la demo
Sección titulada «Tres escenarios de la demo»Escenario 1 — Delegación DNS
Sección titulada «Escenario 1 — Delegación DNS»DevOps Agent: "Crea staging.nicolasneira.dev apuntando a 10.0.0.5"
→ DevOps Agent lee agent-card del DNS Agent→ Crea RemoteA2aAgent para conectar→ Delega la tarea→ DNS Agent ejecuta: list → create → validate → propagation→ task.status = COMPLETED→ DevOps Agent retorna resultadoEscenario 2 — Delegación Monitoring
Sección titulada «Escenario 2 — Delegación Monitoring»DevOps Agent: "¿nicolasneira.com está respondiendo bien?"
→ DevOps Agent identifica: tarea de monitoreo → Monitoring Agent→ Delega→ Monitoring Agent ejecuta: check_url_status + check_ssl_certificate→ Retorna estado completoEscenario 3 — Seguridad cross-domain
Sección titulada «Escenario 3 — Seguridad cross-domain»DevOps Agent: "Crea un registro DNS para google.com"
→ Delega al DNS Agent→ DNS Agent valida: google.com ≠ CLOUDFLARE_DOMAIN→ ❌ Rechaza — fuera de scope→ La restricción persiste a través de la delegación A2ACiclo de comunicación A2A
Sección titulada «Ciclo de comunicación A2A»DevOps Agent DNS Agent │ │ ├─ GET /agent-card.json ────────►│ │◄───────────────── AgentCard ──┤ │ │ ├─ POST /tasks ─────────────────►│ (task.status = submitted) │ ├─ list_dns_records() │ ├─ create_dns_record() │ ├─ validate_dns() │ └─ check_propagation() │◄─────── task.status = completed│Modo interactivo
Sección titulada «Modo interactivo»python examples/a2a_demo/demo_a2a.pyEscribe solicitudes que el DevOps Agent puede delegar a cualquiera de los dos agentes:
> Crea el subdominio blog apuntando a 192.168.0.10> ¿El SSL de nicolasneira.com está vigente?> Lista todos los registros DNS actuales> Verifica el estado de https://nicolasneira.com