MSSQL
Interactuar con bases de datos de Microsoft SQL Server para ejecutar consultas y analizar datos empresariales.
Documentación
Servidor MCP de MSSQL
Descripción general
El servidor MCP de MSSQL proporciona capacidades de interacción con bases de datos e inteligencia empresarial. Este servidor permite ejecutar consultas SQL, analizar datos empresariales y generar automáticamente memorandos de información empresarial.
Consulte el SQLite del sitio web oficial para realizar modificaciones y adaptarlo a MSSQL.
Construido sobre el SDK oficial de MCP Python (FastMCP), compatible con la especificación MCP 2025-06-18: salida de herramientas estructurada (structuredContent), anotaciones de herramientas, plantillas de recursos y confirmación de escritura basada en elicitación.
Aspectos destacados:
- Multi-base de datos — monta conexiones de desarrollo/ensayo/producción en un solo servidor; cada herramienta acepta un parámetro opcional
database, cada conexión con su propia configuración dereadonly/query_timeout/max_rows/confirm_writes - Procedimientos almacenados — lista firmas y ejecuta procedimientos con recopilación completa de múltiples conjuntos de resultados
- Plantillas de recursos —
schema://{database}/{schema}/{table}sirve estructuras de tablas bajo demanda sin consumir tokens de esquema de herramientas en cada turno - Salvaguardas de seguridad — lista blanca de SQL, modo de solo lectura, límites de filas, tiempos de espera de consultas, confirmación opcional por elicitación antes de escrituras
Componentes
read_query- Ejecuta consultas SELECT / WITH con salida estructurada (columnas / filas / recuento_de_filas / truncado), limitado por
max_rows
- Ejecuta consultas SELECT / WITH con salida estructurada (columnas / filas / recuento_de_filas / truncado), limitado por
write_query- Ejecuta consultas INSERT, UPDATE, DELETE o MERGE, devuelve el recuento de filas afectadas
create_table- Crea nuevas tablas en la base de datos
list_tables- Obtiene una lista de todas las tablas en la base de datos (esquema + nombre de tabla)
list_views- Obtiene una lista de todas las vistas en la base de datos
describe_table- Muestra el esquema completo de una tabla específica (tipo, anulable, valor predeterminado, clave primaria, identidad, claves foráneas, índices)
list_databases- Lista las conexiones de base de datos configuradas (nombre, solo_lectura, es_predeterminada)
list_procedures- Lista procedimientos almacenados con firmas de parámetros
execute_procedure- Ejecuta un procedimiento almacenado (admite múltiples conjuntos de resultados)
append_insight- Agrega nueva información empresarial al recurso de memorando
Recursos
memo://insights— un memorando de información empresarial en vivo, actualizado en tiempo real medianteappend_insightschema://{schema}/{table}— estructura de tablas de la base de datos predeterminada (JSON: columnas / clave primaria / identidad / claves foráneas / índices)schema://{database}/{schema}/{table}— estructura de tablas de una conexión de base de datos con nombre
Las plantillas de recursos se obtienen bajo demanda: a diferencia de los esquemas de herramientas, no se reenvían al LLM en cada turno, lo que mantiene las conversaciones largas ágiles.
Seguridad
Todo el SQL pasa por validación estática antes de la ejecución:
-
read_querysolo acepta una única declaración SELECT / WITH y rechaza cualquier escritura o palabra clave EXEC (bloquea, por ejemplo,WITH c AS (...) DELETE FROM t) -
write_queryutiliza una lista blanca (solo INSERT / UPDATE / DELETE / MERGE);EXEC,DROP,TRUNCATE,ALTERson rechazados -
Los lotes de múltiples declaraciones (separados por
;) son rechazados -
trusted_connection: truecambia a autenticación integrada de Windows (la cadena de conexión usaTrusted_Connection=yes, sin necesidad de nombre de usuario/contraseña);falsemantiene el inicio de sesión de cuenta SQL configurado -
readonly: truedeshabilita todas las operaciones de escritura, incluidos los procedimientos almacenados (son cajas negras que pueden escribir) -
Los nombres de procedimientos almacenados se validan estrictamente como identificadores de 1 a 3 partes con puntos antes de incrustarse en
{CALL ...} -
Los resultados se truncan en
max_rowsfilas; las consultas se abortan después dequery_timeoutsegundos -
Con
confirm_writes: true, todas las operaciones que cambian el estado (escrituras dewrite_query,create_table,execute_procedure) primero solicitan confirmación al usuario mediante elicitación de MCP⚠️ Limitación importante: la confirmación depende de que el cliente implemente el protocolo de Elicitación de MCP. Los clientes sin soporte de elicitación (por ejemplo, TraeWork / Cursor ...) omiten la confirmación y ejecutan escrituras directamente — lo que significa que
confirm_writes: trueno proporciona protección en dichos clientes (se registra una advertencia de omisión en el servidor). Para una protección de escritura confiable en cualquier cliente, usereadonly: trueen su lugar (bloquea todas las escrituras independientemente de las capacidades del cliente) -
Los comentarios y literales de cadena se eliminan antes de la validación, por lo que no pueden usarse para evadir las comprobaciones
Demostración
La tabla de la base de datos es la siguiente. Los nombres de las columnas no están estandarizados, y la IA los relacionará por sí misma. Los errores durante la ejecución de SQL se autocorregirán.

