← volver a proyectos
Proyecto

Pokedex Agent — Agente Claude con MCP en Databricks

Plataforma de datos Pokémon en Databricks (Terraform + Medallion) con un agente Claude ("Profesor Oak") que consume la capa Gold vía Model Context Protocol — cada ficha, comparación y matchup sale de un pipeline curado, sin que el modelo invente un solo stat. Quinto proyecto de la serie, y el primero que expone datos a un agente LLM a través de tools propias con hooks reales.

Arquitectura
Terraform
Bronze / Silver
DQ gate
Gold
MCP Server
Agente Claude

5 fuentes de PokeAPI se ingestan en paralelo hacia Bronze, se normalizan y tipan en Silver, y pasan por un Data Quality gate antes de llegar a Gold (pokemon_profile, battle_stats, type_matchups, generation_summary) — si el gate falla, el pipeline se detiene y Gold no se actualiza. Un MCP server desplegado como Databricks App expone esa capa Gold con 4 tools de solo lectura, y el agente Claude "Profesor Oak" las consume con hooks propios antes de responder en oak_app, una segunda Databricks App en Streamlit con tema Día/Noche.

Decisiones de ingeniería
Stack
Databricks Terraform Delta Lake Unity Catalog MCP Claude Agent SDK Streamlit
Ver repo en GitHub
El problema
Exponer una capa de datos curada a un agente LLM sin que ese agente termine inventando stats, matchups o precios — y sin mezclar la personalidad del agente con las reglas operativas que tiene que cumplir sí o sí.
La solución
Pipeline Medallion con Data Quality gate real entre Silver y Gold, un MCP server de solo lectura con tools granulares y schemas estrictos, y un agente Claude ("Profesor Oak") con hooks que validan el input antes de ejecutar cada tool y detectan errores en el resultado — la personalidad vive en el system prompt, separada por completo de las reglas operativas.
demo en video
Qué evalúa esto
Pregunta típica de entrevistaDónde está la respuesta
¿Cómo evitás que el LLM invente datos?reglas/01-datos-medallion.md — cálculos y matchups resueltos en Gold, nunca en el prompt
¿Cómo separás personalidad de reglas operativas en un system prompt?reglas/03-agente-mcp.md — IDENTITY vs. RULES, nunca en el mismo párrafo
¿Cómo forzás el uso de una tool específica?tool_choice forzado en compare_pokemonreglas/03-agente-mcp.md
¿Cómo bloqueás un input inválido antes de que llegue a la tool?Hook PreToolUse valida Pokémon/generación contra Gold — reglas/03-agente-mcp.md
¿Cómo manejás un fallo de tool en runtime?Hook PostToolUse detecta isError: truereglas/03-agente-mcp.md
¿Por qué declarar la infra desde el día 1?reglas/02-infra-terraform.md — storage/catálogo primero, jobs después, App al final