ChatQL MCP Server

Consulta bases de datos de SQL Server usando lenguaje natural con modelos OpenAI GPT.

Documentación

ChatQL MCP Server

License: MIT Python 3.8+ SQL Server

Un potente servidor Model Context Protocol (MCP) que permite consultas en lenguaje natural a bases de datos SQL Server. Transforma tus preguntas en inglés en consultas SQL automáticamente usando los modelos GPT de OpenAI, con conocimiento inteligente del esquema y optimización de consultas.

🚀 Perfecto para desarrolladores que usan Cursor AI - Integra directamente en tu flujo de trabajo de desarrollo para obtener información instantánea de la base de datos, exploración de esquemas y análisis de datos sin salir de tu editor de código.

🗃️ Soporte de Bases de Datos

Actualmente soportado:

  • ✅ Microsoft SQL Server (2017+)
  • ✅ SQL Server Express
  • ✅ Azure SQL Database

Próximamente:

  • 🔄 PostgreSQL (en desarrollo)
  • 🔄 MySQL/MariaDB (planificado)
  • 🔄 SQLite (planificado)
  • 🔄 Oracle Database (planificado)

Nota: Esta versión está diseñada específicamente para SQL Server. El soporte para sistemas de bases de datos adicionales está en desarrollo activo y estará disponible en futuras versiones.

🌟 Características

Capacidades principales de la base de datos

  • 🗣️ Lenguaje natural a SQL: Convierte preguntas en inglés a consultas SQL automáticamente
  • 🧠 Conocimiento del esquema: Comprensión inteligente de la estructura de tu base de datos
  • 🔍 Múltiples métodos de consulta: Lenguaje natural, SQL directo y exploración de esquemas
  • 📊 Resultados enriquecidos: Resultados formateados con explicaciones y análisis de consultas
  • 🛡️ Seguridad primero: Validación de consultas integrada y limitación de resultados
  • 🔒 Modo solo SELECT: Alterna entre acceso de solo lectura y acceso completo a la base de datos

Integración para desarrolladores

  • 🔌 Protocolo MCP: Integración nativa con Claude Desktop y Cursor AI
  • 💻 Integración con IDE: Perfecto para flujos de trabajo de desarrollo en Cursor
  • ⚡ Alto rendimiento: Agrupación de conexiones y optimización de consultas
  • 🎯 Registro profesional: Registro integral y manejo de errores

Perfecto para equipos de desarrollo

  • 🚀 Prototipado rápido: Obtén información de la base de datos sin salir de tu editor de código
  • 🔍 Exploración de esquemas: Comprende la estructura de la base de datos mientras programas
  • 🐛 Depuración de datos: Encuentra problemas de datos rápidamente durante el desarrollo
  • 📊 Análisis rápido: Genera informes y perspectivas bajo demanda
  • 🏗️ Diseño de bases de datos: Comprende relaciones y optimiza consultas

🚀 Inicio rápido

Requisitos previos

  • Python 3.8+
  • SQL Server Express (o cualquier edición de SQL Server)
  • ODBC Driver 17 para SQL Server
  • Clave API de OpenAI (para procesamiento de lenguaje natural)

Instalación

  1. Clona el repositorio

    git clone https://github.com/SyedRazaHasnain/chatql-mcp.git
    cd chatql-mcp
    
  2. Crea un entorno virtual

    python -m venv venv
    source venv/bin/activate  # On Windows: venv\Scripts\activate
    
  3. Instala las dependencias

    pip install -r requirements.txt
    
  4. Configura el entorno

    cp env.example .env
    

    Edita .env con tu configuración:

    # Database Configuration
    DB_SERVER=localhost\SQLEXPRESS
    DB_DATABASE=your_database_name
    DB_USERNAME=               # Leave empty for Windows Auth
    DB_PASSWORD=               # Leave empty for Windows Auth
    DB_DRIVER=ODBC Driver 17 for SQL Server
    
    # OpenAI Configuration
    OPENAI_API_KEY=your_openai_api_key_here
    
  5. Conéctate a tu cliente de IA

    Elige tu cliente de IA preferido:

    • 🖥️ Claude Desktop - Uso general y análisis de datos
    • 💻 Cursor AI - Perfecto para flujos de trabajo de desarrollo (¡Recomendado para desarrolladores!)

    No necesitas iniciar el servidor manualmente: ¡tu cliente de IA lo iniciará automáticamente!

🛠️ Herramientas disponibles

Cuando estás conectado vía MCP, el servidor proporciona estas potentes herramientas:

