SQL验证执行工具

SQL MCP Server是一个用于SQL Server的T-SQL语法验证、安全执行和自动文档生成的工具,支持多版本SQL Server并提供详细错误分析。

  • by MarcceloSelv
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 MarcceloSelv/MCP

使用说明

SQL MCP服务器v4.0

适用于 SQL Server 的完整 MCP Server:使用 Microsoft 官方解析器验证、安全运行和 T-SQL 文档。

新版本 v4.0: 迁移到官方图书馆使用 模型上下文协议 微软/人类学。

🌟 特点

  • ✅ 语法校验 T-SQL(SQL Server 2005-2022)
  • 🚀 安全执行查询 在多个数据库中
  • 📚 自动生成文档 em Markdown
  • 📊 详细的错误分析( 行、 列、 消息)
  • 🌳 解析抽象语法树
  • 🔧 支持多个版本的 SQL Server
  • 🔒 安全阻止破坏性命令(DROP,DELETE,UPDATE等)

📦 安装

cd C:\Users\Marccelo\source\repos\SQL-Server\Mcp
dotnet restore
dotnet build
dotnet publish -c Release -o ./publish

⚙️ Claude 桌面配置

存在 两种形式 配置数据库: 通过 环境变量 (推荐)或通过 命令行参数.

选项 1:环境变量(推荐)⭐

设置系统环境变量,并在 Claude Desktop 中使用一个简单的设置:

设置环境变量( Windows) :

方法A-JSON完成:

# PowerShell (Usuário atual)
[Environment]::SetEnvironmentVariable("SQL_MCP_DATABASES", '{"qa":"Server=localhost;Database=QA;Integrated Security=true;","production":"Server=prod-server;Database=MyDB;User Id=user;Password=pass;"}', "User")
[Environment]::SetEnvironmentVariable("SQL_MCP_DEFAULT_DATABASE", "qa", "User")

方法B:个体变量:

# PowerShell (Usuário atual)
[Environment]::SetEnvironmentVariable("SQL_MCP_DB_QA", "Server=localhost;Database=QA;Integrated Security=true;", "User")
[Environment]::SetEnvironmentVariable("SQL_MCP_DB_PRODUCTION", "Server=prod-server;Database=MyDB;User Id=user;Password=pass;", "User")
[Environment]::SetEnvironmentVariable("SQL_MCP_DEFAULT_DATABASE", "qa", "User")

设置在 claude_desktop_config.json:

{
  "mcpServers": {
    "sql-mcp-server": {
      "command": "dotnet",
      "args": [
        "C:\\Users\\Marccelo\\source\\repos\\SQL-Server\\Mcp\\publish\\SqlMcpServer.dll"
      ]
    }
  }
}

选项 2: 命令行参数

Windows(通过 args 使用多个数据库):

{
  "mcpServers": {
    "sql-mcp-server": {
      "command": "dotnet",
      "args": [
        "C:\\Users\\Marccelo\\source\\repos\\SQL-Server\\Mcp\\publish\\SqlMcpServer.dll",
        "--databases={\"production\":\"Server=prod-server;Database=MyDB;User Id=user;Password=pass;\",\"staging\":\"Server=staging-server;Database=MyDB;User Id=user;Password=pass;\",\"development\":\"Server=localhost;Database=MyDB;Integrated Security=true;\"}",
        "--default-database=development"
      ]
    }
  }
}

位置 : %APPDATA%\Claude\claude_desktop_config.json

可用的环境变量

  • **SQL_MCP_DATABASES**JSON 与名称映射 → 连接字符串
    • 例如: {"dev":"Server=localhost;Database=DB;...","prod":"Server=..."}
  • **SQL_MCP_DB_<NAME>**指定银行的连接字符串
    • 例如: SQL_MCP_DB_QA, SQL_MCP_DB_PRODUCTION
    • 银行名称将转换为小写
  • **SQL_MCP_DEFAULT_DATABASE**默认银行名称( 可选)

