mcpField
S
SQL Server MCP Server for Windsurf IDE

SQL Server MCP Server for Windsurf IDE

本地服务
github.com/ian-cowley数据库1920 周前更新

关于 SQL Server MCP Server for Windsurf IDE

这是一个用 C# 编写的独立 MCP 服务,为任何兼容 MCP 的 IDE 或客户端提供 SQL Server 集成能力。它面向需要在编辑器内查看数据库结构并执行查询的开发者。其特点是可根据当前编辑文件动态解析数据库连接字符串。

主要功能

  1. 01SQL Server 连接与数据库结构浏览
  2. 02表、视图及列元数据查询
  3. 03存储过程枚举、定义查看与执行
  4. 04SQL 查询执行
  5. 05根据当前文件路径动态覆盖连接字符串
  6. 06调试模式与可配置日志路径

适用场景

  1. 01在 Windsurf 等 IDE 中浏览表结构和列信息
  2. 02在编辑器内执行 SQL 查询并查看结果
  3. 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 客户端工具

设置

  1. 构建项目:
dotnet build
  1. 配置应用程序:

    • 将 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"
    }
    
  2. 在 IDE / 客户端中配置 MCP 服务:

    • 将服务配置添加到 IDE 的 MCP 配置文件中(例如 Windsurf、Claude Desktop 配置或 Cline/Cursor 设置)。
    • 将命令指向已构建可执行文件的路径:
    {
      "mcpServers": {
        "sqlMcpService": {
          "command": "path/to/your/MCPSqlServer.exe",
          "args": [],
          "description": "SQL Server MCP Service"
        }
      }
    }
    
  3. 设置 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")

动态项目连接解析器

在包含多个项目的工作区中,不同文件夹或子项目可能连接到不同的数据库。你可以使用以下方式,避免频繁更新主配置:

  1. 所有数据库工具都接受可选的 currentFilePath 参数(通常由 IDE 客户端自动填入活动文件的路径)。
  2. 服务会从文件所在目录开始沿目录树向上查找最近的 appsettings.json。
  3. 如果找到该文件,服务会动态提取并使用其中的 ConnectionStrings:DefaultConnection 执行查询。
  4. 如果未找到配置文件,或 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)中使用,以便:

  1. 浏览数据库架构
  2. 执行 SQL 查询并查看结果
  3. 获取表名和列名的代码补全
  4. 运行存储过程
  5. 生成 SQL 代码片段
  6. 分析数据库结构

代码结构

应用由以下组件组成:

  • Program.cs:主入口点和请求处理
  • JsonRpcHandler.cs:处理 JSON-RPC 协议并分派请求
  • 从 appsettings.json 加载配置
  • 日志写入 LogPath 设置指定的文件

贡献

欢迎贡献!欢迎提交 Pull Request。

  1. Fork 此代码仓库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交更改(git commit -m 'Add some amazing feature')
  4. 推送到该分支(git push origin feature/amazing-feature)
  5. 创建 Pull Request

许可证

本项目采用 MIT 许可证,详情请参阅 LICENSE 文件。

错误处理

常见错误代码:

  • invalid_request:JSON 格式错误或缺少必需字段
  • connection_failed:连接 SQL Server 失败
  • missing_parameter:未提供必需参数
  • query_execution_error:执行 SQL 查询时出错
  • database_not_found:指定的数据库不存在
  • table_not_found:指定的表不存在

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。