1. execute_natural_language_query

Transforma lenguaje natural en SQL y ejecuta consultas.

Ejemplo:

Query: "Show me the top 10 customers by total order value"

2. execute_direct_sql_query

Ejecuta consultas SQL directamente con validación de seguridad.

Ejemplo:

SELECT TOP 10 CustomerName, SUM(OrderValue) as Total
FROM Customers c JOIN Orders o ON c.ID = o.CustomerID
GROUP BY CustomerName ORDER BY Total DESC

3. get_table_information

Obtén información detallada del esquema de cualquier tabla.

4. list_database_tables

Explora todas las tablas disponibles en tu base de datos.

5. get_table_sample_data

Vista previa de datos de muestra de cualquier tabla.

6. toggle_select_only_mode 🔒

Alterna entre modo solo SELECT (solo lectura) y acceso completo a la base de datos.

Ejemplo:

Enable SELECT-only mode: {"enabled": true}
Enable full access: {"enabled": false}

7. get_security_mode_status 🔒

Verifica el modo de seguridad actual y los permisos disponibles.

📋 Consultas de ejemplo

Aquí tienes algunas consultas de ejemplo en lenguaje natural que puedes probar:

💻 Flujos de trabajo de desarrollo (Perfecto para Cursor)

  • "Muéstrame todas las tablas de la base de datos y sus relaciones"
  • "¿Qué columnas hay en la tabla de usuarios?"
  • "Dame datos de muestra de la tabla de productos para pruebas"
  • "Encuentra usuarios creados en la última semana para depuración"
  • "¿Hay restricciones de clave externa que deba conocer?"
  • "Muéstrame el esquema de la tabla de pedidos"

📊 Inteligencia de negocios

  • "¿Cuáles son nuestros 5 productos más vendidos este mes?"
  • "Muéstrame clientes que no han pedido en los últimos 90 días"
  • "¿Cuál es el valor promedio de pedido por región?"

🔍 Exploración de datos

  • "¿Cuántos registros hay en la tabla de clientes?"
  • "¿Cuáles son las diferentes categorías de productos que tenemos?"
  • "Muéstrame todos los pedidos realizados ayer"

📈 Análisis

  • "¿Cuál es nuestra tendencia de ingresos mensuales este año?"
  • "¿Qué representante de ventas tiene el mejor rendimiento?"
  • "Encuentra registros de clientes duplicados"

🐛 Depuración y solución de problemas

  • "Encuentra registros huérfanos en la tabla de elementos de pedido"
  • "Muéstrame usuarios con direcciones de correo electrónico faltantes"
  • "¿Cuáles son los códigos de error más comunes en nuestra tabla de registros?"
  • "Encuentra productos que nunca han sido pedidos"

⚙️ Opciones de configuración

Configuración de la base de datos

DB_SERVER=localhost\SQLEXPRESS    # SQL Server instance
DB_DATABASE=YourDatabase          # Target database
DB_USERNAME=                      # Username (optional for Windows Auth)
DB_PASSWORD=                      # Password (optional for Windows Auth)
DB_DRIVER=ODBC Driver 17 for SQL Server

Configuración de OpenAI

OPENAI_API_KEY=sk-...            # Your OpenAI API key
OPENAI_MODEL=gpt-4               # Model to use
OPENAI_MAX_TOKENS=2000           # Max tokens per request

Configuración del servidor

MCP_SERVER_NAME=chatql-mcp-server
MCP_SERVER_VERSION=1.0.0
LOG_LEVEL=INFO                   # DEBUG, INFO, WARNING, ERROR
MAX_QUERY_RESULTS=100            # Limit query results
QUERY_TIMEOUT=30                 # Query timeout in seconds

Configuración de seguridad

SELECT_ONLY_MODE=false           # Start in SELECT-only mode
ALLOW_MODE_TOGGLE=true           # Allow clients to toggle modes

🔧 Conexión con clientes de IA

Clientes MCP compatibles

Este servidor funciona con cualquier cliente compatible con MCP:

  • ✅ Claude Desktop - Aplicación de escritorio oficial de Anthropic
  • ✅ Cursor AI - Editor de código impulsado por IA (¡Perfecto para desarrollo!)
  • ✅ Otros clientes MCP - Cualquier aplicación que soporte el protocolo MCP

Cómo funciona la conexión MCP

