Servidor MCP para analizar, consultar, comparar y generar queries para SQL Server con controles de seguridad.
- Maximo 2 conexiones activas, configurable con
MCP_SQL_MAX_CONNECTIONS. - Autenticacion SQL Server con usuario y clave.
- Cada conexion se crea de a una y requiere alias.
- Modo por defecto
read_only. - En
read_onlypermite consultas, metadata, comparaciones y creacion de archivos.sql, pero no ejecuta cambios. - En
write_enabledpuede ejecutar cambios solo con confirmacion explicita:realiza los cambios,hazlooejecuta. - Bloquea comandos destructivos como
DROP,TRUNCATE,ALTER DATABASE,BACKUPyRESTORE. - Bloquea
UPDATEoDELETEsinWHERE. - Ejecuta mutaciones dentro de transaccion con
COMMIToROLLBACK. - Genera archivos
.sqlengenerated-queries/.
npm install
npm run buildEjemplo de configuracion para un cliente MCP que ejecute el servidor compilado:
{
"mcpServers": {
"sql-server": {
"command": "node",
"args": ["D:/MCP/mcp_sql_server/dist/index.js"],
"env": {
"MCP_SQL_MAX_CONNECTIONS": "2",
"MCP_SQL_MAX_ROWS": "1000",
"MCP_SQL_QUERY_TIMEOUT_SECONDS": "30",
"MCP_SQL_GENERATED_QUERIES_DIR": "generated-queries"
}
}
}
}sql_connect: crea una conexion SQL Server.sql_disconnect: cierra una conexion por alias.sql_list_connections: lista conexiones activas sin secretos.sql_list_tables: lista tablas y vistas.sql_describe_database: describe tablas, vistas y columnas.sql_describe_table: describe una tabla.sql_query: ejecuta soloSELECToWITH ... SELECT.sql_compare_schema: compara esquemas entre dos conexiones.sql_compare_query_results: compara resultados de una query de lectura en dos conexiones.sql_suggest_query: genera una plantilla sugerida, no ejecuta.sql_create_query_file: crea un archivo.sql.sql_prepare_mutation: analiza una query de cambio, no ejecuta.sql_execute_mutation: ejecuta cambios solo con modowrite_enabledy confirmacion.
Conexion de solo lectura:
{
"alias": "dev",
"server": "localhost",
"user": "sa",
"password": "clave",
"database": "MiBase",
"mode": "read_only",
"environment": "dev",
"trustServerCertificate": true
}Consulta segura:
SELECT name, create_date
FROM sys.tables
ORDER BY name;Si la query empieza con SELECT y no tiene TOP, el servidor aplica TOP (1000) por defecto.
Generacion de archivo .sql:
{
"fileName": "actualizar_estado_clientes.sql",
"description": "Query propuesta para revisar antes de ejecutar",
"query": "UPDATE dbo.Clientes SET Estado = 'Activo' WHERE Estado IS NULL;"
}Ejecucion de cambios:
{
"alias": "dev-write",
"query": "UPDATE dbo.Clientes SET Estado = 'Activo' WHERE Estado IS NULL;",
"confirmation": "ejecuta"
}- Una conexion
read_onlynunca ejecuta cambios. sql_create_query_filepuede crear archivos.sqlaunque la conexion sea de solo lectura.EXECyEXECUTEestan bloqueados para lectura porque un procedimiento puede modificar datos.- Cambios en
environment: "prod"requieren que la confirmacion incluya tambienprod. - Las claves no se guardan en disco; viven solo en memoria mientras el proceso esta activo.
npm run dev
npm run build