mcpField
S
SqlAugur

SqlAugur

本地服务
github.com数据库82 周前更新

关于 SqlAugur

SqlAugur 是供 AI 助手在只读约束下查询 SQL Server 数据库的 MCP 服务。它使用 Microsoft 的 T-SQL 解析器验证查询,并结合数据库探索、速率限制和可选 DBA 诊断工具。

主要功能

  1. 01仅允许只读 SELECT 和 CTE 查询
  2. 02使用 Microsoft T-SQL 解析器进行 AST 验证
  3. 03支持多个服务器的命名连接
  4. 04架构探索与 ER 图生成
  5. 05查询计划和可选 DBA 诊断
  6. 06速率与并发限制

适用场景

  1. 01回答数据库内容相关问题
  2. 02查看表关系和数据库架构
  3. 03检查查询执行计划
  4. 04使用 DBA 工具检查 SQL Server 状况

MCP 相关

SqlAugur 向 MCP 客户端提供 SQL Server 查询、架构和诊断工具,通过 stdio 通信,并支持静态或按需发现工具集。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库
安装包
nugetSqlAugur1.3.1

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

SqlAugur

NuGet NuGet Downloads License: MIT .NET 10.0

README 配图

一个 MCP 服务,为 AI 助手提供安全、只读的 SQL Server 数据库访问能力。每条查询都会使用 Microsoft 官方的 T-SQL 解析器解析为完整的 AST,而不是使用正则表达式,因此可在语法层面拦截注释注入、字符串字面量技巧和编码绕过。

┌──────────────┐          ┌───────────────────────────────────────────┐        ┌──────────────┐
│              │  stdio   │  SqlAugur                                 │        │              │
│  AI Client   │◄────────►│                                           │───────►│  SQL Server  │
│              │          │  ┌────────────┐  ┌──────────────────────┐ │        │              │
└──────────────┘          │  │  Query     │  │  Schema / Diagram /  │ │        └──────────────┘
                          │  │  Validator │  │  DBA Services        │ │
                          │  └────────────┘  └──────────────────────┘ │
                          │  ┌────────────────────────────────────┐   │
                          │  │  Rate Limiter                      │   │
                          │  └────────────────────────────────────┘   │
                          └───────────────────────────────────────────┘

快速开始

所有安装方式均按以下顺序操作:

  1. 安装 SqlAugur
  2. 将 appsettings.json 保存到正确位置
  3. 将 SqlAugur 添加到 MCP 客户端配置中
  4. 让助手调用 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_servers
  • Call list_databases for server "production"

预期结果:

  • list_servers 返回你配置的服务名称(例如 production)
  • list_databases 返回数据库的 JSON 数组,而不是连接或身份验证错误

如果验证失败:

  1. 确认 MCP 配置运行了预期命令(sqlaugur、docker run ... 或 dotnet /path/to/SqlAugur.dll)
  2. 确认 appsettings.json 已保存在安装方式所要求的位置:
    • 本地工具:~/.config/sqlaugur/appsettings.json(Linux/macOS)或 %APPDATA%\sqlaugur\appsettings.json(Windows)
    • 容器:挂载到 /app/appsettings.json
    • 源代码构建:与发布的 DLL 位于同一目录(SqlAugur/publish/appsettings.json)
  3. 确认工具调用使用了已配置的服务键(例如 production)
  4. 确认连接字符串中的 SQL 连接和身份验证

配置

服务会从多个来源加载配置。优先级较高的来源会覆盖优先级较低的来源:

  1. 命令行参数
  2. 环境变量 — 使用 __ 作为分节符(例如,SqlAugur__Servers__production__ConnectionString=...)
  3. 当前工作目录 — 运行命令所在目录中的 appsettings.json
  4. 用户配置目录 — Linux 上的 ~/.config/sqlaugur/appsettings.json,Windows 上的 %APPDATA%\sqlaugur\appsettings.json
  5. Azure Key Vault — 设置 AzureKeyVaultUri 时(见下文)
  6. 应用程序目录 — 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)。
MaxRows1000每次查询返回的最大行数,可直接返回或写入结果文件
ResultFileThresholdRows500read_data 返回的结果超过此行数(或约 40,000 个字符)时,会写入 CSV 文件,而不是直接返回,以避免 stdio 消息过大。设为 0 可禁用。
ResultsDirectory用户本地应用程序数据文件夹下的 sqlaugur/results(Windows 上为 %LOCALAPPDATA%\sqlaugur\results)写入结果文件的位置。必须是绝对路径。
ResultFileRetentionDays7启动时删除超过此天数的结果文件
CommandTimeoutSeconds30所有查询和过程的 SQL 命令超时时间
MaxConcurrentQueries5可同时执行的最大 SQL 查询数
MaxQueriesPerMinute60每分钟允许的最大查询数(令牌桶速率限制)
EnableFirstResponderKitfalse启用 First Responder Kit 诊断工具(sp_Blitz、sp_BlitzFirst、sp_BlitzCache、sp_BlitzIndex、sp_BlitzWho、sp_BlitzLock、sp_BlitzPlanCompare)
EnableDarlingDatafalse启用 DarlingData 诊断工具(sp_PressureDetector、sp_QuickieStore、sp_QuickieCache、sp_HealthParser、sp_LogHunter、sp_HumanEventsBlockViewer、sp_IndexCleanup、sp_QueryReproBuilder)
EnableWhoIsActivefalse启用 sp_WhoIsActive 会话监控
EnableDynamicToolsetsfalse启用渐进式工具发现 — 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)。
### DBA 诊断工具

每个工具包都通过配置标志单独启用,并且要求在目标 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_blitzSQL 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_storeQuery 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* 配置标志启用了该工具集时,此操作才有效。

示例流程:

  1. AI 调用 list_toolsets — 发现 first_responder_kit 的状态为“可用”(已配置但尚未启用)
  2. AI 调用 get_toolset_tools("first_responder_kit") — 查看这 7 个工具及其参数
  3. AI 调用 enable_toolset("first_responder_kit") — 这 7 个工具现已注册并可用
  4. 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(ModelContextProtocol NuGet 包,版本为 1.3.0)。由于 MCP 框架负责处理所有协议 I/O,其中的任何漏洞都会直接影响本应用的安全边界。请关注该包的更新,并在新版本发布后升级。
  • SQL Server 查询返回的数据可能包含针对 AI 的恶意提示词注入。这是使用 AI 时普遍存在的风险,本项目无法缓解。请遵循 AI 安全最佳实践,并仅连接到可信的数据源。

贡献

欢迎贡献。有关架构详情、开发环境设置、测试说明以及添加新工具的指南,请参阅 CONTRIBUTING.md。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。