Este proyecto es una demostración completa de un ecosistema de agentes inteligentes especializados en información Pokemon, implementado usando tres tecnologías clave de Google:
- ADK (Agent Development Kit) - Framework para crear agentes con LLM
- MCP (Model Context Protocol) - Protocolo para herramientas y funcionalidades externas
- A2A (Agent-to-Agent) - Comunicación e interoperabilidad entre agentes
Pokemon Agent Ecosystem
├── Pokemon Agent (Puerto 10001) # Agente principal de información Pokemon
├── Pokedex Assistant (Puerto 10002) # Agente analítico especializado
├── Master Agent (Puerto 10003) # Agente orquestador
├── Pokemon MCP Server (Puerto 8080) # Servidor de herramientas básicas
└── Analytics MCP Server (Puerto 8081) # Servidor de análisis y comparaciones
graph TB
User[Usuario] --> MA[Master Agent]
MA --> PA[Pokemon Agent]
MA --> PDA[Pokedex Assistant]
PA --> MCP1[Pokemon MCP Server]
PDA --> MCP2[Analytics MCP Server]
MCP1 --> API[PokeAPI]
MCP2 --> API
PA -.->|A2A| PDA
PDA -.->|A2A| PA
Puerto: 10001
Especialidad: Información básica de Pokemon
- ✅ Información detallada de Pokemon individuales
- ✅ Datos de especies y descripciones
- ✅ Búsqueda y listado de Pokemon
- ✅ Comunicación A2A con Pokedex Assistant
get_pokemon_info(pokemon_name)- Información completa del Pokemonget_pokemon_species(pokemon_name)- Datos de especie y evoluciónsearch_pokemon(limit, offset)- Búsqueda paginada
- Puede solicitar análisis comparativos al Pokedex Assistant
- Maneja derivaciones de consultas analíticas
- Colaboración automática para respuestas complejas
Puerto: 10002
Especialidad: Análisis y comparaciones Pokemon
- 📊 Comparaciones estadísticas detalladas
- ⚔️ Análisis de efectividad de tipos
- 🎯 Generación de trivia y datos curiosos
- 📈 Rankings estadísticos
compare_pokemon_stats(pokemon1, pokemon2)- Comparación estadísticacalculate_type_effectiveness(attacker_type, defender_types)- Efectividad de tiposgenerate_pokemon_trivia(pokemon_name)- Trivia y curiosidadesget_stat_rankings(stat_name, limit)- Rankings por estadística
- Puede solicitar información básica al Pokemon Agent
- Especializado en análisis profundos y educativos
- Proporciona insights estadísticos avanzados
Puerto: 10003
Especialidad: Orquestación y coordinación
- 🎭 Coordinación entre agentes especializados
- 🔀 Enrutamiento inteligente de consultas
- 📋 Gestión de flujos de trabajo complejos
- 🤝 Orquestación de colaboraciones A2A
Puerto: 8080
Propósito: Herramientas básicas de Pokemon
# Información básica
get_pokemon_info(pokemon_name: str) -> Dict
# Datos de especie
get_pokemon_species(pokemon_name: str) -> Dict
# Búsqueda y listado
search_pokemon(limit: int = 20, offset: int = 0) -> DictPuerto: 8081
Propósito: Análisis y comparaciones avanzadas
# Comparaciones estadísticas
compare_pokemon_stats(pokemon1: str, pokemon2: str) -> Dict
# Análisis de batalla
calculate_type_effectiveness(attacker_type: str, defender_types: List[str]) -> Dict
# Generación de trivia
generate_pokemon_trivia(pokemon_name: str) -> Dict
# Rankings estadísticos
get_stat_rankings(stat_name: str, limit: int = 10) -> DictEl sistema implementa comunicación A2A bidireccional entre agentes:
# Pokemon Agent solicitando análisis
comparison = await pokemon_agent.request_pokemon_comparison("Pikachu", "Raichu")
# Pokedex Assistant solicitando información básica
basic_info = await assistant_agent.request_pokemon_info("Charizard")-
Derivación Inteligente
- Pokemon Agent deriva consultas analíticas → Pokedex Assistant
- Pokedex Assistant solicita información básica → Pokemon Agent
-
Análisis Colaborativo
- Combinación de datos básicos + análisis profundo
- Respuestas enriquecidas con múltiples perspectivas
-
Flujos de Trabajo Complejos
- Orquestación via Master Agent
- Secuencias de tareas coordinadas
- Separación de responsabilidades: Cada agente tiene un propósito específico
- Expertise focalizado: Pokemon Agent para datos, Assistant para análisis
- Escalabilidad: Fácil agregar nuevos agentes especializados
- Herramientas reutilizables: Servidores MCP independientes
- Fácil mantenimiento: Lógica de negocio separada de agentes
- Testabilidad: Cada componente se puede probar por separado
- Interoperabilidad: Agentes pueden comunicarse seamlessly
- Enriquecimiento de respuestas: Combinación automática de capacidades
- Flujos complejos: Orquestación de tareas multi-agente
- Horizontal: Agregar nuevos agentes especializados
- Vertical: Extender capacidades de agentes existentes
- Plug-and-play: Nuevos servidores MCP sin modificar agentes
# Python 3.10+
python --version
# uv package manager
curl -LsSf https://astral.sh/uv/install.sh | shgcloud auth login
gcloud config set project [ID_DE_TU_PROYECTO]
# Si necesitas verificar qué cuenta está activa o qué proyecto está configurado, puedes usar:
gcloud auth list
gcloud config list# Clonar proyecto
git clone <repository-url>
cd pokemon-agent
# Instalar dependencias
uv sync
# Configurar variables de entorno
cp .env.example .env
# Editar .env con configuración necesaria# .env
GOOGLE_API_KEY=your_gemini_api_key
A2A_HOST=localhost
A2A_PORT=10001
A2A_PORT_ASSISTANT=10002
A2A_PORT_MASTER=10003
MCP_SERVER_URL=http://localhost:8080/mcp
ANALYTICS_MCP_SERVER_URL=http://localhost:8081/mcp
POKEMON_AGENT_URL=http://localhost:10001
ASSISTANT_AGENT_URL=http://localhost:10002# Terminal 1 - Pokemon MCP Server
cd mcp-server
uv run server.py
# Terminal 2 - Analytics MCP Server
cd analytics-mcp-server
uv run server.py# Terminal 3 - Pokemon Agent
uv run uvicorn pokemon_agent.agent:a2a_app --host localhost --port 10001
# Terminal 4 - Pokedex Assistant
uv run uvicorn pokedex_assistant.agent:a2a_app --host localhost --port 10002
# Terminal 5 - Master Agent
uv run adk web# Test Pokemon Agent
cd pokemon_agent
uv run test_client.py
# Test Pokedx Assistant
cd pokedex_assistant
uv run test_client.pycd pokedex_assistant
uv run test_client.py- Individual Agent Queries - Consultas directas a cada agente
- Collaborative Analysis - Análisis que requiere ambos agentes
- Specialized Queries - Funcionalidades específicas por agente
- Interactive Mode - Modo interactivo para testing manual
# Modo interactivo
> pokemon Tell me about Mew
> assistant Compare Mew vs Mewtwo
> compare Pikachu Raichu
> quit- Variables de entorno para API keys
- Timeouts en comunicaciones HTTP
- Validación de entrada en herramientas MCP
- Logging estructurado para debugging
- Logs detallados en cada componente
- Métricas de performance por agente
- Tracking de comunicaciones A2A
- Health checks para servidores MCP
- Arquitectura stateless
- Comunicación HTTP asíncrona
- Balanceeo de carga posible
- Contenainerización ready
- Microservicios: Cada agente como servicio independiente
- Event-driven: Comunicación asíncrona entre componentes
- Domain-driven: Separación por dominios de conocimiento
- API-first: Interfaces bien definidas entre servicios
- Crear directorio
new_agent/ - Implementar
agent.pycon ADK + A2A - Definir
AgentCardcon skills específicos - Configurar puerto único en variables de entorno
- Documentar en README
- Crear directorio
new_mcp_server/ - Implementar herramientas con FastMCP
- Configurar puerto único
- Agregar tests en
test_server.py - Actualizar documentación de herramientas
🎯 Objetivo: Demostrar las capacidades de ADK, MCP y A2A en un ecosistema de agentes especializados, colaborativos y escalables.