命令行参数

  • --databases=<json>JSON 与名称映射 → 连接字符串(覆盖环境变量)
  • --default-database=<nome>: 默认银行名称( 可选, 如果未指定, 则使用第一个)

注: 命令行参数优先于环境变量。

🔄 重试策略e超时

O服务商实施鲁棒策略重试超时:

自动重试

  • 过渡错误 自动保留与 指数退避
  • 最多3次尝试 (共4次执行)
  • 延误1s,2s,4s之间的尝试
  • 重试错误:
    • 传输级别错误(连接被远程主机关闭)
    • 连接中断/超时
    • 网络错误
    • Azure SQL瞬态错误(401974050140613)

超时配置

  • 连接超时15 秒(连接时间)
  • 命令超时300秒/5分钟(查询执行时间)
  • 验证超时5 秒(快速验证) SET PARSEONLY ON)

非暂时性错误(语法、权限等) 不保留.

🛠️ 可用工具

1.validate_sql

校验 SQL 查询的语法 。

参数 :

  • query (string, 必填): 用于验证的 SQL 查询
  • sqlVersion (string, optional): SQL Server 版本(默认:160)

例如:

SELECT * FROM Users WHERE Id = 1

答案 :

{
  "valid": true,
  "errorCount": 0,
  "errors": [],
  "summary": "✓ SQL syntax is valid (validated against SQL Server 2022)"
}

2.parse_sql

解析查询并返回有关 AST 结构的信息。

参数 :

  • query (string, 必填): 用于解析的 SQL 查询
  • sqlVersion (string, optional) SQL Server 版本

答案 :

{
  "valid": true,
  "fragmentType": "TSqlScript",
  "scriptTokenStream": 45,
  "astInfo": "Statements: 3, Tables: 2"
}

3.document_sql

为 SQL 脚本生成完整的 Markdown 文档。

参数 :

  • query (string, 必填): 用于文档的 SQL 脚本
  • sqlVersion (string, optional) SQL Server 版本

4.execute_sql✨ 新的

在配置为 SQL 的数据库中执行 SQL 查询 安全验证.

参数 :

  • query (string, required) 要执行的 SQL 查询
  • database (string, optional): 数据库名称(如果未指定,则使用默认值)

允许的命令:

  • ✅ 选择
  • ✅ 插入
  • ✅ CREATE(表格、索引等)

阻止的命令:

  • ❌ 丢弃
  • ❌ 删除
  • ❌ 更新
  • ❌ 截断
  • ❌ 修改表
  • ❌ 更改数据库

例如:

SELECT TOP 10 CustomerID, CompanyName, ContactName
FROM Customers
ORDER BY CustomerID

答案 :

✓ Query executed successfully on database: development
Rows returned: 10

| CustomerID | CompanyName | ContactName |
| --- | --- | --- |
| 1 | Alfreds Futterkiste | Maria Anders |
| 2 | Ana Trujillo | Ana Trujillo |
...

5.列表_数据库✨ 新的

列出所有已配置的数据库 。

答案 :

{
  "success": true,
  "defaultDatabase": "development",
  "availableDatabases": ["production", "staging", "development"]
}

🎯 支持的SQL命令

或解析器支持 全部 操作系统comandos T-SQL:

  • ✅ 数据操作语言:选择、插入、更新、删除、合并、批量插入
  • ✅ 数据定义语言:创建/更改/删除(表、索引、视图、过程、函数、触发器)
  • ✅ 数字命令语言:授予、撤销、拒绝
  • ✅ TCL:开始事务、提交、回滚
  • ✅ 行政的:DBCC、备份、还原、更改数据库
  • ✅ 高级:扩展事件、XML、JSON、CTE、窗口函数、时态表、图形表

📚 Claude 的实例

有效SQL

Claude, valide esta query:
SELECT * FROM Users WHERE Name LIKE '%test%'

执行查询

Claude, execute esta query no banco de development:
SELECT TOP 10 * FROM Customers ORDER BY CustomerID