Tu servidor ChatQL utiliza el Model Context Protocol (MCP) con comunicación stdio:

  1. El cliente lee tu configuración → Encuentra los detalles de tu servidor
  2. El cliente inicia tu servidor → Ejecuta python server.py como subproceso
  3. Se comunica vía stdin/stdout → Mensajes JSON a través de flujos estándar
  4. Tu servidor permanece en ejecución → Procesa solicitudes hasta que el cliente cierre

1. Encuentra el archivo de configuración de Claude Desktop

Para usuarios de Windows (Paso a paso):

  1. Presiona Windows Key + R (abre el cuadro de diálogo Ejecutar)
  2. Escribe: %APPDATA% y presiona Enter
  3. Busca la carpeta "Claude" y haz doble clic en ella
  4. Encuentra el archivo: claude_desktop_config.json
    • Si el archivo no existe, créalo haciendo clic derecho → Nuevo → Documento de texto
    • Nómbralo exactamente: claude_desktop_config.json (¡no .txt!)

Para usuarios de Mac:

  1. Presiona Cmd + Shift + G (abre Ir a carpeta)
  2. Escribe: ~/Library/Application Support/Claude/
  3. Encuentra o crea: claude_desktop_config.json

2. Edita el archivo de configuración

Abre el archivo con el Bloc de notas (Windows) o TextEdit (Mac) y agrega esto:

{
  "mcpServers": {
    "chatql-mcp": {
      "command": "python",
      "args": ["C:/Users/YourUsername/Desktop/mcp/server.py"],
      "env": {
        "DB_SERVER": "localhost\\SQLEXPRESS",
        "DB_DATABASE": "YourDatabase",
        "OPENAI_API_KEY": "your-openai-api-key"
      }
    }
  }
}

🚨 CRÍTICO: Reemplaza estos con TUS valores reales:

  • C:/Users/YourUsername/Desktop/mcp/server.py → Tu ruta completa real a server.py
  • YourDatabase → Tu nombre real de base de datos
  • your-openai-api-key → Tu clave API real de OpenAI

💡 Cómo encontrar la ruta de tu server.py:

  1. Navega a tu carpeta de proyecto (donde guardaste ChatQL)
  2. Haz clic derecho en server.py
  3. Haz clic en "Propiedades" (Windows) o "Obtener información" (Mac)
  4. Copia la ruta completa y pégala en la configuración

3. Inicia Claude Desktop

  1. Guarda tu archivo de configuración (Ctrl+S)
  2. Cierra Claude Desktop por completo (clic derecho en el icono de la bandeja del sistema → Salir)
  3. Vuelve a abrir Claude Desktop (leerá tu nueva configuración)
  4. Busca las herramientas MCP en la interfaz de Claude

4. Prueba tu conexión

Una vez que Claude Desktop se haya reiniciado, prueba estas consultas de prueba:

Consultas en lenguaje natural:

  • "¿Qué tablas están disponibles en mi base de datos?"
  • "Muéstrame datos de muestra de la tabla de clientes"
  • "¿Cuántos registros hay en cada tabla?"

SQL directo:

  • "Ejecuta este SQL: SELECT TOP 5 * FROM TuTabla"
  • "Obtén la información del esquema de la tabla de pedidos"

5. Indicadores de éxito

Cuando Claude se conecta correctamente, verás:

  • 🔧 Herramientas MCP listadas en el panel de herramientas de Claude
  • 📊 Respuestas enriquecidas de la base de datos con tablas formateadas
  • ⚡ Ejecución rápida de consultas desde tu base de datos
  • 🛡️ Validaciones de seguridad que bloquean consultas peligrosas

Si la conexión falla, verifica:

  • ✅ La ruta del archivo es correcta en tu configuración
  • ✅ Python está en tu PATH
  • ✅ Todas las dependencias instaladas (pip install -r requirements.txt)
  • ✅ La conexión a la base de datos funciona (verifica tu archivo .env)

🎯 Integración con Cursor AI (Desarrolladores)

¿Por qué usar ChatQL con Cursor?

Transforma tu flujo de trabajo de desarrollo conectando tu base de datos directamente a Cursor AI:

  • 🔍 Exploración instantánea de esquemas - "Muéstrame todas las tablas en esta base de datos"
  • 📊 Análisis rápido de datos - "¿Cuáles son los tipos de usuario más comunes en nuestro sistema?"
  • 🐛 Depuración de problemas de datos - "Encuentra usuarios que tienen pedidos pero no dirección de correo electrónico"
  • 🏗️ Ayuda con diseño de bases de datos - "Muéstrame la relación entre las tablas de usuarios y pedidos"
  • ⚡ Prototipado rápido - Obtén datos de muestra para pruebas sin escribir SQL

