SqlAugur
Servidor MCP que proporciona a los asistentes de IA acceso seguro y de solo lectura a bases de datos SQL Server. Construido con C#/.NET 10, utiliza validación de consultas basada en AST (analizador T-SQL de Microsoft) para garantizar que solo se ejecuten sentencias SELECT, bloqueando INSERT/UPDATE/DELETE/DROP/EXEC a nivel de árbol de sintaxis. Incluye exploración de esquemas, generación de diagramas ER en PlantUML/Mermaid, limitación de velocidad y conjuntos de herramientas de diagnóstico DBA integrados (First Responder Kit, DarlingData, sp_WhoIsActive).
Documentación
SqlAugur
Un servidor MCP que brinda a los asistentes de IA acceso seguro y de solo lectura a bases de datos SQL Server. Cada consulta se analiza en un AST completo utilizando el analizador T-SQL oficial de Microsoft, no expresiones regulares, por lo que la inyección de comentarios, los trucos con cadenas literales y los bypass de codificación se bloquean a nivel de sintaxis.
┌──────────────┐ ┌───────────────────────────────────────────┐ ┌──────────────┐
│ │ stdio │ SqlAugur │ │ │
│ AI Client │◄────────►│ │───────►│ SQL Server │
│ │ │ ┌────────────┐ ┌──────────────────────┐ │ │ │
└──────────────┘ │ │ Query │ │ Schema / Diagram / │ │ └──────────────┘
│ │ Validator │ │ DBA Services │ │
│ └────────────┘ └──────────────────────┘ │
│ ┌────────────────────────────────────┐ │
│ │ Rate Limiter │ │
│ └────────────────────────────────────┘ │
└───────────────────────────────────────────┘
Inicio rápido
Use este orden para todos los métodos de instalación:
- Instale SqlAugur
- Guarde
appsettings.jsonen la ubicación correcta - Agregue SqlAugur a la configuración de su cliente MCP
- Verifique pidiendo a su asistente que llame a
list_servers
Comience con Instalación para comandos y rutas de archivo exactos.
Por qué este enfoque
-
Validación de consultas a nivel de AST — La mayoría de los servidores de bases de datos MCP usan bloqueo de palabras clave o ninguna validación. Este proyecto analiza cada consulta en un árbol de sintaxis completo usando el
TSql180Parseroficial de Microsoft. La inyección de comentarios, los trucos con cadenas literales y los bypass de codificación se bloquean a nivel de sintaxis, no con patrones de expresiones regulares frágiles. -
Limitación de velocidad — La limitación de rendimiento con token bucket y el control de concurrencia evitan que los bucles de consultas descontrolados de la IA abrumen los SQL Server de producción. Ningún otro servidor de bases de datos MCP ofrece esto.
-
Herramientas de diagnóstico para DBA — Soporte integrado para First Responder Kit, DarlingData y sp_WhoIsActive con bloqueo de parámetros que previene operaciones de escritura. Esta es una categoría de capacidad MCP completamente nueva.
-
Optimización del tamaño de respuesta — Las herramientas de DBA excluyen columnas verbosas (planes de consulta XML, gráficos de interbloqueo, desgloses de métricas) y truncan cadenas largas por defecto, reduciendo los tamaños de respuesta en un 90–99%. Use los parámetros
verboseyincludeQueryPlanspara obtener salida completa sin truncar cuando sea necesario. -
Descubrimiento progresivo — Hasta 31 herramientas organizadas en conjuntos de herramientas que se cargan bajo demanda. Solo se exponen inicialmente 6 herramientas principales, manteniendo la ventana de contexto de la IA pequeña y reduciendo el uso de tokens. Los conjuntos de herramientas adicionales se descubren y habilitan según sea necesario.
Características
Seguridad
- Solo lectura por diseño — solo se permiten consultas SELECT y CTE
- Validación de consultas basada en AST usando ScriptDom (no expresiones regulares)
- Bloqueo de parámetros en todos los procedimientos almacenados de diagnóstico para prevenir escrituras
- Limitación de concurrencia y rendimiento
Herramientas de base de datos
- Soporte multi-servidor — conexiones nombradas a múltiples instancias de SQL Server
- Resumen de esquema — mapas de esquema Markdown concisos con PKs, FKs, restricciones y valores predeterminados
- Documentación de tablas — descripciones Markdown de columnas, índices, claves foráneas y restricciones
- Generación de diagramas ER — diagramas PlantUML y Mermaid con detección inteligente de cardinalidad
- Exploración de esquema — listar objetos programables, definiciones de vistas, propiedades extendidas, gráficos de dependencias
- Análisis de planes de consulta — planes de ejecución XML estimados o reales
- Diagnósticos de DBA — integración opcional con First Responder Kit, DarlingData y sp_WhoIsActive con optimización automática del tamaño de respuesta
- Descubrimiento progresivo — modo de conjunto de herramientas dinámico reduce el uso inicial de la ventana de contexto al exponer herramientas bajo demanda
Instalación
Todos los métodos producen el mismo servidor MCP. Siga este orden: instalar, guardar configuración, conectar cliente, verificar.
Herramienta global NuGet (recomendada)
1. Instalar (requisito previo: runtime .NET 10.0)
dotnet tool install -g SqlAugur
2. Guardar archivo de configuración
# Linux/macOS
mkdir -p ~/.config/sqlaugur
# Edit ~/.config/sqlaugur/appsettings.json with your server connections
# Windows (PowerShell)
mkdir "$env:APPDATA\sqlaugur" -Force
# Edit %APPDATA%\sqlaugur\appsettings.json with your server connections
Ejemplo de appsettings.json para guardar en esa ubicación:
{
"SqlAugur": {
"Servers": {
"production": {
"ConnectionString": "Server=myserver;Database=master;Integrated Security=True;TrustServerCertificate=False;Encrypt=True;"
}
}
}
}
3. Agregar al cliente MCP
{
"mcpServers": {
"sqlaugur": {
"command": "sqlaugur"
}
}
}
Para actualizar: dotnet tool update -g SqlAugur
Docker / Podman
1. Ejecutar el contenedor SqlAugur
# Volume-mount a config file
docker run -i --rm \
-v /path/to/appsettings.json:/app/appsettings.json:ro,Z \
ghcr.io/mbentham/sqlaugur:latest
# Or use environment variables (no config file needed)
docker run -i --rm \
-e SqlAugur__Servers__production__ConnectionString="Server=host.docker.internal;Database=master;..." \
ghcr.io/mbentham/sqlaugur:latest
Nota: Para alcanzar un SQL Server en la máquina host, use
host.docker.internal(Docker Desktop) o--network=host(Linux). Reemplacedockerconpodman— todos los comandos son idénticos. El indicador:Zen los montajes de volumen es necesario para sistemas con SELinux habilitado (Fedora, RHEL); los usuarios de Docker Desktop en macOS/Windows pueden omitirlo.
Si monta un archivo de configuración, guárdelo como /path/to/appsettings.json y móntelo en /app/appsettings.json.
2. Agregar al cliente MCP
{
"mcpServers": {
"sqlaugur": {
"command": "docker",
"args": ["run", "-i", "--rm",
"-v", "/path/to/appsettings.json:/app/appsettings.json:ro,Z",
"ghcr.io/mbentham/sqlaugur:latest"]
}
}
}
Docker Compose
services:
sqlaugur:
image: ghcr.io/mbentham/sqlaugur:latest
stdin_open: true
volumes:
- ./appsettings.json:/app/appsettings.json:ro,Z
Configuración del cliente MCP:
{
"mcpServers": {
"sqlaugur": {
"command": "docker",
"args": ["compose", "run", "-i", "--rm", "sqlaugur"]
}
}
}
Compilar desde el código fuente
1. Compilar (requisito previo: SDK .NET 10.0)
git clone git@github.com:mbentham/SqlAugur.git
cd SqlAugur
dotnet publish SqlAugur -c Release -o SqlAugur/publish
2. Guardar archivo de configuración
# Linux/macOS
cp SqlAugur/appsettings.example.json SqlAugur/publish/appsettings.json
# Edit SqlAugur/publish/appsettings.json with your server connections
# Windows (PowerShell)
Copy-Item SqlAugur\appsettings.example.json SqlAugur\publish\appsettings.json
# Edit SqlAugur\publish\appsettings.json with your server connections
3. Agregar al cliente MCP
{
"mcpServers": {
"sqlaugur": {
"command": "dotnet",
"args": ["/absolute/path/to/SqlAugur/publish/SqlAugur.dll"]
}
}
}
Verificar la conexión MCP (priorizando LLM)
Después de reiniciar su cliente MCP, pregunte al asistente:
Call list_serversCall list_databases for server "production"
Resultado esperado:
list_serversdevuelve el nombre de su servidor configurado (por ejemploproduction)list_databasesdevuelve una matriz JSON de bases de datos, no un error de conexión o autenticación
Si la verificación falla:
- Confirme que la configuración MCP ejecuta el comando esperado (
sqlaugur,docker run ...odotnet /path/to/SqlAugur.dll) - Confirme que
appsettings.jsonestá guardado donde su método de instalación lo espera:- Herramienta local:
~/.config/sqlaugur/appsettings.json(Linux/macOS) o%APPDATA%\sqlaugur\appsettings.json(Windows) - Contenedor: montado en
/app/appsettings.json - Compilación desde fuente: junto al DLL publicado (
SqlAugur/publish/appsettings.json)
- Herramienta local:
- Confirme que la llamada a la herramienta usa una clave de servidor configurada (por ejemplo
production) - Confirme la conectividad SQL y la autenticación en la cadena de conexión
Configuración
El servidor carga la configuración de múltiples fuentes. Las fuentes de mayor prioridad anulan a las de menor:
- Argumentos de línea de comandos
- Variables de entorno — usando
__como delimitador de sección (p. ej.,SqlAugur__Servers__production__ConnectionString=...) - Directorio de trabajo actual —
appsettings.jsonen el directorio desde el que ejecuta el comando - Directorio de configuración del usuario —
~/.config/sqlaugur/appsettings.jsonen Linux,%APPDATA%\sqlaugur\appsettings.jsonen Windows - Azure Key Vault — cuando
AzureKeyVaultUriestá configurado (ver más abajo) - Directorio de la aplicación —
appsettings.jsonjunto al DLL
Ejemplo de configuración (Autenticación de Windows — recomendada):
{
"SqlAugur": {
"Servers": {
"production": {
"ConnectionString": "Server=myserver;Database=master;Integrated Security=True;TrustServerCertificate=False;Encrypt=True;"
}
},
"MaxRows": 1000,
"CommandTimeoutSeconds": 30,
"MaxConcurrentQueries": 5,
"MaxQueriesPerMinute": 60,
"EnableFirstResponderKit": false,
"EnableDarlingData": false,
"EnableWhoIsActive": false,
"EnableDynamicToolsets": false
}
}
| Opción | Predeterminado | Descripción |
|---|---|---|
Servers | — | Conexiones SQL Server nombradas (nombre → cadena de conexión) |
MaxRows | 1000 | Máximo de filas devueltas por consulta |
CommandTimeoutSeconds | 30 | Tiempo de espera del comando SQL para todas las consultas y procedimientos |
MaxConcurrentQueries | 5 | Número máximo de consultas SQL que pueden ejecutarse concurrentemente |
MaxQueriesPerMinute | 60 | Máximo de consultas permitidas por minuto (límite de velocidad token bucket) |
EnableFirstResponderKit | false | Habilitar herramientas de diagnóstico First Responder Kit (sp_Blitz, sp_BlitzFirst, sp_BlitzCache, sp_BlitzIndex, sp_BlitzWho, sp_BlitzLock, sp_BlitzPlanCompare) |
EnableDarlingData | false | Habilitar herramientas de diagnóstico DarlingData (sp_PressureDetector, sp_QuickieStore, sp_QuickieCache, sp_HealthParser, sp_LogHunter, sp_HumanEventsBlockViewer, sp_IndexCleanup, sp_QueryReproBuilder) |
EnableWhoIsActive | false | Habilitar monitoreo de sesiones sp_WhoIsActive |
EnableDynamicToolsets | false | Habilitar descubrimiento progresivo de herramientas — las herramientas de DBA se cargan bajo demanda mediante 3 meta-herramientas en lugar de al inicio. Reduce el uso inicial de la ventana de contexto. Los indicadores Enable* aún controlan qué conjuntos de herramientas están permitidos. |
AzureKeyVaultUri | — | URI de Azure Key Vault (p. ej., https://myvault.vault.azure.net/). Cuando se configura, los secretos del almacén se agregan como fuente de configuración usando DefaultAzureCredential. Los nombres de secretos de Key Vault usan -- como separador de sección (p. ej., un secreto llamado SqlAugur--Servers--prod--ConnectionString se asigna a SqlAugur:Servers:prod:ConnectionString). |
Nota de seguridad:
appsettings.jsonestá en gitignore para prevenir confirmaciones accidentales de credenciales. Consulte SECURITY.md para métodos de autenticación recomendados, incluidos Autenticación de Windows, Azure Managed Identity y opciones seguras de almacenamiento de credenciales.
Herramientas
El servidor proporciona 31 herramientas organizadas en conjuntos de herramientas. Seis herramientas principales están siempre disponibles. Los conjuntos de herramientas adicionales se cargan al inicio (modo estático) o bajo demanda (modo dinámico).
Herramientas principales
| Herramienta | Descripción |
|---|---|
list_servers | Lista las instancias de SQL Server configuradas en appsettings.json. |
list_databases | Lista todas las bases de datos en un servidor nombrado con nombres, IDs, estados y fechas de creación. |
read_data | Ejecuta una consulta SQL SELECT de solo lectura. Solo se permiten consultas SELECT y WITH (CTE). Los resultados se devuelven como JSON con un límite de filas configurable. |
get_query_plan | Devuelve el plan de ejecución XML estimado o real para una consulta SELECT. |
get_schema_overview | Resumen de esquema Markdown conciso: tablas, columnas, PKs, FKs, restricciones únicas/de verificación, valores predeterminados. Soporta modo compact, filtrado de esquema y tabla. |
describe_table | Metadatos completos de tabla en Markdown: columnas, tipos de datos, nulabilidad, valores predeterminados, identidad, expresiones calculadas, índices, FKs, restricciones. |
Exploración de esquema (4 herramientas)
| Herramienta | Descripción |
|---|---|
list_programmable_objects | Lista vistas, procedimientos almacenados, funciones y disparadores. Filtrable por tipo y esquema. |
get_object_definition | Devuelve la definición fuente (declaración CREATE) de un objeto programable. |
get_extended_properties | Lee propiedades extendidas (descripciones, metadatos) en tablas, columnas y otros objetos. |
get_object_dependencies | Muestra qué referencia un objeto y qué lo referencia — gráficos de dependencias ascendentes y descendentes. |
Diagramas (2 herramientas)
| Herramienta | Descripción |
|---|---|
get_plantuml_diagram | Genera un diagrama ER PlantUML con tablas, columnas, PKs y relaciones FK. Guarda en un archivo .puml. Soporta modo compact, filtrado de esquema/tabla y un límite de tablas configurable (máx. 200). |
get_mermaid_diagram | Genera un diagrama ER Mermaid con tablas, columnas, PKs y relaciones FK. Guarda en un archivo .mmd. Soporta modo compact, filtrado de esquema/tabla y un límite de tablas configurable (máx. 200). |
Herramientas de diagnóstico para DBA
Cada kit de herramientas se habilita independientemente mediante indicadores de configuración y requiere que los procedimientos almacenados correspondientes estén instalados en el SQL Server de destino.
Todas las herramientas de DBA aplican optimización del tamaño de respuesta por defecto — las columnas de planes de consulta XML se excluyen y los valores de cadenas largas se truncan para mantener las respuestas dentro de los límites de la ventana de contexto de la IA. Cada herramienta soporta estos parámetros opcionales:
| Parámetro | Descripción |
|---|---|
verbose | Devuelve todas las columnas sin truncamiento. |
includeQueryPlans | Incluye columnas de planes de ejecución XML en la salida. |
maxRows | Máximo de filas a devolver por conjunto de resultados. Disponible en herramientas con salida de longitud variable: BlitzIndex, BlitzLock, HealthParser, LogHunter (predeterminado 200), IndexCleanup, QueryReproBuilder. |
Algunas herramientas tienen parámetros adicionales: includeXmlReports (BlitzLock, HealthParser, HumanEventsBlockViewer), compact (sp_WhoIsActive), verboseMetrics (QuickieStore).
First Responder Kit (7 herramientas) — requiere EnableFirstResponderKit: true
Instalar desde: github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit
| Herramienta | Descripción |
|---|---|
sp_blitz | Verificación general de salud de SQL Server: hallazgos priorizados sobre rendimiento, configuración y seguridad. |
sp_blitz_first | Diagnósticos de rendimiento en tiempo real: muestrea DMVs durante un intervalo para esperas, latencia de archivos y contadores de perfmon. |
sp_blitz_cache | Análisis de caché de planes: consultas principales por CPU, lecturas, duración, ejecuciones o concesiones de memoria. |
sp_blitz_index | Análisis de índices: índices faltantes, no utilizados y duplicados con patrones de uso. |
sp_blitz_who | Monitor de consultas activas: qué se está ejecutando, información de bloqueos, uso de tempdb, planes de consulta. |
sp_blitz_lock | Análisis de interbloqueos desde la sesión de eventos extendidos system_health. |
sp_blitz_plan_compare | Comparación de planes de consulta entre servidores: captura una instantánea del plan en un servidor y la compara con el plan en caché en un segundo servidor sin usar servidores vinculados. Requiere la rama demon_hunters hasta que se fusione con main. |
DarlingData (8 herramientas) — requiere EnableDarlingData: true
Instalar desde: github.com/erikdarling/DarlingData
| Herramienta | Descripción |
|---|---|
sp_pressure_detector | Diagnostica presión de CPU y memoria: cuellos de botella de recursos, consultas de alta CPU, concesiones de memoria, latencia de disco. |
sp_quickie_store | Análisis de Query Store: consultas de mayor consumo de recursos, regresiones de planes, estadísticas de espera. |
sp_quickie_cache | Análisis de caché de planes: consultas de alto impacto clasificadas por puntuación de impacto en los DMVs dm_exec_*_stats (el complemento de caché de planes para sp_quickie_store). |
sp_health_parser | Analiza la sesión de eventos extendidos system_health para esperas históricas, latencia de disco, CPU, memoria y bloqueos. |
sp_log_hunter | Busca en los registros de errores de SQL Server errores, advertencias y mensajes personalizados. |
sp_human_events_block_viewer | Analiza eventos de bloqueo de sesiones sp_HumanEvents: cadenas de bloqueo, detalles de bloqueos, esperas. |
sp_index_cleanup | Encuentra índices no utilizados y duplicados que son candidatos para eliminación. |
sp_query_repro_builder | Genera scripts de reproducción para consultas de Query Store con valores de parámetros. |
sp_WhoIsActive (1 herramienta) — requiere EnableWhoIsActive: true
Instalar desde: whoisactive.com
| Herramienta | Descripción |
|---|---|
sp_whoisactive | Monitorea sesiones y consultas activas: información de esperas, detalles de bloqueos, uso de tempdb, consumo de recursos. |
Descubrimiento Progresivo
Cuando EnableDynamicToolsets es verdadero, solo las herramientas principales se cargan al inicio. Tres meta-herramientas permiten que la IA descubra y habilite conjuntos de herramientas adicionales bajo demanda, reduciendo el uso inicial de la ventana de contexto:
| Herramienta | Descripción |
|---|---|
list_toolsets | Lista los conjuntos de herramientas disponibles con estado (disponible, habilitado, no configurado) y recuentos de herramientas. |
get_toolset_tools | Devuelve información detallada de herramientas y parámetros para un conjunto específico antes de habilitarlo. |
enable_toolset | Habilita un conjunto de herramientas, haciendo que sus herramientas estén disponibles. Solo funciona si el administrador ha habilitado el conjunto mediante la bandera de configuración Enable* correspondiente. |
Flujo de ejemplo:
- La IA llama a
list_toolsets— ve quefirst_responder_kitestá "disponible" (configurado pero aún no habilitado) - La IA llama a
get_toolset_tools("first_responder_kit")— revisa las 7 herramientas y sus parámetros - La IA llama a
enable_toolset("first_responder_kit")— las 7 herramientas ahora están registradas y utilizables - La IA llama a
sp_blitz— ejecuta la verificación de salud como de costumbre
En modo estático (EnableDynamicToolsets: false), todos los conjuntos de herramientas habilitados se cargan al inicio y las herramientas de descubrimiento no se registran. Los conjuntos de herramientas de Exploración de Esquemas y Diagramas siempre se cargan independientemente del modo.
Limitación conocida: El descubrimiento progresivo depende de la notificación MCP
notifications/tools/list_changedpara informar a los clientes que se han registrado nuevas herramientas. Claude Code actualmente no maneja esta notificación (anthropics/claude-code#4118), por lo que los conjuntos de herramientas habilitados dinámicamente no aparecerán. Use el modo estático (EnableDynamicToolsets: false) cuando use Claude Code.
Seguridad
Validación de Consultas
Cada consulta se analiza en un Árbol de Sintaxis Abstracta (AST) usando el TSql180Parser oficial de Microsoft y debe pasar estas reglas:
- Solo una declaración — se rechazan múltiples declaraciones
- Solo SELECT — INSERT, UPDATE, DELETE, DROP, EXEC, CREATE, ALTER y todos los demás tipos de declaraciones están bloqueados
- Sin SELECT INTO — evita la creación de tablas mediante SELECT
- Sin acceso a datos externos — OPENROWSET (todas las variantes incluyendo BULK, Cosmos DB e internas), OPENQUERY, OPENDATASOURCE, OPENXML bloqueados
- Sin servidores vinculados — se rechazan referencias de nombres de cuatro partes
- Sin sugerencia MAXRECURSION — evita anular el límite de recursión predeterminado
- Se permiten consultas entre bases de datos — los nombres de tres partes funcionan por diseño; el límite de seguridad es el servidor, no la base de datos. Para restringir a una sola base de datos, limite los permisos del inicio de sesión.
Debido a que la validación opera en el AST analizado, maneja correctamente casos límite que derrotan los enfoques basados en cadenas: palabras clave dentro de comentarios, literales de cadena, comentarios de bloque anidados y trucos de codificación.
Bloqueo de Parámetros
Los procedimientos almacenados de diagnóstico se ejecutan mediante nombres de procedimientos en lista blanca con parámetros bloqueados que evitan escrituras:
- First Responder Kit — todos los parámetros
@Output*bloqueados (evita escribir resultados en tablas del servidor) - DarlingData — parámetros de registro y salida bloqueados (evita la creación de tablas y la retención de datos)
- sp_WhoIsActive —
@destination_table,@return_schema,@schema,@helpbloqueados
Limitación de Velocidad
Todas las ejecuciones de herramientas están sujetas a limitación de concurrencia (MaxConcurrentQueries, predeterminado 5) y limitación de rendimiento (MaxQueriesPerMinute, predeterminado 60). Las solicitudes excesivas se rechazan con un mensaje de reintento.
Seguridad de Conexión
Use Autenticación de Windows o Identidad Administrada de Azure cuando sea posible para evitar almacenar credenciales en archivos de configuración. Cuando se requiera Autenticación SQL, use anulaciones de variables de entorno para inyectar credenciales en tiempo de ejecución. Consulte SECURITY.md para obtener orientación detallada, incluidos almacenes de credenciales y cifrado de cadenas de conexión.
Riesgos Conocidos
- Este proyecto depende del MCP C# SDK oficial de Microsoft (paquete NuGet
ModelContextProtocol, versión 1.3.0). Como el marco MCP maneja toda la E/S del protocolo, cualquier vulnerabilidad en él afecta directamente el límite de seguridad de esta aplicación. Monitoree el paquete para actualizaciones y actualice cuando se publiquen nuevas versiones. - Los datos devueltos de una consulta de SQL Server podrían incluir inyección de indicaciones maliciosa dirigida a IAs. Este es un riesgo de todo uso de IA y no puede mitigarse con este proyecto. Asegúrese de seguir las mejores prácticas de seguridad de IA y conéctese solo a fuentes de datos confiables.
Contribuciones
Las contribuciones son bienvenidas. Consulte CONTRIBUTING.md para detalles de arquitectura, configuración de desarrollo, instrucciones de prueba y pautas para agregar nuevas herramientas.