可用银行列表

Claude, liste os bancos de dados disponíveis

Documentar存储过程

Claude, documente este procedure:
CREATE PROCEDURE UpdateUserStatus @UserId INT, @NewStatus BIT AS
BEGIN UPDATE Users SET Active = @NewStatus WHERE Id = @UserId END

🔢 支持的 SQL Server 版本

代码 版本
90 SQL Server 2005
100 SQL Server 2008
110 SQL Server 2012
120 SQL Server 2014
130 SQL Server 2016
140 SQL Server 2017
150 SQL Server 2019
160 SQL Server 2022(默认)

🧪 本地测试

运行测试程序 :

cd C:\Users\Marccelo\source\repos\SQL-Server\Mcp
dotnet run

✅ 上一个版本的更改

v3.0 → v3.1 (当前)

已添加 :

  • ✅ 重试策略:重试用于过渡错误的自动COM指数回退
  • ✅ 可配置超时:连接超时(15秒)separado命令超时(300秒)
  • ✅ 环境变量设置通过 SQL_MCP_DATABASES e SQL_MCP_DB_<NAME>
  • ✅ 记录Aprimorado重试和配置加载日志

v2.0 → v3.0

已删除 :

  • ❌ format_sqlSQL 格式化工具已删除
  • ❌ SQL格式化服务已删除格式化服务

已添加 :

  • ✅ execute_sql安全执行 SQL 查询
  • ✅ 列表_数据库已配置的银行列表
  • ✅ SqlConnectionConfig管理多个连接
  • ✅ SqlExecutionService: 带安全验证的运行服务
  • ✅ AST 验证在执行前阻止危险命令

🚀 即将推出的功能(计划)

  • [ ] 银行连接语义验证 (SMO)
  • [ ] 从查询中提取表/函数
  • [ ] 检查银行中对象的存在
  • SQL Security Scanner(SQL注入扫描器)
  • 查询优化(Query Optimizer)
  • []SQL到LINQ转换器
  • []事务支持(开始/提交/回滚)
  • []迁移脚本生成器

📖 使用的库

  • 微软。SqlServer。TransactSql。ScriptDom v170.128.0 - 微软官方 T-SQL 解析器
  • 微软。数据。SqlClient SQL Server官方客户端
  • 系统。文本。JSON v9.0.9 - JSON 序列化

📦 构建部署

分布大小

设置 大小 注释
自给自足(推荐) 80MB 不需要NET 安装
依赖于框架 ~10MB 请求者。NET 8运行时安装程序

关于修剪的说明裁剪被禁用,因为它干扰了MCP协议使用的动态JSON序列化。额外的大小(~40MB)是可以接受的,以确保完全兼容。

🎓 O que O解析器有效

✅ 选择( 语法)

  • 正确的SQL关键字
  • 命令结构
  • 逗号、 括号、 引号
  • 函数语法

❌ 无效( 语义)

  • 如果函数存在
  • 如果有表格
  • 如果列存在
  • 兼容的数据类型
  • 用户权限

完整的语义验证需要连接到数据库!

📝 MCP通讯

MCP 服务器通过 stdin/stdout 使用协议 JSON-RPC 2.0:

Claude Desktop ─stdin─> MCP Server
                       (lê JSON line-by-line)

Claude Desktop <─stdout─ MCP Server
                       (escreve JSON line-by-line)

每一行都是一个完整的JSON-RPC消息。

🐳 部署com Docker

docker build -t sql-validator-mcp .
docker run -i sql-validator-mcp

☸️ 不部署Kubernetes

kubectl apply -f kubernetes-deployment.yaml

注: MCP 使用 stdin/stdout,因此无法在 K8 上直接工作。要在 K8s 中使用,请创建一个包含 MCP Server 的 HTTP API。

📄 许可证

麻省理工学院

👤 作者

通过模型上下文协议 (MCP) 与 Claude AI 搭配使用