使用说明
SQL Server MCP服务器
用于SQL server的模型上下文协议(MCP)服务器,使用构建。网10。此服务器提供通过MCP协议与SQL server数据库交互的工具。
✅ 与SQL Server 2005及更高版本兼容
特性
此MCP服务器为SQL server操作提供了以下工具:
- 怎么翻译 -执行SQL查询并返回结果
- list_tables -列出数据库中的所有表
- describe_table -获取详细的表结构信息
- 列表_数据库 -列出服务器上的所有数据库
- 列表存储程序 -列出数据库中的所有存储过程
- list_functions -列出数据库中的所有用户定义函数
- get_routine_定义 -获取存储过程或函数的源代码
- execute_nonquery -执行INSERT、UPDATE、DELETE、CREATE命令
先决条件
- .NET 10 SDK或更高版本
- SQL Server实例(SQL Server 2005或更高版本)
- 有效的SQL Server连接字符串
安装
- 克隆或下载此存储库
- 构建项目:
dotnet build
用法
Visual Studio 2026的配置
此MCP服务器旨在与Visual Studio 2026的MCP集成配合使用。
独立运行服务器
服务器使用stdio传输进行通信:
dotnet run
在Visual Studio 2026中配置
在Visual Studio 2026中,通过以下方式配置MCP服务器:
工具>选项>人工智能>模型上下文协议
使用以下设置添加新的MCP服务器:
- 名字:SQL Server
- 类型标准: stdio
- 命令:
dotnet - 参数:
run --project c:\Dev\sqlserver-mcp\SqlServerMcp.csproj - 工作目录:
c:\Dev\sqlserver-mcp
或者,您可以发布项目并使用可执行文件:
dotnet publish -c Release -o publish
然后配置:
- 命令:
c:\Dev\sqlserver-mcp\publish\SqlServerMcp.exe - 参数:(留空)
SQL Server 2005的连接字符串
对于 SQL Server 2005,使用以下连接字符串格式:
Windows身份验证(建议用于SQL Server 2005):
Data Source=VM-SQLTEST;Database=master;Integrated Security=True;Encrypt=False
或者使用标准格式:
Server=localhost;Database=MyDatabase;Integrated Security=true;Encrypt=false;
SQL Server身份验证:
Data Source=VM-SQLTEST;Database=MyDatabase;User Id=sa;Password=YourPassword;Encrypt=False
具有特定端口的远程服务器:
Server=192.168.1.100,1433;Database=MyDatabase;User Id=myuser;Password=mypass;Encrypt=false;
命名实例:
Server=localhost\SQLEXPRESS;Database=MyDatabase;Integrated Security=true;Encrypt=false;
SQL Server 2008的连接字符串+
对于 现代SQL Server版本,使用:
Windows身份验证:
Server=localhost;Database=MyDatabase;Integrated Security=true;TrustServerCertificate=true;
SQL Server身份验证:
Server=localhost;Database=MyDatabase;User Id=sa;Password=YourPassword;TrustServerCertificate=true;
🔒 安全说明
- SQL Server 2005:此服务器启用TLS 1.0兼容性支持。使用
Encrypt=false在连接字符串中。 - 生产环境:考虑升级到支持TLS 1.2+的现代SQL Server版本。
- 证书:服务器接受用于开发目的的自签名证书。
可用工具
怎么翻译
执行SQL查询并以JSON格式返回结果。
参数:
connectionString(string,必填):SQL Server连接字符串query(string,必填):要执行的SQL查询maxRows(int,可选):返回的最大行数(默认值:100,最大值:1000)timeoutSeconds(int,可选):查询超时(秒)(默认值:30)
例子:
{
"connectionString": "Server=localhost;Database=AdventureWorks;Integrated Security=true;Encrypt=false;",
"query": "SELECT TOP 10 * FROM Sales.Customer",
"timeoutSeconds": 60
}
list_tables
列出数据库中的所有表。
参数:
connectionString(string,必填):SQL Server连接字符串schema(字符串,可选):按架构名称筛选
例子:
{
"connectionString": "Server=localhost;Database=AdventureWorks;Integrated Security=true;Encrypt=false;",
"schema": "Sales"
}
describe_table
获取有关表结构的详细信息。
参数:
connectionString(string,必填):SQL Server连接字符串schema(字符串,必填):架构名称tableName(字符串,必填):表名
例子:
{
"connectionString": "Server=localhost;Database=AdventureWorks;Integrated Security=true;Encrypt=false;",
"schema": "Sales",
"tableName": "Customer"
}
列表_数据库
列出SQL Server实例上的所有用户数据库(自动检测SQL Server 2005)。
参数:
connectionString(string,必填):SQL Server连接字符串(可以连接到任何数据库)
例子:
{
"connectionString": "Server=localhost;Integrated Security=true;Encrypt=false;"
}
列表存储程序
列出数据库中的所有存储过程。
参数:
connectionString(string,必填):SQL Server连接字符串schema(字符串,可选):按架构名称筛选
例子:
{
"connectionString": "Server=localhost;Database=AdventureWorks;Integrated Security=true;TrustServerCertificate=true;",
"schema": "dbo"
}
list_functions
列出数据库中所有用户定义的函数。
参数:
connectionString(string,必填):SQL Server连接字符串schema(字符串,可选):按架构名称筛选
例子:
{
"connectionString": "Server=localhost;Database=AdventureWorks;Integrated Security=true;TrustServerCertificate=true;",
"schema": "dbo"
}
get_routine_定义
获取存储过程或函数的源代码/定义。
参数:
connectionString(string,必填):SQL Server连接字符串schema(字符串,必填):架构名称routineName(string,必填):存储过程或函数的名称
例子:
{
"connectionString": "Server=localhost;Database=AdventureWorks;Integrated Security=true;TrustServerCertificate=true;",
"schema": "dbo",
"routineName": "uspGetEmployeeManagers"
}
答复包括:
- 例程类型(程序或功能)
- 返回类型(用于函数)
- 创建日期和最后更改日期
- 完整的源代码定义
execute_nonquery
执行非查询SQL命令(INSERT、UPDATE、DELETE、CREATE等)。
参数:
connectionString(string,必填):SQL Server连接字符串command(string,必填):要执行的SQL命令timeoutSeconds(int,可选):命令超时时间(秒)(默认值:30)
例子:
{
"connectionString": "Server=localhost;Database=MyDatabase;Integrated Security=true;TrustServerCertificate=true;",
"command": "INSERT INTO Users (Name, Email) VALUES ('John Doe', 'john@example.com')"
}
响应格式
所有工具都以一致的格式返回JSON响应:
成功响应:
{
"success": true,
"data": [...],
"rowCount": 5
}
错误响应:
{
"success": false,
"error": "Error message",
"type": "SqlException"
}
安全注意事项
- 始终使用安全连接字符串
- 尽可能考虑使用Windows身份验证
- 切勿在代码中硬编码密码
- 对连接字符串使用环境变量或安全配置
- 请谨慎使用execute_non_query,因为它可能会修改数据
- 限制MCP服务器使用的SQL Server帐户的权限
- SQL Server 2005:请注意,启用TLS 1.0是为了兼容性,但对于生产使用来说是不安全的
SQL Server版本兼容性
| 版本 | 状态 | 注释 |
|---|---|---|
| SQL Server 2005 | ✅ 完全支持 | 使用 Encrypt=false 在连接字符串中 |
| SQL Server 2008/2008 R2 | ✅ 完全支持 | 使用 TrustServerCertificate=true |
| SQL Server 2012+✅ 完全支持 | 使用 TrustServerCertificate=true |
|
| SQL Server 2016+✅ 完全支持 | 使用 TrustServerCertificate=true |
|
| SQL Server 2019+✅ 完全支持 | 使用 TrustServerCertificate=true |
|
| SQL Server 2022 | ✅ 完全支持 | 使用 TrustServerCertificate=true |
服务器会自动检测SQL server 2005,并调整其查询以实现兼容性。
发展
项目结构
sqlserver-mcp/
├── Program.cs # Main entry point
├── Tools/
│ └── SqlServerTools.cs # MCP tool implementations
├── SqlServerMcp.csproj # Project file
├── .github/
│ └── copilot-instructions.md
└── README.md # This file
添加新工具
要添加新工具,请执行以下操作:
- 添加新方法
SqlServerTools.cs随着[McpServerTool]属性 - 添加一个
[Description]文档属性 - 使用描述性参数名称
[Description]属性 - 返回JSON格式的结果
例子:
[McpServerTool(Name = "my_tool"), Description("Description of what the tool does")]
public static async Task<string> MyTool(
[Description("Parameter description")] string parameter,
CancellationToken cancellationToken = default)
{
// Implementation
}
Visual Studio 2026中的调试
您可以直接在Visual Studio 2026中调试此MCP服务器:
- 在Visual Studio 2026中打开解决方案
- 在代码中设置断点
- 按F5开始调试
- Visual Studio将自动启动MCP服务器
- 使用GitHub Copilot或VS 2026中的其他AI功能连接到您的服务器
- 当AI调用您的SQL Server工具时,断点将被命中
许可证
本项目按原样提供,用于教育和发展目的。