Configuración con Cursor

1. Configura Cursor para MCP

Crea o edita tu archivo de configuración de Cursor:

Windows: %APPDATA%\Cursor\User\settings.json Mac: ~/Library/Application Support/Cursor/User/settings.json Linux: ~/.config/Cursor/User/settings.json

Agrega la configuración MCP:

{
  "mcp.servers": {
    "chatql-mcp": {
      "command": "python",
      "args": ["C:/path/to/your/project/server.py"],
      "env": {
        "DB_SERVER": "localhost\\SQLEXPRESS",
        "DB_DATABASE": "YourDatabase",
        "OPENAI_API_KEY": "your-openai-api-key"
      }
    }
  }
}

2. Ejemplos de flujo de trabajo de desarrollo

🔍 Exploración de la base de datos durante el desarrollo
Developer: "What tables do I have available?"
ChatQL: Shows all database tables with schemas

Developer: "Show me the structure of the users table"
ChatQL: Displays columns, data types, constraints, relationships

Developer: "Give me sample data from the orders table"
ChatQL: Returns formatted sample records
🐛 Depuración de problemas de datos
Developer: "Find all users created in the last 7 days"
ChatQL: Converts to SQL and shows recent users

Developer: "Are there any orphaned records in order_items?"
ChatQL: Checks for referential integrity issues

Developer: "Show me users with duplicate email addresses"
ChatQL: Finds and displays duplicate data
📊 Análisis rápido para funciones
Developer: "What's the distribution of user roles in our system?"
ChatQL: Groups and counts user roles

Developer: "Show me the average order value by month"
ChatQL: Generates time-based analytics

Developer: "Which products have never been ordered?"
ChatQL: Finds unused inventory

3. Beneficios específicos de Cursor

  • 🎯 Consciente del contexto: Cursor puede ver tu código y la estructura de la base de datos simultáneamente
  • ⚡ Rápido como un rayo: Sin cambiar entre herramientas de base de datos y tu editor
  • 🧠 Consultas inteligentes: Cursor comprende el contexto de tu código para mejores preguntas
  • 🔄 Desarrollo iterativo: Haz preguntas de seguimiento basadas en los resultados de las consultas
  • 📝 Generación de código: Genera código relacionado con la base de datos basado en información del esquema

4. Ejemplo de sesión de desarrollo

# Working on a user dashboard feature
Developer: "Show me the user table structure"
ChatQL: Returns user schema with all fields

Developer: "What's the relationship between users and their orders?"
ChatQL: Shows JOIN relationships and foreign keys

Developer: "Give me sample data for testing the dashboard"
ChatQL: Returns realistic test data

Developer: "How many users registered each month this year?"
ChatQL: Generates registration analytics

# Cursor can now suggest code based on this database knowledge!

Otros clientes MCP

Este servidor sigue el protocolo MCP estándar y funciona con cualquier cliente compatible con MCP.

🛡️ Seguridad y protección

Protecciones integradas

  • Validación de consultas: Las operaciones peligrosas (DROP, TRUNCATE) están bloqueadas
  • Limitación de resultados: Los límites automáticos previenen el agotamiento de memoria
  • Consultas parametrizadas: Protección contra inyección SQL
  • Agrupación de conexiones: Conexiones seguras y eficientes a la base de datos
  • Modo solo SELECT: Modo de solo lectura conmutable para mayor seguridad

🔒 Modo solo SELECT

Una potente característica de seguridad que te permite restringir las operaciones de la base de datos a consultas de solo lectura:

Cómo funciona

  • Habilitado: Solo se permiten consultas SELECT, todas las operaciones INSERT, UPDATE, DELETE, CREATE, DROP, ALTER están bloqueadas
  • Deshabilitado: Todas las operaciones SQL están permitidas (con validaciones de seguridad estándar)
  • Alternar: Se puede activar o desactivar desde el cliente usando la herramienta toggle_select_only_mode

Casos de uso

  • 🔍 Exploración de datos: Navegación segura del contenido de la base de datos sin riesgo de modificación
  • 📊 Informes y análisis: Genera informes con cero riesgo de corrupción de datos
  • 👥 Colaboración en equipo: Permite que los miembros del equipo exploren datos de forma segura
  • 🧪 Desarrollo: Prueba consultas sin afectar los datos de producción
  • 📚 Aprendizaje: Perfecto para aprender SQL sin riesgos de modificación de la base de datos

Integración con el cliente

En Claude Desktop o Cursor:

