Ir al contenido

A2A Protocol: Descubrimiento Multi-Agente

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 especializado

El DevOps Agent no conoce los tools internos de los otros agentes — solo conoce los skills publicados en sus agent.json.

Cada agente especializado tiene un agent.json que declara sus capacidades para que otros agentes los descubran.

{
"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"
]
}
]
}

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 RemoteA2aAgent
from 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.
"""
)
  1. Levanta los agentes especializados como servidores A2A:

    cd examples/a2a_demo
    adk api_server --a2a --port 9999 .

    Esto inicia DNS Agent y Monitoring Agent como endpoints HTTP en:

    • http://localhost:9999/a2a/dns_agent
    • http://localhost:9999/a2a/monitoring_agent
  2. Desde otra terminal, corre la demo de delegación:

    python examples/a2a_demo/demo_a2a.py --demo
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 resultado
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 completo
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 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│
python examples/a2a_demo/demo_a2a.py

Escribe 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