使用说明
🚀 MCP SQL Server
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 seguridadget_tables: Lista todas las tablas de la base de datosdescribe_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 <tu-repositorio>
cd mcp-server
2. Configurar variables de entorno
Copia el archivo de ejemplo y configura tus variables:
cp env.example .env
Edita 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 <IP_SQL_SERVER> 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 <IP_SQL_SERVER>
# Verificar logs del contenedor
docker logs mcp-sql-server
# Verificar health check
docker inspect mcp-sql-server | grep Health -A 10
Desde 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 install
Ejecutar en modo desarrollo:
npm run dev
Ejecutar 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: 40s
Logs 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.