# Enable SELECT-only mode
Ask: "Enable SELECT-only mode for safety"

# Check current status
Ask: "What is the current security mode?"

# Disable SELECT-only mode
Ask: "Disable SELECT-only mode to allow full access"

Opciones de configuración:

# Start server in SELECT-only mode
SELECT_ONLY_MODE=true

# Disable mode toggle (force current mode)
ALLOW_MODE_TOGGLE=false

Indicadores de seguridad

  • 🔒 RESTRINGIDO: Modo solo SELECT activo
  • ✅ SIN RESTRICCIONES: Modo de acceso completo activo
  • ❌ BLOQUEADO: Operación bloqueada por el modo de seguridad

Mejores prácticas

  • Comienza con el modo solo SELECT habilitado para entornos nuevos
  • Usa cuentas de base de datos de solo lectura cuando sea posible
  • Nunca expongas el servidor a internet
  • Almacena las credenciales de forma segura usando variables de entorno
  • Rota regularmente las claves API y las contraseñas de la base de datos

🚨 Solución de problemas

Problemas de conexión a la base de datos

Error: "Nombre de origen de datos no encontrado"

# Install ODBC Driver 17 for SQL Server
# Download from Microsoft's official website

Error: "Login fallido"

  • Verifica tus credenciales en .env
  • Para autenticación de Windows, deja usuario/contraseña vacíos
  • Asegúrate de que SQL Server permita tu método de autenticación

Error: "Error del proveedor Named Pipes"

  • Verifica que SQL Server esté en ejecución
  • Comprueba el nombre del servidor (generalmente localhost\SQLEXPRESS)
  • Habilita TCP/IP en el Administrador de configuración de SQL Server

Problemas con la API de OpenAI

Error: "Clave de API de OpenAI no configurada"

Error: Límite de velocidad

  • El servidor maneja los límites de velocidad de manera elegante
  • Considera actualizar tu plan de OpenAI para obtener límites más altos

🧪 Desarrollo

Ejecutar pruebas

# Tests coming soon!
python -m pytest

Estilo de código

# Format code
black .

# Check style
flake8 .

# Type checking
mypy .

🏷️ Gestión de versiones

Este proyecto utiliza un sistema de versionado centralizado con herramientas automatizadas para contribuyentes.

Comandos rápidos de versión

# Check current version
python version_manager.py current

# Bump version for bug fixes (1.0.0 → 1.0.1)
python version_manager.py bump patch

# Bump version for new features (1.0.1 → 1.1.0)
python version_manager.py bump minor

# Bump version for breaking changes (1.1.0 → 2.0.0)
python version_manager.py bump major

Directrices de versionado semántico

  • PATCH (1.0.1) - Correcciones de errores, parches de seguridad
  • MINOR (1.1.0) - Nuevas funciones, adiciones de soporte de bases de datos
  • MAJOR (2.0.0) - Cambios disruptivos, modificaciones de API

Flujo de trabajo completo de lanzamiento

  1. Realiza tus cambios y pruébalos a fondo
  2. Actualiza CHANGELOG.md con tus cambios bajo [Unreleased]
  3. Incrementa la versión usando el tipo apropiado:
    python version_manager.py bump minor -m "Added PostgreSQL support"
    
  4. Envía los cambios incluyendo las etiquetas:
    git push origin master --tags
    

Detalles del sistema de versiones

  • ✅ Fuente única de verdad: __version__.py
  • ✅ Etiquetado automático de git: Crea etiquetas anotadas (v1.0.0, v1.1.0, etc.)
  • ✅ Auto-commit: Confirma los cambios de versión con mensajes apropiados
  • ✅ Sin actualizaciones manuales: Todos los archivos se sincronizan automáticamente con la versión central

Opciones avanzadas

# Set specific version
python version_manager.py set 1.2.3

# Skip git operations (for testing)
python version_manager.py bump patch --no-commit --no-tag

# Create tag with custom message
python version_manager.py tag -m "Hotfix release"

Nota para contribuyentes: Utiliza siempre el script del gestor de versiones en lugar de editar manualmente los números de versión. Esto garantiza la consistencia en todos los archivos del proyecto.

🤝 Contribuciones

¡Damos la bienvenida a las contribuciones! Consulta CONTRIBUTING.md para obtener detalles sobre:

  • Configuración del entorno de desarrollo
  • Estándares de código y mejores prácticas
  • Proceso de solicitudes de extracción

📄 Licencia

Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE para más detalles.

🙏 Agradecimientos

📞 Soporte


Hecho con ❤️ por Raza Hasnain