SQL Server MCP 服务器

一个独立的 MCP 服务器,提供 SQL Server 集成能力,适用于任何符合 MCP 标准的 IDE 或客户端。

  • by ian-cowley
  • C#
  • 本地部署
  • 19 星标
  • 更新于
在 GitHub 查看 ian-cowley/MCPSqlServer

使用说明

SQL Server MCP服务器

用C#编写的独立MCP(模型上下文协议)服务器,为任何符合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存储库 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”)

动态项目连接解析程序

在多项目工作区中,不同的文件夹或子项目连接到不同的数据库,您可以避免不断更新主配置:

  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模型上下文协议通过标准输入/输出进行通信。

请求格式(工具/调用)

{
  "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 设置

贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

错误处理

常见错误代码:

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