关于 SQL Server MCP Server for Windsurf IDE
这是一个用 C# 编写的独立 MCP 服务,为任何兼容 MCP 的 IDE 或客户端提供 SQL Server 集成能力。它面向需要在编辑器内查看数据库结构并执行查询的开发者。其特点是可根据当前编辑文件动态解析数据库连接字符串。
主要功能
- 01SQL Server 连接与数据库结构浏览
- 02表、视图及列元数据查询
- 03存储过程枚举、定义查看与执行
- 04SQL 查询执行
- 05根据当前文件路径动态覆盖连接字符串
- 06调试模式与可配置日志路径
适用场景
- 01在 Windsurf 等 IDE 中浏览表结构和列信息
- 02在编辑器内执行 SQL 查询并查看结果
- 03在多项目工作区中为不同子项目使用不同数据库连接
MCP 相关
该项目是 MCP 服务,通过标准输入输出以 JSON-RPC 2.0 协议向 MCP 客户端暴露数据库相关工具,如 get_databases、get_tables、execute_database_query 等。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SQL Server MCP 服务
一个使用 C# 编写的独立 MCP(Model Context Protocol)服务,可为任何兼容 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 init在项目目录中初始化新的 Git 仓库 - 使用
git remote add origin <repository-url>将 GitHub 仓库添加为远程仓库 - 使用
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 Model Context Protocol 进行通信。
请求格式(tools/call)
{
"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设置指定的文件
贡献
欢迎贡献!欢迎提交 Pull Request。
- Fork 此代码仓库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交更改(
git commit -m 'Add some amazing feature') - 推送到该分支(
git push origin feature/amazing-feature) - 创建 Pull Request
许可证
本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。
错误处理
常见错误代码:
invalid_request:JSON 格式错误或缺少必需字段connection_failed:连接 SQL Server 失败missing_parameter:未提供必需参数query_execution_error:执行 SQL 查询时出错database_not_found:指定的数据库不存在table_not_found:指定的表不存在
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。