🚀 MCP SQL Server
](https://www.docker.com/) ](https://nodejs.org/) 
Servidor MCP (Model Context Protocol) para conectividad con Microsoft SQL Server, optimizado para Claude Desktop y despliegue en Portainer.
🚀 Características
- Conexión segura a Microsoft SQL Server externo
- Tres herramientas MCP disponibles:
- execute_query: Ejecuta consultas SELECT con validación de seguridad - get_tables: Lista todas las tablas de la base de datos - describe_table: Describe la estructura de una tabla específica
- Contenedor Docker optimizado con Node.js 18 Alpine
- Health checks integrados para monitoreo
- Configuración flexible mediante variables de entorno
📋 Requisitos previos
- Docker y Docker Compose instalados
- Portainer configurado y funcionando
- Acceso a un Microsoft SQL Server externo
- Credenciales válidas para el SQL Server
- Puerto 1433 accesible desde el host Docker
🔧 Instalación y configuración
1. Clonar o descargar el proyecto
git clone
cd mcp-server2. Configurar variables de entorno
Copia el archivo de ejemplo y configura tus variables:
cp env.example .envEdita el archivo .env con tus credenciales:
# Microsoft SQL Server Configuration
DB_HOST=192.168.1.100
DB_PORT=1433
DB_NAME=mi_base_datos
DB_USER=mi_usuario
DB_PASSWORD=mi_password_segura
# MCP Server Configuration
MCP_PORT=3000
MCP_HOST=0.0.0.0
# Logging
LOG_LEVEL=info
# SQL Server Options
DB_ENCRYPT=true
DB_TRUST_SERVER_CERTIFICATE=true🐳 Despliegue en Portainer
Paso 1: Preparación
- Verificar conectividad: Asegúrate de que tu servidor Docker puede alcanzar el SQL Server:
telnet 1433- Obtener credenciales: Confirma que tienes las credenciales correctas del SQL Server
- Verificar firewall: Asegúrate de que el puerto 1433 esté abierto
Paso 2: Crear Stack en Portainer
- Accede a Portainer → Stacks → Add Stack
- Nombre del stack:
mcp-sql-server - Método de build: Repository o Upload
- Copia y pega el contenido del archivo
docker-compose.yml
Paso 3: Configurar variables de entorno
En la sección "Environment variables" de Portainer, agrega:
| Variable | Valor | Descripción |
|---|---|---|
DB_HOST | 192.168.1.100 | IP o hostname de tu SQL Server |
DB_PORT | 1433 | Puerto del SQL Server |
DB_NAME | mi_base_datos | Nombre de la base de datos |
DB_USER | mi_usuario | Usuario de SQL Server |
DB_PASSWORD | mi_password_segura | Contraseña |
DB_ENCRYPT | true | Encriptar conexión |
DB_TRUST_SERVER_CERTIFICATE | true | Confiar en certificado |
Paso 4: Desplegar
- Haz clic en "Deploy the stack"
- Espera a que se construya la imagen
- Verifica los logs del contenedor
Paso 5: Verificación
- Revisar logs: Debe mostrar "Conectado a Microsoft SQL Server"
- Verificar health status: En Portainer debe aparecer como "Healthy"
- Probar conectividad: Verifica que el contenedor puede resolver el hostname del SQL Server
🧪 Pruebas de conectividad
Desde el host Docker:
# Verificar conectividad de red
docker exec mcp-sql-server ping
# Verificar logs del contenedor
docker logs mcp-sql-server
# Verificar health check
docker inspect mcp-sql-server | grep Health -A 10Desde Portainer:
- Ve a Containers →
mcp-sql-server - Revisa la pestaña Logs
- Verifica el estado en Inspect → Health
🔧 Variables de entorno completas
| Variable | Descripción | Default | Requerido |
|---|---|---|---|
DB_HOST | IP/hostname del SQL Server | - | ✅ |
DB_PORT | Puerto de SQL Server | 1433 | ❌ |
DB_NAME | Nombre de la base de datos | - | ✅ |
DB_USER | Usuario de SQL Server | - | ✅ |
DB_PASSWORD | Contraseña | - | ✅ |
DB_ENCRYPT | Encriptar conexión | true | ❌ |
DB_TRUST_SERVER_CERTIFICATE | Confiar en certificado | true | ❌ |
LOG_LEVEL | Nivel de logging | info | ❌ |
🛠️ Desarrollo local
Instalar dependencias:
npm installEjecutar en modo desarrollo:
npm run devEjecutar en producción:
npm start🔍 Troubleshooting
Problema: "Error conectando a la base de datos"
Soluciones:
- Verificar que
DB_HOSTsea accesible desde el contenedor - Confirmar que el puerto 1433 esté abierto
- Validar credenciales de SQL Server
- Verificar configuración de firewall
Problema: "Health check failed"
Soluciones:
- Revisar logs del contenedor
- Verificar que el proceso Node.js esté ejecutándose
- Comprobar recursos disponibles (memoria/CPU)
Problema: "Solo se permiten consultas SELECT"
Explicación: Por seguridad, el servidor solo permite consultas SELECT. Esto es intencional.
Problema: "Certificado SSL no confiable"
Soluciones:
- Configurar
DB_TRUST_SERVER_CERTIFICATE=true - O configurar
DB_ENCRYPT=falsesi no necesitas encriptación
📊 Monitoreo
Health Checks
El contenedor incluye health checks automáticos cada 30 segundos:
healthcheck:
test: ["CMD", "node", "-e", "console.log('Health check passed')"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40sLogs importantes
"Conectado a Microsoft SQL Server"- Conexión exitosa"Servidor MCP SQL iniciado correctamente"- Servidor listo- Errores de conexión o consultas SQL
🔐 Consideraciones de seguridad
- Solo consultas SELECT: El servidor valida que solo se ejecuten consultas SELECT
- Conexión encriptada: Por defecto usa SSL/TLS
- Usuario no-root: El contenedor ejecuta con usuario
mcp:1001 - Variables de entorno: Las credenciales nunca están hardcodeadas
- Límites de recursos: Configurados para prevenir abuso
📝 Ejemplos de uso
Una vez desplegado, el servidor MCP expone estas herramientas:
1. Listar tablas
{
"name": "get_tables",
"arguments": {}
}2. Describir tabla
{
"name": "describe_table",
"arguments": {
"table_name": "usuarios"
}
}3. Ejecutar consulta
{
"name": "execute_query",
"arguments": {
"query": "SELECT TOP 10 * FROM usuarios WHERE activo = 1",
"params": {}
}
}🤝 Contribuciones
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
📄 Licencia
Este proyecto está bajo la Licencia MIT. Ver el archivo LICENSE para más detalles.
🆘 Soporte
Si tienes problemas o preguntas:
- Revisa la sección de Troubleshooting
- Verifica los logs del contenedor
- Asegúrate de que tu SQL Server sea accesible
- Abre un issue en el repositorio
🐳 Despliegue en Portainer
Configuración desde GitHub
- Acceder a Portainer → Stacks → Add Stack
- Build method: Repository
- Repository URL:
https://github.com/peuscategui/mcpefc - Repository reference:
refs/heads/main - Compose path:
docker-compose-swarm.yml
Variables de entorno requeridas
| Variable | Valor | Descripción |
|---|---|---|
DB_HOST | SURDBP04 | Servidor SQL Server |
DB_PORT | 1433 | Puerto SQL Server |
DB_NAME | PRUEBA_MCP | Base de datos |
DB_USER | MCP | Usuario SQL Server |
DB_PASSWORD | m_25_9e_pe1_ | Contraseña |
DB_ENCRYPT | true | Encriptar conexión |
DB_TRUST_SERVER_CERTIFICATE | true | Confiar en certificado |
LOG_LEVEL | info | Nivel de logging |
Verificación del despliegue
- Containers → Busca
mcp-sql-server - Status: Debe ser "Running"
- Health: Debe ser "Healthy"
- Logs: Debe mostrar conexión exitosa a SQL Server
Troubleshooting Portainer
- Error de red: Verificar que la red
mcp-networksea accesible - Error de build: Confirmar que el repositorio GitHub sea accesible
- Error de conexión DB: Verificar variables de entorno y conectividad
Nota: Este servidor MCP está diseñado específicamente para consultas de solo lectura (SELECT). Para operaciones de escritura, considera implementar una API REST separada con las debidas validaciones y permisos.
