使用说明
SQL Server MCP服务器
用C#编写的独立MCP(模型上下文协议)服务器,为任何符合MCP的IDE或客户端提供SQL server集成功能。
特性
- SQL Server连接
- 数据库模式探索
- 表和视图检查
- 列元数据检索
- 存储过程枚举
- SQL查询执行
- 存储过程执行
- 故障排除的调试模式
- 可配置的日志记录路径
- 动态项目连接解析程序:根据编辑器中的活动文件动态自动解析和覆盖数据库连接字符串
先决条件
- .NET 10.0 SDK或更高版本
- SQL Server实例(本地或远程)
- SQL Server客户端工具
设置
- 构建项目:
dotnet build
-
配置应用程序:
- 复制
appsettings.example.json到appsettings.json - 更新中的连接字符串和其他设置
appsettings.json包含您的SQL Server详细信息
{ "ConnectionStrings": { "DefaultConnection": "Server=your-server;Database=master;User ID=your-username;Password=your-password;TrustServerCertificate=True" }, "LogPath": "C:\\Path\\To\\Your\\LogDirectory\\", "DebugMode": "false" } - 复制
-
在IDE/客户端中配置MCP服务器:
- 将服务器配置添加到IDE的MCP配置文件中(例如Windsurf、Claude Desktop配置或Cline/Cursor设置)。
- 将命令指向构建的可执行文件的路径:
{ "mcpServers": { "sqlMcpService": { "command": "path/to/your/MCPSqlServer.exe", "args": [], "description": "SQL Server MCP Service" } } } -
设置GitHub集成:
- 为您的项目创建一个新的GitHub存储库
- 使用以下命令在项目目录中初始化新的Git存储库
git init - 使用远程方式添加您的GitHub存储库
git remote add origin <repository-url> - 使用以下命令将您的更改推送到远程存储库
git push -u origin master
配置选项
这 appsettings.json 文件包含以下配置选项:
ConnectionStrings:DefaultConnection:SQL Server连接字符串LogPath:存储日志文件的目录DebugMode:设置为“true”以启用详细的调试日志记录AllowWorkspaceOverride:设置为“false”可禁用动态项目连接覆盖(默认为“true”)
动态项目连接解析程序
在多项目工作区中,不同的文件夹或子项目连接到不同的数据库,您可以避免不断更新主配置:
- 所有数据库工具都接受可选
currentFilePath参数(通常由IDE客户端自动填充活动文件的路径)。 - 服务器从文件的父文件夹沿目录树向上搜索最近的文件夹
appsettings.json. - 如果找到,它会动态提取并使用该文件的
ConnectionStrings:DefaultConnection用于查询执行。 - 如果找不到配置文件,或者
AllowWorkspaceOverride设置为"false",它将回退到启动时加载的主连接字符串。
出版
您可以将应用程序发布为自包含的可执行文件:
dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true
这将创建一个包含所有依赖项的单个可执行文件。
协议
MCP服务器使用标准JSON-RPC 2.0模型上下文协议通过标准输入/输出进行通信。
请求格式(工具/调用)
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tool-name",
"arguments": {
"param1": "value1",
"param2": "value2"
}
}
}
响应格式
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "JSON-serialized tool output"
}
]
}
}
或者,如果出现错误:
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Error description"
}
}
支持的工具
1.列出数据库(get_databases)
列出所有可用的非系统SQL Server数据库。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_databases",
"arguments": {}
}
}
2.列出数据库中的表(get_tables)
列出指定数据库中的所有表和视图。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_tables",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo"
}
}
}
3.获取表列(get_columns)
列出指定表中的所有列和列元数据。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_columns",
"arguments": {
"database": "AdventureWorks",
"schema": "Person",
"table": "Person"
}
}
}
4.列出存储过程(get_procedures)
列出指定数据库中的所有存储过程。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_procedures",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo"
}
}
}
5.获取存储过程定义(get_procedure_definition)
获取存储过程的定义。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_procedure_definition",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo",
"name": "uspGetEmployeeManagers"
}
}
}
6.执行数据库查询(execute_database_query)
在特定数据库的上下文中执行SQL查询。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_database_query",
"arguments": {
"database": "AdventureWorks",
"query": "SELECT TOP 10 * FROM Person.Person"
}
}
}
7.执行系统查询(execute_system_query)
在服务器实例级别执行SQL查询(不需要数据库上下文)。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_system_query",
"arguments": {
"query": "SELECT name FROM sys.databases"
}
}
}
8.执行存储过程(execute_procedure)
执行存储过程。
请求:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "execute_procedure",
"arguments": {
"database": "AdventureWorks",
"schema": "dbo",
"procedure": "uspGetEmployeeManagers",
"parameters": {
"BusinessEntityID": 5
}
}
}
}
IDE/客户端集成
此MCP服务器可以从任何兼容MCP的IDE或客户端(例如Windsurf、Cursor、Cline、Claude Desktop)用于:
- 浏览数据库架构
- 执行SQL查询并查看结果
- 获取表名和列名的代码补全
- 运行存储过程
- 生成SQL代码片段
- 分析数据库结构
代码结构
应用程序分为以下组件:
Program.cs:主要入口点和请求处理JsonRpcHandler.cs:处理JSON-RPC协议并分派请求- 配置从加载
appsettings.json - 日志被写入由指定的文件
LogPath设置
贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add some amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
许可证
此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。
错误处理
常见错误代码:
invalid_request:JSON格式错误或缺少必填字段connection_failed:无法连接到SQL Servermissing_parameter:未提供必需参数query_execution_error:执行SQL查询时出错database_not_found:指定的数据库不存在table_not_found:指定的表不存在