Skip to main content
Glama
SteveZhuhaobo

SQL Server MCP Server

Servidor MCP de SQL Server

Un servidor de Protocolo de Contexto de Modelo (MCP) en contenedor para operaciones de SQL Server. Este contenedor de Docker proporciona un servidor MCP completo que puede conectarse a SQL Server y ejecutar diversas operaciones de base de datos a través del protocolo MCP.

Características

  • Integración completa con SQL Server: Ejecute consultas, gestione tablas y realice operaciones de base de datos

  • Configuración mediante variables de entorno: Configuración sencilla a través de variables de entorno

  • Soporte de autenticación: Tanto autenticación de SQL Server como de Windows

  • Gestión de conexiones: Lógica integrada de manejo de conexiones y reintentos

  • Comprobaciones de estado: Monitoreo y validación del estado del contenedor

  • Soporte multiplataforma: Compatible con arquitecturas AMD64 y ARM64

  • Soporte de controlador ODBC: Incluye Microsoft ODBC Driver 17 para SQL Server

Related MCP server: mcp-sqlserver

Inicio rápido

Usando Docker Run

# Basic usage with SQL Server authentication
docker run -e SQLSERVER_SERVER=myserver.database.windows.net \
           -e SQLSERVER_DATABASE=mydatabase \
           -e SQLSERVER_USERNAME=myuser \
           -e SQLSERVER_PASSWORD=mypassword \
           sqlserver-mcp:latest

Usando Docker Compose

  1. Copie el archivo .env.example a .env:

    cp .env.example .env
  2. Edite el archivo .env con sus credenciales de SQL Server:

    # Edit .env with your settings
    nano .env
  3. Inicie el contenedor:

    docker-compose up -d

Configuración

Variables de entorno

Variables requeridas

Variable

Descripción

Ejemplo

SQLSERVER_SERVER

Nombre de host o IP de SQL Server

myserver.database.windows.net

Variables de autenticación (elija un método)

Método 1: Autenticación de SQL Server

Variable

Descripción

Ejemplo

SQLSERVER_USERNAME

Nombre de usuario de SQL Server

sa

SQLSERVER_PASSWORD

Contraseña de SQL Server

MyPassword123!

Método 2: Autenticación de Windows

Variable

Descripción

Ejemplo

SQLSERVER_USE_WINDOWS_AUTH

Usar autenticación de Windows

true

Variables de conexión opcionales

Variable

Descripción

Predeterminado

Ejemplo

SQLSERVER_DATABASE

Base de datos predeterminada

master

MyDatabase

SQLSERVER_DRIVER

Nombre del controlador ODBC

ODBC Driver 17 for SQL Server

ODBC Driver 18 for SQL Server

SQLSERVER_ENCRYPT

Cifrar conexión

yes

no

SQLSERVER_TRUST_CERTIFICATE

Confiar en el certificado del servidor

yes

no

Métodos de autenticación

Autenticación de SQL Server

El método de autenticación más común utilizando nombre de usuario y contraseña:

docker run -e SQLSERVER_SERVER=myserver \
           -e SQLSERVER_DATABASE=mydatabase \
           -e SQLSERVER_USERNAME=myuser \
           -e SQLSERVER_PASSWORD=mypassword \
           sqlserver-mcp:latest

Autenticación de Windows

Para entornos unidos a un dominio (requiere configuración adicional del contenedor):

docker run -e SQLSERVER_SERVER=myserver \
           -e SQLSERVER_DATABASE=mydatabase \
           -e SQLSERVER_USE_WINDOWS_AUTH=true \
           sqlserver-mcp:latest

Herramientas MCP disponibles

El servidor proporciona las siguientes herramientas MCP:

Gestión de conexiones

  • test_connection - Probar la conexión a SQL Server y devolver información básica de la base de datos

Descubrimiento de bases de datos

  • list_tables - Listar todas las tablas en la base de datos de SQL Server

  • get_table_schema - Obtener información detallada del esquema de la tabla

Operaciones de tabla

  • create_table - Crear una nueva tabla en SQL Server

  • insert_data - Insertar datos en una tabla de SQL Server

Ejecución de consultas

  • execute_query - Ejecutar consultas SQL con conjuntos de resultados completos

Construcción del contenedor

Script de construcción

Utilice el script de construcción proporcionado para una construcción sencilla:

# Build with default settings
./build.sh

# Build with specific tag
./build.sh v1.0.0

# Build with registry prefix
REGISTRY=ghcr.io/myorg ./build.sh v1.0.0

# Build and test
./build.sh --test

# Build without cache
./build.sh --no-cache

Construcción manual

# Build the image
docker build -t sqlserver-mcp:latest .

# Build for multiple platforms
docker buildx build --platform linux/amd64,linux/arm64 -t sqlserver-mcp:latest .

