使用说明
SqlServer MCP
一个轻量级的模型上下文协议(MCP)服务器,它公开了安全的、以读取为中心的工具,用于通过HTTP探索Microsoft SQL server数据库。它旨在供MCP兼容的客户端和代理使用。
特性
- 通过MCP公开SQL Server工具:
SqlListTables:列出用户表(schema.table).SqlPreviewTable:预览至top表中的行。SqlRunQuery:以只读方式执行SELECT(以及WITHCTE)查询。
- HTTP传输由ASP。NET Core,默认值:
http://localhost:3001. - 通过配置连接字符串
appsettings.json或环境变量。
学习内容
将模式表示为GPT的最佳方式?
使用一个markdown文件,可能每个表都有一个
<SCHEMA>
tables:
Employees:
columns:
id: int (PK)
name: string
department_id: int (FK → Departments.id)
status: enum["ACTIVE","INACTIVE"]
</SCHEMA>
模式提示
https://medium.com/@nikunj.agarwal012/模式绘制-革命性的查询数据库方法-b950954cc62
- 模式提示涉及向语言模型(LLM)提供数据库模式(表、列、类型、关系)的正式描述以及用户的自然语言请求
- 降低进入门槛-不熟悉SQL的用户或分析师可以通过自然语言查询数据库
- 加快查询生成速度——与手工编写SQL相比,开发人员和分析师节省了时间。
- 模式定义-列出表、列、类型、关系(由开发人员完成)
- 用户问题——用户想要什么数据,用自然语言。(由用户完成)
- 生成SQL的指令-告诉模型根据模式+问题输出SQL查询。(由法学硕士完成)
- 执行SQL-对数据库运行SQL,并用响应响应用户。(由本项目完成)
项目布局
SqlServer-MCP/Program.cs:配置web主机,读取连接字符串,注册MCP服务器和工具,映射MCP端点,并在以下位置运行http://localhost:3001.SqlServer-MCP/SqlServerTools.cs:实现SQL Server的MCP工具(如上所列)。SqlServer-MCP/appsettings.json:保留ConnectionStrings:SqlServer.SqlServer-MCP/SqlServer-MCP.csproj: .NET项目配置和包引用。
先决条件
- .NET SDK
9.0或以后 - 访问Microsoft SQL Server实例
- 如果您想通过MCP使用工具,则可以使用MCP兼容的客户端(例如,启用MCP的IDE/代理)
配置
使用以下方法之一设置连接字符串。
appsettings.json(默认)
{
"ConnectionStrings": {
"SqlServer": "Server=localhost;Database=YourDb;Trusted_Connection=True;TrustServerCertificate=True;"
}
}
- 环境变量(覆盖文件)
- 密钥:
ConnectionStrings__SqlServer - 例子:
- Windows(PowerShell):
$env:ConnectionStrings__SqlServer = "Server=localhost;Database=YourDb;User Id=sa;Password=YourPassword;TrustServerCertificate=True;" - Linux/macOS(bash):
export ConnectionStrings__SqlServer="Server=localhost;Database=YourDb;User Id=sa;Password=YourPassword;TrustServerCertificate=True;"
- Windows(PowerShell):
笔记:
- 对于具有自签名证书的本地开发人员,
TrustServerCertificate=True可以很方便。 - 对于Windows集成身份验证,请使用
Trusted_Connection=True.
构建并运行
从存储库根目录:
# Build
dotnet build
# Run (Debug)
dotnet run --project SqlServer-MCP
# Or run on a specific URL
dotnet run --project SqlServer-MCP --urls "http://localhost:3001"
启动时,服务器会监听 http://localhost:3001 并通过HTTP传输公开MCP端点。
使用MCP工具
此服务器旨在供MCP客户端使用。将MCP客户端连接到 http://localhost:3001,您可以调用以下工具:
-
SqlListTables()- 说明:列出当前SQL Server数据库中的用户表。
- 退货:
List<string>喜欢schema.table.
-
SqlPreviewTable(string tableName, int top = 20)- 说明:返回最多
top给定行schema.table. - 退货:
TableResult随着Columns以及行字典的收集。
- 说明:返回最多
-
SqlRunQuery(string sql)- 说明:执行只读SELECT查询(或
WITHCTE)。非SELECT被阻止。 - 退货:
TableResult如上所述。
- 说明:执行只读SELECT查询(或
安全说明: SqlRunQuery 故意拒绝非SELECT语句。
故障排除
-
启动断言:
Assertion failed. connString != null- 原因:未找到连接字符串。
- 修复:
- 确保
appsettings.json存在并被复制到输出,项目已包含:<ItemGroup> <Content Include="appsettings.json"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </Content> </ItemGroup> - 确认关键路径准确无误
ConnectionStrings→SqlServer. - 通过环境变量提供
ConnectionStrings__SqlServer如果愿意的话。
- 确保
-
SQL连接错误:
- 验证服务器主机名/端口、凭据和网络访问。
- 如果使用容器或远程SQL Server,请确保端口是公开的且可访问的。
包裹
ModelContextProtocol和ModelContextProtocol.AspNetCore(0.4.1-preview.1)Microsoft.Data.SqlClient(7.0.0-preview2.25289.6)Microsoft.SqlServer.Server(1.0.0)- 预览的分页和过滤
- 安全模板的可选参数化查询支持
- 附加元数据工具(索引、外键等)
