关于 SqlAugur
SqlAugur 是供 AI 助手在只读约束下查询 SQL Server 数据库的 MCP 服务。它使用 Microsoft 的 T-SQL 解析器验证查询,并结合数据库探索、速率限制和可选 DBA 诊断工具。
主要功能
- 01仅允许只读 SELECT 和 CTE 查询
- 02使用 Microsoft T-SQL 解析器进行 AST 验证
- 03支持多个服务器的命名连接
- 04架构探索与 ER 图生成
- 05查询计划和可选 DBA 诊断
- 06速率与并发限制
适用场景
- 01回答数据库内容相关问题
- 02查看表关系和数据库架构
- 03检查查询执行计划
- 04使用 DBA 工具检查 SQL Server 状况
MCP 相关
SqlAugur 向 MCP 客户端提供 SQL Server 查询、架构和诊断工具,通过 stdio 通信,并支持静态或按需发现工具集。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SqlAugur
一个 MCP 服务,为 AI 助手提供安全、只读的 SQL Server 数据库访问能力。每条查询都会使用 Microsoft 官方的 T-SQL 解析器解析为完整的 AST,而不是使用正则表达式,因此可在语法层面拦截注释注入、字符串字面量技巧和编码绕过。
┌──────────────┐ ┌───────────────────────────────────────────┐ ┌──────────────┐
│ │ stdio │ SqlAugur │ │ │
│ AI Client │◄────────►│ │───────►│ SQL Server │
│ │ │ ┌────────────┐ ┌──────────────────────┐ │ │ │
└──────────────┘ │ │ Query │ │ Schema / Diagram / │ │ └──────────────┘
│ │ Validator │ │ DBA Services │ │
│ └────────────┘ └──────────────────────┘ │
│ ┌────────────────────────────────────┐ │
│ │ Rate Limiter │ │
│ └────────────────────────────────────┘ │
└───────────────────────────────────────────┘
快速开始
所有安装方式均按以下顺序操作:
- 安装 SqlAugur
- 将
appsettings.json保存到正确位置 - 将 SqlAugur 添加到 MCP 客户端配置中
- 让助手调用
list_servers进行验证
请从安装开始,查看具体命令和文件路径。
为什么采用这种方式
-
AST 级查询验证 — 大多数 MCP 数据库服务会屏蔽关键词,或完全不进行验证。本项目使用 Microsoft 官方的
TSql180Parser将每条查询解析为完整的语法树。注释注入、字符串字面量技巧和编码绕过会在语法层面被拦截,而不是依赖脆弱的正则表达式模式。 -
速率限制 — 令牌桶吞吐量限制和并发控制可防止失控的 AI 查询循环压垮生产环境中的 SQL Server。其他 MCP 数据库服务均不具备此功能。
-
DBA 诊断工具 — 集成支持 First Responder Kit、DarlingData 和 sp_WhoIsActive,并通过参数屏蔽防止写入操作。这是一个全新的 MCP 能力类别。
-
响应大小优化 — DBA 工具默认排除冗长的列(XML 查询计划、死锁图、指标细分),并截断长字符串,可将响应大小缩减 90–99%。需要完整、未截断的输出时,可使用
verbose和includeQueryPlans参数。 -
渐进式发现 — 最多提供 31 个工具,按工具集组织并按需加载。初始仅公开 6 个核心工具,从而缩小 AI 的上下文窗口并减少令牌用量。可根据需要发现并启用其他工具集。
功能
安全性
- 默认只读 — 仅允许 SELECT 和 CTE 查询
- 使用 ScriptDom 进行基于 AST 的查询验证(而非正则表达式)
- 屏蔽所有诊断存储过程的参数,以防止写入操作
- 并发和吞吐量速率限制
数据库工具
- 多服务支持 — 可命名连接到多个 SQL Server 实例
- 架构概览 — 简洁的 Markdown 架构图,包含主键、外键、约束和默认值
- 表文档 — 以 Markdown 格式描述列、索引、外键和约束
- ER 图生成 — 生成 PlantUML 和 Mermaid 图,并智能检测基数
- 架构探索 — 列出可编程对象、视图定义、扩展属性和依赖关系图
- 查询计划分析 — 估算或获取实际 XML 执行计划
- DBA 诊断 — 可选集成 First Responder Kit、DarlingData 和 sp_WhoIsActive,并自动优化响应大小
- 渐进式发现 — 动态工具集模式按需公开工具,减少初始上下文窗口的占用
安装
所有方法生成的 MCP 服务相同。请按以下顺序操作:安装、保存配置、连接客户端、验证。
NuGet 全局工具(推荐)
1. 安装(前提条件:.NET 10.0 运行时)
dotnet tool install -g SqlAugur
2. 保存配置文件
# 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
要保存在该位置的 appsettings.json 示例:
{
"SqlAugur": {
"Servers": {
"production": {
"ConnectionString": "Server=myserver;Database=master;Integrated Security=True;TrustServerCertificate=False;Encrypt=True;"
}
}
}
}
3. 添加到 MCP 客户端
{
"mcpServers": {
"sqlaugur": {
"command": "sqlaugur"
}
}
}
更新方式:dotnet tool update -g SqlAugur
Docker / Podman
1. 运行 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
注意: 要连接主机上的 SQL Server,请使用
host.docker.internal(Docker Desktop)或--network=host(Linux)。将docker替换为podman即可,所有命令都相同。启用了 SELinux 的系统(Fedora、RHEL)必须在卷挂载中使用:Z标志;macOS/Windows 上的 Docker Desktop 用户可以省略该标志。
如果挂载配置文件,请将其保存为 /path/to/appsettings.json,并挂载到 /app/appsettings.json。
2. 添加到 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
MCP 客户端配置:
{
"mcpServers": {
"sqlaugur": {
"command": "docker",
"args": ["compose", "run", "-i", "--rm", "sqlaugur"]
}
}
}
从源代码构建
1. 构建(前提条件:.NET 10.0 SDK)
git clone [email protected]:mbentham/SqlAugur.git
cd SqlAugur
dotnet publish SqlAugur -c Release -o SqlAugur/publish
2. 保存配置文件
# 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. 添加到 MCP 客户端
{
"mcpServers": {
"sqlaugur": {
"command": "dotnet",
"args": ["/absolute/path/to/SqlAugur/publish/SqlAugur.dll"]
}
}
}
验证 MCP 连接(以大模型为先)
重启 MCP 客户端后,向助手提问:
Call list_serversCall list_databases for server "production"
预期结果:
list_servers返回你配置的服务名称(例如production)list_databases返回数据库的 JSON 数组,而不是连接或身份验证错误
如果验证失败:
- 确认 MCP 配置运行了预期命令(
sqlaugur、docker run ...或dotnet /path/to/SqlAugur.dll) - 确认
appsettings.json已保存在安装方式所要求的位置:- 本地工具:
~/.config/sqlaugur/appsettings.json(Linux/macOS)或%APPDATA%\sqlaugur\appsettings.json(Windows) - 容器:挂载到
/app/appsettings.json - 源代码构建:与发布的 DLL 位于同一目录(
SqlAugur/publish/appsettings.json)
- 本地工具:
- 确认工具调用使用了已配置的服务键(例如
production) - 确认连接字符串中的 SQL 连接和身份验证
配置
服务会从多个来源加载配置。优先级较高的来源会覆盖优先级较低的来源:
- 命令行参数
- 环境变量 — 使用
__作为分节符(例如,SqlAugur__Servers__production__ConnectionString=...) - 当前工作目录 — 运行命令所在目录中的
appsettings.json - 用户配置目录 — Linux 上的
~/.config/sqlaugur/appsettings.json,Windows 上的%APPDATA%\sqlaugur\appsettings.json - Azure Key Vault — 设置
AzureKeyVaultUri时(见下文) - 应用程序目录 — DLL 所在目录中的
appsettings.json
配置示例(Windows 身份验证 — 推荐):
{
"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
}
}
| 选项 | 默认值 | 说明 |
|---|---|---|
Servers | — | 命名的 SQL Server 连接(名称 → 连接字符串)。除非连接字符串设置了自己的 Application Name,否则连接会以 SqlAugur 标识自身并连接到 SQL Server(program_name、Extended Events 的 client_app_name)。 |
MaxRows | 1000 | 每次查询返回的最大行数,可直接返回或写入结果文件 |
ResultFileThresholdRows | 500 | read_data 返回的结果超过此行数(或约 40,000 个字符)时,会写入 CSV 文件,而不是直接返回,以避免 stdio 消息过大。设为 0 可禁用。 |
ResultsDirectory | 用户本地应用程序数据文件夹下的 sqlaugur/results(Windows 上为 %LOCALAPPDATA%\sqlaugur\results) | 写入结果文件的位置。必须是绝对路径。 |
ResultFileRetentionDays | 7 | 启动时删除超过此天数的结果文件 |
CommandTimeoutSeconds | 30 | 所有查询和过程的 SQL 命令超时时间 |
MaxConcurrentQueries | 5 | 可同时执行的最大 SQL 查询数 |
MaxQueriesPerMinute | 60 | 每分钟允许的最大查询数(令牌桶速率限制) |
EnableFirstResponderKit | false | 启用 First Responder Kit 诊断工具(sp_Blitz、sp_BlitzFirst、sp_BlitzCache、sp_BlitzIndex、sp_BlitzWho、sp_BlitzLock、sp_BlitzPlanCompare) |
EnableDarlingData | false | 启用 DarlingData 诊断工具(sp_PressureDetector、sp_QuickieStore、sp_QuickieCache、sp_HealthParser、sp_LogHunter、sp_HumanEventsBlockViewer、sp_IndexCleanup、sp_QueryReproBuilder) |
EnableWhoIsActive | false | 启用 sp_WhoIsActive 会话监控 |
EnableDynamicToolsets | false | 启用渐进式工具发现 — DBA 工具会通过 3 个元工具按需加载,而不是在启动时加载。可减少初始上下文窗口的占用。Enable* 标志仍用于控制允许使用哪些工具集。 |
AzureKeyVaultUri | — | Azure Key Vault URI(例如,https://myvault.vault.azure.net/)。设置后,保管库中的机密会通过 DefaultAzureCredential 添加为配置源。Key Vault 机密名称使用 -- 作为分节符(例如,名为 SqlAugur--Servers--prod--ConnectionString 的机密会映射到 SqlAugur:Servers:prod:ConnectionString)。 |
安全提示:
appsettings.json已加入 gitignore,以防意外提交凭据。有关推荐的身份验证方式,包括 Windows 身份验证、Azure 托管标识和安全凭据存储选项,请参阅 SECURITY.md。
工具
该服务提供 31 个工具,分为多个工具集。六个核心工具始终可用。其他工具集会在启动时加载(静态模式),或按需加载(动态模式)。
核心工具
| 工具 | 描述 |
|---|---|
list_servers | 列出 appsettings.json 中配置的可用 SQL Server 实例。 |
list_databases | 列出指定服务器上的所有数据库及其名称、ID、状态和创建日期。 |
read_data | 执行只读 SQL SELECT 查询。仅允许 SELECT 和 WITH(CTE)查询。小型结果以 JSON 格式返回;大型结果会写入 CSV 文件,并返回文件路径、行数、列和 10 行预览。传入 toFile: true 可始终返回文件。 |
get_query_plan | 返回 SELECT 查询的估算或实际 XML 执行计划。 |
get_schema_overview | 简明的 Markdown 架构概览:表、列、PK、FK、唯一性/检查约束和默认值。支持 compact 模式,以及按架构和表筛选。 |
describe_table | 全面的 Markdown 表元数据:列、数据类型、是否可空、默认值、标识列、计算表达式、索引、FK 和约束。 |
架构探索(4 个工具)
| 工具 | 描述 |
|---|---|
list_programmable_objects | 列出视图、存储过程、函数和触发器。可按类型和架构筛选。 |
get_object_definition | 返回可编程对象的源定义(CREATE 语句)。 |
get_extended_properties | 读取表、列和其他对象上的扩展属性(描述、元数据)。 |
get_object_dependencies | 显示对象引用了哪些内容,以及哪些内容引用了该对象——上游和下游依赖关系图。 |
图表(2 个工具)
| 工具 | 描述 |
|---|---|
get_plantuml_diagram | 生成包含表、列、PK 和 FK 关系的 PlantUML ER 图。保存为 .puml 文件。支持 compact 模式、按架构/表筛选,以及可配置的表数量上限(最多 200)。 |
get_mermaid_diagram | 生成包含表、列、PK 和 FK 关系的 Mermaid ER 图。保存为 .mmd 文件。支持 compact 模式、按架构/表筛选,以及可配置的表数量上限(最多 200)。 |
每个工具包都通过配置标志单独启用,并且要求在目标 SQL Server 上安装相应的存储过程。
所有 DBA 工具默认都会优化响应大小——排除 XML 查询计划列,并截断较长的字符串值,以确保响应不超出 AI 上下文窗口限制。每个工具都支持以下可选参数:
| 参数 | 描述 |
|---|---|
verbose | 返回所有列,不进行截断。 |
includeQueryPlans | 在输出中包含 XML 执行计划列。 |
maxRows | 每个结果集的最大返回行数。适用于具有可变长度输出的工具:BlitzIndex、BlitzLock、HealthParser、LogHunter(默认值为 200)、IndexCleanup、QueryReproBuilder。 |
部分工具还有其他参数:includeXmlReports(BlitzLock、HealthParser、HumanEventsBlockViewer)、compact(sp_WhoIsActive)、verboseMetrics(QuickieStore)。
First Responder Kit(7 个工具)— 需要 EnableFirstResponderKit: true
安装地址:github.com/BrentOzarULTD/SQL-Server-First-Responder-Kit
| 工具 | 描述 |
|---|---|
sp_blitz | SQL Server 整体健康检查——按优先级列出性能、配置和安全方面的发现。 |
sp_blitz_first | 实时性能诊断——在一段时间内对 DMV 进行采样,以检查等待、文件延迟和 perfmon 计数器。 |
sp_blitz_cache | 计划缓存分析——按 CPU、读取次数、持续时间、执行次数或内存授予量列出排名靠前的查询。 |
sp_blitz_index | 索引分析——检查缺失、未使用和重复的索引及其使用模式。 |
sp_blitz_who | 活动查询监控——查看正在运行的内容、阻塞信息、tempdb 使用情况和查询计划。 |
sp_blitz_lock | 根据 system_health 扩展事件会话分析死锁。 |
sp_blitz_plan_compare | 跨服务器查询计划比较——在一台服务器上捕获计划快照,并与第二台服务器上的缓存计划进行比较,无需使用链接服务器。在合并到 main 之前,需要使用 demon_hunters 分支。 |
DarlingData(8 个工具)— 需要 EnableDarlingData: true
安装地址:github.com/erikdarling/DarlingData
| 工具 | 描述 |
|---|---|
sp_pressure_detector | 诊断 CPU 和内存压力——资源瓶颈、高 CPU 查询、内存授予和磁盘延迟。 |
sp_quickie_store | Query Store 分析——消耗资源最多的查询、计划回归和等待统计信息。 |
sp_quickie_cache | 计划缓存分析——根据 dm_exec_*_stats DMV 中的影响评分,对影响较大的查询进行排名(是 sp_quickie_store 的计划缓存对应工具)。 |
sp_health_parser | 解析 system_health 扩展事件会话,以查看历史等待、磁盘延迟、CPU、内存和锁定情况。 |
sp_log_hunter | 搜索 SQL Server 错误日志中的错误、警告和自定义消息。 |
sp_human_events_block_viewer | 分析 sp_HumanEvents 会话中的阻塞事件——阻塞链、锁详细信息和等待。 |
sp_index_cleanup | 查找可考虑删除的未使用和重复索引。 |
sp_query_repro_builder | 使用参数值为 Query Store 查询生成复现脚本。 |
sp_WhoIsActive(1 个工具)— 需要 EnableWhoIsActive: true
安装地址:whoisactive.com
| 工具 | 描述 |
|---|---|
sp_whoisactive | 监控活动会话和查询——等待信息、阻塞详情、tempdb 使用情况和资源消耗。 |
当 EnableDynamicToolsets 为 true 时,启动时只会加载核心工具。三个元工具可让 AI 按需发现并启用其他工具集,从而减少初始上下文窗口的使用量:
| 工具 | 描述 |
|---|---|
list_toolsets | 列出可用工具集及其状态(可用、已启用、未配置)和工具数量。 |
get_toolset_tools | 在启用工具集之前,返回该工具集的详细工具和参数信息。 |
enable_toolset | 启用工具集,使其中的工具可用。只有管理员通过对应的 Enable* 配置标志启用了该工具集时,此操作才有效。 |
示例流程:
- AI 调用
list_toolsets— 发现first_responder_kit的状态为“可用”(已配置但尚未启用) - AI 调用
get_toolset_tools("first_responder_kit")— 查看这 7 个工具及其参数 - AI 调用
enable_toolset("first_responder_kit")— 这 7 个工具现已注册并可用 - AI 调用
sp_blitz— 照常运行健康检查
在静态模式(EnableDynamicToolsets: false)下,所有已启用的工具集都会在启动时加载,且不会注册发现工具。无论使用哪种模式,Schema Exploration 和 Diagrams 工具集始终会加载。
已知限制: 渐进式发现依赖 MCP
notifications/tools/list_changed通知,告知客户端有新工具已注册。Claude Code 目前尚未处理此通知(anthropics/claude-code#4118),因此动态启用的工具集不会显示。使用 Claude Code 时,请使用静态模式(EnableDynamicToolsets: false)。
安全性
查询验证
每个查询都会使用 Microsoft 官方的 TSql180Parser 解析为抽象语法树(AST),并且必须通过以下规则:
- 仅允许单条语句 — 拒绝多条语句
- 仅允许 SELECT — 禁止 INSERT、UPDATE、DELETE、DROP、EXEC、CREATE、ALTER 及所有其他语句类型
- 禁止 SELECT INTO — 防止通过 SELECT 创建表
- 禁止访问外部数据 — 禁止 OPENROWSET(包括 BULK、Cosmos DB 和内部变体)、OPENQUERY、OPENDATASOURCE、OPENXML
- 禁止链接服务器 — 拒绝四段式名称引用
- 禁止 MAXRECURSION 提示 — 防止覆盖默认递归限制
- 允许跨数据库查询 — 按设计允许使用三段式名称;安全边界是服务器,而非数据库。若要限制为单个数据库,请限制登录名的权限。
由于验证针对解析后的 AST 执行,因此能够正确处理字符串匹配方式无法应对的边缘情况:注释中的关键字、字符串字面量、嵌套块注释和编码技巧。
参数拦截
诊断存储过程通过白名单中的过程名称执行,并拦截可能导致写入的参数:
- First Responder Kit — 拦截所有
@Output*参数(防止将结果写入服务器表) - DarlingData — 拦截日志和输出参数(防止创建表和保留数据)
- sp_WhoIsActive — 拦截
@destination_table、@return_schema、@schema、@help
速率限制
所有工具执行都会受到并发限制(MaxConcurrentQueries,默认值为 5)和吞吐量限制(MaxQueriesPerMinute,默认值为 60)。超出限制的请求会被拒绝,并返回重试提示。
连接安全
尽可能使用 Windows Authentication 或 Azure Managed Identity,以避免在配置文件中存储凭据。必须使用 SQL Authentication 时,请使用环境变量覆盖项在运行时注入凭据。有关凭据存储和连接字符串加密等详细指南,请参阅 SECURITY.md。
已知风险
- 本项目依赖 Microsoft 官方的 MCP C# SDK(
ModelContextProtocolNuGet 包,版本为 1.3.0)。由于 MCP 框架负责处理所有协议 I/O,其中的任何漏洞都会直接影响本应用的安全边界。请关注该包的更新,并在新版本发布后升级。 - SQL Server 查询返回的数据可能包含针对 AI 的恶意提示词注入。这是使用 AI 时普遍存在的风险,本项目无法缓解。请遵循 AI 安全最佳实践,并仅连接到可信的数据源。
贡献
欢迎贡献。有关架构详情、开发环境设置、测试说明以及添加新工具的指南,请参阅 CONTRIBUTING.md。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。