Ejemplos de despliegue

Docker Compose con secretos

version: '3.8'

services:
  sqlserver-mcp:
    image: sqlserver-mcp:latest
    environment:
      - SQLSERVER_SERVER=myserver.database.windows.net
      - SQLSERVER_DATABASE=mydatabase
      - SQLSERVER_USERNAME=myuser
    secrets:
      - sqlserver_password
    environment:
      - SQLSERVER_PASSWORD_FILE=/run/secrets/sqlserver_password

secrets:
  sqlserver_password:
    file: ./secrets/sqlserver_password.txt

Despliegue en Kubernetes

apiVersion: apps/v1
kind: Deployment
metadata:
  name: sqlserver-mcp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: sqlserver-mcp
  template:
    metadata:
      labels:
        app: sqlserver-mcp
    spec:
      containers:
      - name: sqlserver-mcp
        image: sqlserver-mcp:latest
        env:
        - name: SQLSERVER_SERVER
          value: "myserver.database.windows.net"
        - name: SQLSERVER_DATABASE
          value: "mydatabase"
        - name: SQLSERVER_USERNAME
          value: "myuser"
        - name: SQLSERVER_PASSWORD
          valueFrom:
            secretKeyRef:
              name: sqlserver-secret
              key: password
        resources:
          limits:
            memory: "512Mi"
            cpu: "500m"
          requests:
            memory: "256Mi"
            cpu: "250m"
        livenessProbe:
          exec:
            command:
            - python
            - -c
            - "import server; print('OK')"
          initialDelaySeconds: 30
          periodSeconds: 30
        readinessProbe:
          exec:
            command:
            - python
            - -c
            - "import server; print('OK')"
          initialDelaySeconds: 5
          periodSeconds: 10

Servicios de contenedores en la nube

Definición de tarea de AWS ECS

{
  "family": "sqlserver-mcp",
  "networkMode": "awsvpc",
  "requiresCompatibilities": ["FARGATE"],
  "cpu": "256",
  "memory": "512",
  "executionRoleArn": "arn:aws:iam::account:role/ecsTaskExecutionRole",
  "containerDefinitions": [
    {
      "name": "sqlserver-mcp",
      "image": "sqlserver-mcp:latest",
      "environment": [
        {"name": "SQLSERVER_SERVER", "value": "myserver.database.windows.net"},
        {"name": "SQLSERVER_DATABASE", "value": "mydatabase"},
        {"name": "SQLSERVER_USERNAME", "value": "myuser"}
      ],
      "secrets": [
        {
          "name": "SQLSERVER_PASSWORD",
          "valueFrom": "arn:aws:secretsmanager:region:account:secret:sqlserver-password"
        }
      ],
      "logConfiguration": {
        "logDriver": "awslogs",
        "options": {
          "awslogs-group": "/ecs/sqlserver-mcp",
          "awslogs-region": "us-east-1",
          "awslogs-stream-prefix": "ecs"
        }
      }
    }
  ]
}

Google Cloud Run

# Deploy to Cloud Run
gcloud run deploy sqlserver-mcp \
  --image=sqlserver-mcp:latest \
  --set-env-vars="SQLSERVER_SERVER=myserver,SQLSERVER_DATABASE=mydatabase,SQLSERVER_USERNAME=myuser" \
  --set-secrets="SQLSERVER_PASSWORD=sqlserver-password:latest" \
  --platform=managed \
  --region=us-central1 \
  --allow-unauthenticated

Azure Container Instances

# Create container instance
az container create \
  --resource-group myResourceGroup \
  --name sqlserver-mcp \
  --image sqlserver-mcp:latest \
  --environment-variables \
    SQLSERVER_SERVER=myserver.database.windows.net \
    SQLSERVER_DATABASE=mydatabase \
    SQLSERVER_USERNAME=myuser \
  --secure-environment-variables \
    SQLSERVER_PASSWORD=mypassword \
  --cpu 0.5 \
  --memory 1

Solución de problemas

Problemas comunes

Tiempo de espera de conexión agotado

Error: Connection timeout

Solución: Compruebe la conectividad de red y la disponibilidad del servidor:

# Test network connectivity
docker run --rm sqlserver-mcp:latest ping myserver.database.windows.net

Error de autenticación

Error: Login failed for user 'myuser'

Soluciones:

  1. Verifique el nombre de usuario y la contraseña

  2. Compruebe si el usuario existe y tiene los permisos necesarios

  3. Asegúrese de que la autenticación de SQL Server esté habilitada

  4. Para Azure SQL Database, utilice el formato de nombre de usuario completo: user@servername

Controlador no encontrado

Error: Data source name not found and no default driver specified

