Data Pilot (Snowflake)
Un servidor completo del Protocolo de Contexto de Modelo (MCP) para interactuar con Snowflake usando lenguaje natural e IA.
Documentación
Servidor MCP de DataPilot
Navega por tus datos con asistencia de IA. Un servidor integral de Protocolo de Contexto de Modelo (MCP) para interactuar con Snowflake usando lenguaje natural e IA. Construido con FastMCP 2.0 e integración con OpenAI.
Características
🗄️ Operaciones Principales de Base de Datos
- execute_sql - Ejecuta consultas SQL con resultados
- list_databases - Lista todas las bases de datos accesibles
- list_schemas - Lista los esquemas en una base de datos
- list_tables - Lista las tablas en una base de datos/esquema
- describe_table - Obtén información detallada de las columnas de una tabla
- get_table_sample - Recupera datos de muestra de las tablas
🏭 Gestión de Almacenes
- list_warehouses - Lista todos los almacenes disponibles
- get_warehouse_status - Obtén el estado actual del almacén, la base de datos y el esquema
🤖 Funciones Impulsadas por IA
- natural_language_to_sql - Convierte preguntas en lenguaje natural a consultas SQL
- analyze_query_results - Análisis de resultados de consultas impulsado por IA
- suggest_query_optimizations - Obtén sugerencias de optimización para consultas SQL
- explain_query - Explicaciones en inglés sencillo de consultas SQL
- generate_table_insights - Información generada por IA sobre los datos de las tablas
📊 Recursos (Acceso a Datos)
snowflake://databases- Accede a la lista de bases de datossnowflake://schemas/{database}- Accede a la lista de esquemassnowflake://tables/{database}/{schema}- Accede a la lista de tablassnowflake://table/{database}/{schema}/{table}- Accede a los detalles de las tablas
📝 Prompts (Plantillas)
- sql_analysis_prompt - Plantillas para análisis SQL
- data_exploration_prompt - Plantillas para exploración de datos
- sql_optimization_prompt - Plantillas para optimización de consultas
Instalación
-
Clona y configura el proyecto:
git clone <repository-url> cd datapilot python -m venv venv source venv/bin/activate # On Windows: venv\Scripts\activate -
Instala las dependencias:
pip install -r requirements.txt -
Configura las variables de entorno:
cp env.template .env # Edit .env with your credentials
Configuración
Variables de Entorno
Crea un archivo .env con la siguiente configuración:
# Required: Snowflake Connection
# Account examples:
# - ACCOUNT-LOCATOR.snowflakecomputing.com (recommended)
# - ACCOUNT-LOCATOR.region.cloud
# - organization-account_name
SNOWFLAKE_ACCOUNT=ACCOUNT-LOCATOR.snowflakecomputing.com
SNOWFLAKE_USER=your_username
SNOWFLAKE_PASSWORD=your_password
# Optional: Default Snowflake Context
SNOWFLAKE_WAREHOUSE=your_warehouse_name
SNOWFLAKE_DATABASE=your_database_name
SNOWFLAKE_SCHEMA=your_schema_name
SNOWFLAKE_ROLE=your_role_name
# Required: OpenAI API
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-4 # Optional, defaults to gpt-4
Configuración de la Cuenta de Snowflake
-
Obtén tu identificador de cuenta de Snowflake - Se admiten múltiples formatos:
- Recomendado:
ACCOUNT-LOCATOR.snowflakecomputing.com(por ejemplo,SCGEENJ-UR66679.snowflakecomputing.com) - Regional:
ACCOUNT-LOCATOR.region.cloud(por ejemplo,xy12345.us-east-1.aws) - Legado:
organization-account_name
- Recomendado:
-
Asegúrate de que tu usuario tenga los permisos adecuados:
USAGEen almacenes, bases de datos y esquemasSELECTen tablas para consultasSHOWprivilegios para listar objetos
Uso
Ejecutando el Servidor
Método 1: Ejecución directa
python -m src.main
Método 2: Usando la CLI de FastMCP
fastmcp run src/main.py
Método 3: Modo de desarrollo con recarga automática
fastmcp dev src/main.py
Conectándose a Clientes MCP
Claude Desktop
Agrega a tu configuración de Claude Desktop:
{
"mcpServers": {
"datapilot": {
"command": "python",
"args": ["-m", "src.main"],
"cwd": "/path/to/datapilot",
"env": {
"SNOWFLAKE_ACCOUNT": "your_account",
"SNOWFLAKE_USER": "your_user",
"SNOWFLAKE_PASSWORD": "your_password",
"OPENAI_API_KEY": "your_openai_key"
}
}
}
}
Usando el Cliente FastMCP
from fastmcp import Client
async def main():
async with Client("python -m src.main") as client:
# List databases
databases = await client.call_tool("list_databases")
print("Databases:", databases)
# Natural language to SQL
result = await client.call_tool("natural_language_to_sql", {
"question": "Show me the top 10 customers by revenue",
"database": "SALES_DB",
"schema": "PUBLIC"
})
print("Generated SQL:", result)
Ejemplo de Uso
1. Consulta en Lenguaje Natural
# Ask a question in natural language
question = "What are the top 5 products by sales volume last month?"
sql = await client.call_tool("natural_language_to_sql", {
"question": question,
"database": "SALES_DB",
"schema": "PUBLIC"
})
print(f"Generated SQL: {sql}")
2. Ejecutar y Analizar
# Execute a query and get AI analysis
analysis = await client.call_tool("analyze_query_results", {
"query": "SELECT product_name, SUM(quantity) as total_sales FROM sales GROUP BY product_name ORDER BY total_sales DESC LIMIT 10",
"results_limit": 100,
"analysis_type": "summary"
})
print(f"Analysis: {analysis}")
3. Información de Tablas
# Get AI-powered insights about a table
insights = await client.call_tool("generate_table_insights", {
"table_name": "SALES_DB.PUBLIC.CUSTOMERS",
"sample_limit": 50
})
print(f"Table insights: {insights}")
4. Optimización de Consultas
# Get optimization suggestions
optimizations = await client.call_tool("suggest_query_optimizations", {
"query": "SELECT * FROM large_table WHERE date_column > '2023-01-01'"
})
print(f"Optimization suggestions: {optimizations}")
Arquitectura
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ MCP Client │ │ FastMCP │ │ Snowflake │
│ (Claude/etc) │◄──►│ Server │◄──►│ Database │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ OpenAI API │
│ (GPT-4) │
└─────────────────┘
Estructura del Proyecto
datapilot/
├── src/
│ ├── __init__.py
│ ├── main.py # Main FastMCP server
│ ├── models.py # Pydantic data models
│ ├── snowflake_client.py # Snowflake connection & operations
│ └── openai_client.py # OpenAI integration
├── requirements.txt # Python dependencies
├── env.template # Environment variables template
└── README.md # This file
Desarrollo
Agregando Nuevas Herramientas
- Define tu función de herramienta en
src/main.py:
@mcp.tool()
async def my_new_tool(param: str, ctx: Context) -> str:
"""Description of what the tool does"""
await ctx.info(f"Processing: {param}")
# Your logic here
return "result"
- Agrega manejo de errores y registro adecuados
- Prueba con el modo de desarrollo de FastMCP:
fastmcp dev src/main.py
Agregando Nuevos Recursos
@mcp.resource("snowflake://my-resource/{param}")
async def my_resource(param: str) -> Dict[str, Any]:
"""Resource description"""
# Your logic here
return {"data": "value"}
Solución de Problemas
Problemas Comunes
-
Errores de Conexión
- Verifica las credenciales de Snowflake en
.env - Comprueba la conectividad de red
- Asegúrate de que el usuario tenga los permisos requeridos
- Verifica las credenciales de Snowflake en
-
Errores de OpenAI
- Verifica que
OPENAI_API_KEYesté configurado correctamente - Comprueba la cuota y facturación de la API
- Asegúrate de que el nombre del modelo sea correcto
- Verifica que
-
Errores de Importación
- Activa el entorno virtual
- Instala todos los requisitos:
pip install -r requirements.txt - Ejecuta desde el directorio raíz del proyecto
Registro
Habilita el registro de depuración:
LOG_LEVEL=DEBUG
Contribuciones
- Haz un fork del repositorio
- Crea una rama de características
- Realiza tus cambios
- Agrega pruebas si corresponde
- Envía una solicitud de extracción
Licencia
Este proyecto está licenciado bajo la Licencia MIT.
Soporte
Para problemas y preguntas:
- Consulta la sección de solución de problemas
- Revisa la documentación de FastMCP: https://gofastmcp.com/
- Abre un problema en el repositorio