Esqueleto técnico para un agente de consultas a base de datos vía MCP.
- Contratos de entrada y salida.
- Capa de orquestación.
- Capa de caché de esquema.
- Abstracciones para MCP.
- Validador de SQL.
- Planner heurístico que genera SQL a partir del prompt y del esquema.
- Configuración por variables de entorno para credenciales y endpoints.
- Un entrypoint HTTP estándar para probar el agente localmente.
- Llega
AgentRequestcondatabase_idyprompt. DatabaseOrchestratorinstancia la base en MCP.SchemaCachese consulta antes de pedir el esquema.SchemaInspectorobtiene metadatos si la caché no aplica.QueryPlannergenera la SQL usando el prompt y el esquema.QueryValidatorvalida seguridad y dialecto.MCPServerClientejecuta la consulta.ResultFormattertransforma el resultado.
Estas variables ya están preparadas para cuando conectes un API real o un MCP real:
LLM_PROVIDER: proveedor del modelo, por ejemploollama.LLM_API_KEY: credencial de la API que vaya a generar o razonar sobre SQL.LLM_BASE_URL: endpoint base si usas un proveedor compatible o privado. Para Ollama suele serhttp://localhost:11434.LLM_MODEL: modelo a usar, por ejemplophi4-mini.OLLAMA_BASE_URL: URL local de Ollama, normalmentehttp://localhost:11434.OLLAMA_MODEL: nombre del modelo local, por ejemplophi4-mini.OLLAMA_TIMEOUT_SECONDS: tiempo máximo de espera para el modelo local.OLLAMA_ALLOW_FALLBACK: si falla Ollama, permite usar el planner heurístico.MCP_TRANSPORT: transporte del servidor MCP, por ejemplohttpostdio.MCP_SERVER_URL: URL del servidor MCP de pruebas o real.MCP_API_KEY: credencial para acceder al servidor MCP si aplica.SCHEMA_CACHE_TTL_SECONDS: vida útil del esquema cacheado.DEFAULT_MAX_ROWS: límite por defecto de filas para las consultas.ALLOW_WRITE_DEFAULT: activa o desactiva escritura por defecto.HTTP_HOST: host donde escucha el servidor HTTP.HTTP_PORT: puerto del servidor HTTP.HTTP_API_KEY: si se define, exigeAuthorization: Bearer ...oX-API-Key.DEMO_DATABASE_ID: id de base de datos semilla para el modo de pruebas.MCP_INSTANTIATE_PATH,MCP_SCHEMA_PATH,MCP_QUERY_PATH,MCP_RELEASE_PATH: rutas HTTP del MCP.
El agente no se conecta directamente a la base. Primero llama al MCP para instanciar una base temporal usando database_id. El MCP devuelve un DatabaseHandle y luego el mismo canal sirve para pedir el esquema, ejecutar la consulta y liberar la instancia. Eso te permite desacoplar el agente de la infraestructura real y cambiar el backend sin tocar la lógica de negocio.
En este repositorio la implementación es in-memory para pruebas, pero el contrato ya quedó listo para reemplazarla por un cliente MCP real.
Puedes arrancar el servidor con:
python -m data_analysis_backendEndpoints:
GET /healthPOST /query
Streaming opcional:
{
"request_id": "req-1",
"user_id": "user-1",
"prompt": "show customers",
"database_id": "demo-db",
"stream": true
}Cuando stream es true, el servidor responde con eventos SSE:
progress: mensajes cortos de avancefinal: el resultado completodone: cierre del stream
Ejemplo de request:
{
"request_id": "req-1",
"user_id": "user-1",
"prompt": "show customers",
"database_id": "demo-db"
}El modo local usa un MCP en memoria para pruebas. Si MCP_SERVER_URL está definido, el servidor usa el cliente MCP HTTP configurable; si no, cae al modo in-memory. Si LLM_BASE_URL apunta a Ollama y el modelo está disponible, el planner intentará usarlo; si falla, cae al planner heurístico para que el servidor siga respondiendo.
- Sustituir el cliente MCP in-memory por uno real contra tu servidor.
- Conectar un generador LLM real usando
LLM_API_KEYyLLM_BASE_URL. - Añadir tests para cache hit, cache miss e invalidación por error.
- Añadir autenticación y autorización.