Soluciones:

  1. Verifique que el controlador ODBC esté instalado (debería estar incluido en el contenedor)

  2. Compruebe el nombre del controlador en la variable de entorno SQLSERVER_DRIVER

  3. Liste los controladores disponibles:

    docker exec -it sqlserver-mcp-server odbcinst -q -d

Problemas de SSL/TLS

Error: SSL Provider: The certificate chain was issued by an authority that is not trusted

Soluciones:

  1. Establezca SQLSERVER_TRUST_CERTIFICATE=yes

  2. O deshabilite el cifrado: SQLSERVER_ENCRYPT=no

  3. Para producción, utilice certificados SSL adecuados

El contenedor no inicia

Error: SQLSERVER_SERVER environment variable is required

Solución: Asegúrese de que todas las variables de entorno requeridas estén configuradas:

docker run -e SQLSERVER_SERVER=myserver \
           -e SQLSERVER_USERNAME=myuser \
           -e SQLSERVER_PASSWORD=mypassword \
           sqlserver-mcp:latest

Fallos en las comprobaciones de estado

Si las comprobaciones de estado fallan:

  1. Compruebe los registros del contenedor:

    docker logs sqlserver-mcp-server
  2. Pruebe la conexión manualmente:

    docker exec -it sqlserver-mcp-server python -c "
    import server
    import asyncio
    result = asyncio.run(server.test_connection())
    print(result)
    "
  3. Verifique las variables de entorno:

    docker exec -it sqlserver-mcp-server env | grep SQLSERVER

Ajuste de rendimiento

Para un mejor rendimiento con grandes conjuntos de datos:

# Increase connection timeout
-e SQLSERVER_CONNECTION_TIMEOUT=60

Registro (Logging)

Habilite el registro detallado:

# Add to docker-compose.yml or docker run
environment:
  - PYTHONUNBUFFERED=1
  - LOG_LEVEL=DEBUG

Ver registros:

# Docker Compose
docker-compose logs -f sqlserver-mcp

# Docker run
docker logs -f sqlserver-mcp-server

Consideraciones de seguridad

Gestión de secretos

  1. Nunca codifique credenciales en Dockerfiles o archivos compose

  2. Utilice secretos de Docker o sistemas externos de gestión de secretos

  3. Utilice variables de entorno para la configuración

  4. Rote las credenciales regularmente

Seguridad de red

  1. Utilice redes privadas para la comunicación entre contenedores

  2. Limite los privilegios del contenedor (ejecutar como usuario no root)

  3. Habilite TLS para conexiones a SQL Server (habilitado por defecto)

  4. Utilice reglas de firewall para restringir el acceso

Seguridad del contenedor

  1. Actualizaciones regulares: Mantenga las imágenes base y las dependencias actualizadas

  2. Escaneo de vulnerabilidades: Escanee las imágenes en busca de vulnerabilidades de seguridad

  3. Límites de recursos: Establezca límites adecuados de CPU y memoria

  4. Sistema de archivos de solo lectura: Monte los directorios de la aplicación como solo lectura cuando sea posible

Desarrollo

Desarrollo local

  1. Clone el repositorio

  2. Construya el contenedor:

    ./build.sh --test
  3. Ejecute con su configuración:

    cp .env.example .env
    # Edit .env with your settings
    docker-compose up

Pruebas

Ejecute el conjunto de pruebas:

# Build and test
./build.sh --test

# Manual testing
docker run --rm -e SQLSERVER_SERVER=test sqlserver-mcp:latest python -c "import server; print('Tests passed')"

Soporte

Para problemas y preguntas:

  1. Consulte la sección de solución de problemas

  2. Revise los registros del contenedor en busca de mensajes de error

  3. Verifique la configuración de su conexión a SQL Server

  4. Asegúrese de que todas las variables de entorno requeridas estén configuradas

Licencia

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

A
license - permissive license
Not graded
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides comprehensive access to Microsoft SQL Server databases, enabling Language Models to inspect schemas, execute queries, manage database objects, and perform advanced database operations.
    8
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol (MCP) server that enables AI agents to interact with Microsoft SQL Server databases through secure, intelligent database operations. This server provides comprehensive CRUD capabilities, schema introspection, stored procedure execution, transaction management, and bulk opera
    830
    37
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    A Model Context Protocol (MCP) server for Microsoft SQL Server databases, providing secure database operations through a standardized interface.
    3,043
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A comprehensive MCP server for SQL Server database operations, enabling CRUD operations, schema exploration, and stored procedure execution through natural language.
    8
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for managing Prisma Postgres.

  • The MCP server for Azure DevOps, bringing the power of Azure DevOps directly to your agents.

  • MCP server for interacting with the Supabase platform

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SteveZhuhaobo/sql-server-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server