La siguiente es la demostración.

Entorno operativo
Python 3.10+Packages- pyodbc>=4.0.39
- pydantic>=2.0.0
- mcp>=1.9.0,<2.0.0
ODBC Driver 17 / 18 for SQL Server
Uso
Instalar paquetes
Desde el código fuente:
git clone <this repo>
CD /d ~/mssql-mcp
pip install -r requirements.txt
O como paquete (pip >= 21.3):
pip install .
Configuración
Cree config.json. Formato de base de datos única:
{
"database": {
"driver": "ODBC Driver 17 for SQL Server",
"server": "server ip",
"database": "db name",
"username": "username",
"password": "password",
"trusted_connection": false,
"readonly": false,
"query_timeout": 30,
"max_rows": 200,
"confirm_writes": false
},
"server": {
"name": "mssql-manager",
"version": "0.2.0"
}
}
Formato de múltiples bases de datos (recomendado — cada conexión tiene configuración independiente, por ejemplo, producción permanece en solo lectura):
{
"databases": {
"default": { "server": "localhost", "database": "dev_db", "...": "..." },
"prod": { "server": "10.0.0.5", "database": "prod_db", "readonly": true, "...": "..." }
},
"default_database": "default",
"server": { "name": "mssql-manager", "version": "0.2.0" }
}
Nombres de conexión y conexión predeterminada: las claves en databases son los nombres de conexión — el LLM pasa una de ellas como el parámetro database para cambiar de conexión. Las claves son arbitrarias (no tiene que llamar a una de ellas default). default_database decide qué conexión se usa cuando database no se pasa, resuelto en este orden:
- Si
default_database: "xxx"está configurado explícitamente, use la conexión llamadaxxx - De lo contrario, si existe una conexión llamada
default, úsela - De lo contrario, use la primera conexión en el diccionario
Recomendado: configure explícitamente default_database y también mantenga una conexión literalmente llamada default como red de seguridad — de esta manera, agregar nuevas conexiones (que pueden terminar primero en el orden de iteración) no cambiará silenciosamente la predeterminada.
Orden de búsqueda del archivo de configuración: variable de entorno MSSQL_MCP_CONFIG → config.json junto a server.py → config.json en el directorio de trabajo.
Campos opcionales (por conexión):
| Campo | Predeterminado | Descripción |
|---|---|---|
readonly | false | Modo de solo lectura: bloquea todas las operaciones de escritura (incluidos los procedimientos) |
query_timeout | 30 | Tiempo de espera de consulta en segundos |
max_rows | 200 | Máximo de filas por conjunto de resultados; las filas adicionales se truncan |
confirm_writes | false | Solicitar confirmación al usuario (elicitación) antes de todas las operaciones que cambian el estado (escrituras / CREATE TABLE / procedimientos); requiere soporte de Elicitación del cliente — los clientes no compatibles (por ejemplo, TraeWork / Cursor) ejecutan directamente; para protección estricta use readonly |
encrypt | (ninguno) | Cifrado ODBC, para Driver 18 (true / false) |
trust_server_certificate | false | Confiar en certificados autofirmados, útil con Driver 18 |
Variables de entorno:
| Variable | Predeterminado | Descripción |
|---|---|---|
MSSQL_MCP_CONFIG | (ninguno) | Ruta a un archivo de configuración alternativo |
MSSQL_MCP_LOG_LEVEL | INFO | Nivel de registro (DEBUG / INFO / WARNING / ERROR) |
Configuración del cliente (Claude Desktop / Cursor / Windsurf, etc.)
Los clientes stdio principales (Claude Desktop, Cursor, Windsurf, Cline, etc.) comparten el mismo formato JSON de mcpServers. Tome Claude Desktop como ejemplo — para otros clientes, agregue la misma entrada a su archivo de configuración MCP:
# add to claude_desktop_config.json. Note:use your path
{
"mcpServers": {
"mssql": {
"command": "python",
"args": [
# your path,e.g.:"C:\\mssql-mcp\\src\\server.py"
"~/server.py"
]
}
}
}
Si se instala como paquete, el comando puede ser simplemente mssql-mcp (sin argumentos necesarios).
Inspector de MCP
# Note:use your path
npx -y @modelcontextprotocol/inspector python C:\\mssql-mcp\\src\\server.py
Ejecutar pruebas
pip install pytest
python -m pytest tests -q
tests/test_validation.py— validación de SQL / nombres de procedimientos (no requiere base de datos)tests/test_config.py— análisis de configuración: compatibilidad con base de datos única heredada, múltiples bases de datos, casos de error (no requiere base de datos)tests/test_integration.py— de extremo a extremo contra la base de datos ensrc/config.json(las escrituras solo tocan objetos de prueba dedicados demcp_upgrade_*, limpiados automáticamente)
Estructura del proyecto
mssql-mcp
├── .git
├── .gitignore
├── LICENSE
├── README.md
├── README_en.md
├── README_zh.md
├── imgs
│ ├── table.png
│ └── demo.gif
├── pyproject.toml (packaging: src/ is installed as the mssql_mcp package)
├── requirements.txt
├── src
│ ├── __init__.py
│ ├── config.json (gitignored, local database config)
│ └── server.py
└── tests
├── test_validation.py
├── test_config.py
└── test_integration.py
Licencia
Licencia MIT