使用说明
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_DATABASESeSQL_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 搭配使用