SQL Server数据库查询工具

一个轻量级的MCP服务器,通过HTTP提供安全的只读工具,用于探索Microsoft SQL Server数据库。

  • by HeathLoganCampbell
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 HeathLoganCampbell/SQLServer-MCP

使用说明

SqlServer MCP

一个轻量级的模型上下文协议(MCP)服务器,它公开了安全的、以读取为中心的工具,用于通过HTTP探索Microsoft SQL server数据库。它旨在供MCP兼容的客户端和代理使用。


特性

  • 通过MCP公开SQL Server工具:
    • SqlListTables:列出用户表(schema.table).
    • SqlPreviewTable:预览至 top 表中的行。
    • SqlRunQuery:以只读方式执行 SELECT (以及 WITH CTE)查询。
  • HTTP传输由ASP。NET Core,默认值: http://localhost:3001.
  • 通过配置连接字符串 appsettings.json 或环境变量。

学习内容

将模式表示为GPT的最佳方式?

使用一个markdown文件,可能每个表都有一个

<SCHEMA>
tables:
  Employees:
    columns:
      id: int (PK)
      name: string
      department_id: int (FK → Departments.id)
      status: enum["ACTIVE","INACTIVE"]
</SCHEMA>

模式提示

https://medium.com/@nikunj.agarwal012/模式绘制-革命性的查询数据库方法-b950954cc62

  • 模式提示涉及向语言模型(LLM)提供数据库模式(表、列、类型、关系)的正式描述以及用户的自然语言请求
  • 降低进入门槛-不熟悉SQL的用户或分析师可以通过自然语言查询数据库
  • 加快查询生成速度——与手工编写SQL相比,开发人员和分析师节省了时间。
  1. 模式定义-列出表、列、类型、关系(由开发人员完成)
  2. 用户问题——用户想要什么数据,用自然语言。(由用户完成)
  3. 生成SQL的指令-告诉模型根据模式+问题输出SQL查询。(由法学硕士完成)
  4. 执行SQL-对数据库运行SQL,并用响应响应用户。(由本项目完成)

项目布局

  • SqlServer-MCP/Program.cs:配置web主机,读取连接字符串,注册MCP服务器和工具,映射MCP端点,并在以下位置运行 http://localhost:3001.
  • SqlServer-MCP/SqlServerTools.cs:实现SQL Server的MCP工具(如上所列)。
  • SqlServer-MCP/appsettings.json:保留 ConnectionStrings:SqlServer.
  • SqlServer-MCP/SqlServer-MCP.csproj: .NET项目配置和包引用。

先决条件

  • .NET SDK 9.0 或以后
  • 访问Microsoft SQL Server实例
  • 如果您想通过MCP使用工具,则可以使用MCP兼容的客户端(例如,启用MCP的IDE/代理)

配置

使用以下方法之一设置连接字符串。

  1. appsettings.json (默认)
{
  "ConnectionStrings": {
    "SqlServer": "Server=localhost;Database=YourDb;Trusted_Connection=True;TrustServerCertificate=True;"
  }
}
  1. 环境变量(覆盖文件)
  • 密钥: ConnectionStrings__SqlServer
  • 例子:
    • Windows(PowerShell):
      $env:ConnectionStrings__SqlServer = "Server=localhost;Database=YourDb;User Id=sa;Password=YourPassword;TrustServerCertificate=True;"
      
    • Linux/macOS(bash):
      export ConnectionStrings__SqlServer="Server=localhost;Database=YourDb;User Id=sa;Password=YourPassword;TrustServerCertificate=True;"
      

笔记:

  • 对于具有自签名证书的本地开发人员, TrustServerCertificate=True 可以很方便。
  • 对于Windows集成身份验证,请使用 Trusted_Connection=True.

构建并运行

从存储库根目录:

# Build
dotnet build

# Run (Debug)
dotnet run --project SqlServer-MCP

# Or run on a specific URL
dotnet run --project SqlServer-MCP --urls "http://localhost:3001"

启动时,服务器会监听 http://localhost:3001 并通过HTTP传输公开MCP端点。


使用MCP工具

此服务器旨在供MCP客户端使用。将MCP客户端连接到 http://localhost:3001,您可以调用以下工具:

  • SqlListTables()

    • 说明:列出当前SQL Server数据库中的用户表。
    • 退货: List<string> 喜欢 schema.table.
  • SqlPreviewTable(string tableName, int top = 20)

    • 说明:返回最多 top 给定行 schema.table.
    • 退货: TableResult 随着 Columns 以及行字典的收集。
  • SqlRunQuery(string sql)

    • 说明:执行只读SELECT查询(或 WITH CTE)。非SELECT被阻止。
    • 退货: TableResult 如上所述。

安全说明: SqlRunQuery 故意拒绝非SELECT语句。


故障排除

  • 启动断言: Assertion failed. connString != null

    • 原因:未找到连接字符串。
    • 修复:
      • 确保 appsettings.json 存在并被复制到输出,项目已包含:
        <ItemGroup>
          <Content Include="appsettings.json">
            <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
          </Content>
        </ItemGroup>
        
      • 确认关键路径准确无误 ConnectionStrings → SqlServer.
      • 通过环境变量提供 ConnectionStrings__SqlServer 如果愿意的话。
  • SQL连接错误:

    • 验证服务器主机名/端口、凭据和网络访问。
    • 如果使用容器或远程SQL Server,请确保端口是公开的且可访问的。

包裹

  • ModelContextProtocol 和 ModelContextProtocol.AspNetCore (0.4.1-preview.1)
  • Microsoft.Data.SqlClient (7.0.0-preview2.25289.6)
  • Microsoft.SqlServer.Server (1.0.0)
  • 预览的分页和过滤
  • 安全模板的可选参数化查询支持
  • 附加元数据工具(索引、外键等)