SQL Server数据库查询工具

该服务是一个模型上下文协议(MCP)服务器,为大型语言模型(LLMs)提供查询和检查SQL Server数据库的工具。

  • by Popplywop
  • C#
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 Popplywop/mssql-mcp-server

使用说明

SQL Server MCP服务器

一种模型上下文协议(MCP)服务器,提供与SQL server数据库交互的工具。此服务器允许大型语言模型(LLM)通过标准化协议查询和检查SQL server数据库。

特性

  • 数据库查询:执行SQL查询并检索结果
  • 架构检查:列出表、视图、存储过程,并检查表模式
  • SQL注入防护:内置验证以防止SQL注入攻击
  • 资源缓存:元数据缓存可提高性能

入门指南

先决条件

  • .NET 10.0 SDK或更高版本(或Docker)
  • SQL Server实例(本地或远程)

安装

选项1:Docker(推荐)

使用Docker运行服务器,无需安装。净值:

# Build the image
docker build -t tsql-mcp-server .

# Run with connection string
docker run -i tsql-mcp-server --dsn "Server=host.docker.internal;Database=mydb;User Id=sa;Password=mypassword;TrustServerCertificate=True;"

# Run in read-only mode
docker run -i tsql-mcp-server --dsn "..." --read-only

# Run with environment variable
docker run -i -e SQL_CONNECTION="Server=..." tsql-mcp-server --env-var SQL_CONNECTION

笔记:

  • 这 -i stdio传输需要标志
  • 使用 host.docker.internal 连接到主机上的SQL Server
  • 对于WSL2用户:如果 host.docker.internal 不解决,使用 --network host 和 localhost 相反

选项2:作为安装。NET工具

作为全局安装。NET工具:

dotnet tool install --global tsql-mcp-server

要更新到最新版本:

dotnet tool update --global tsql-mcp-server

选项2:从源代码构建

# Clone the repository
git clone https://github.com/Popplywop/tsql-mcp-server
cd tsql-mcp-server

# Build the project
dotnet build

运行服务器

使用。NET工具

如果作为安装。NET全局工具:

# Using a direct connection string
tsql-mcp-server --dsn "Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"

# Using an environment variable
tsql-mcp-server --env-var "SQL_CONNECTION_STRING"

使用源代码

如果从源构建:

# Using a direct connection string
dotnet run --dsn "Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"

# Using an environment variable
dotnet run --env-var "SQL_CONNECTION_STRING"

MCP服务器配置

要将此服务器与Claude或支持模型上下文协议的其他LLM一起使用,您需要在MCP配置文件中对其进行配置。

如果作为安装。NET工具

{
  "servers": [
    {
      "name": "SqlServerMcp",
      "command": "tsql-mcp-server",
      "args": [
        "--dsn",
        "Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
      ]
    }
  ]
}

如果从源代码构建

{
  "servers": [
    {
      "name": "SqlServerMcp",
      "command": "path/to/tsql-mcp-server.exe",
      "args": [
        "--dsn",
        "Server=your-server;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
      ]
    }
  ]
}

将连接字符串替换为实际值。此配置可用于Claude的MCP集成或支持模型上下文协议的其他LLM平台。

使用Docker

{
  "mcpServers": {
    "sqlserver": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm", "tsql-mcp-server",
        "--dsn", "Server=host.docker.internal;Database=your-database;User Id=your-username;Password=your-password;TrustServerCertificate=True;"
      ]
    }
  }
}

对于只读模式,添加 "--read-only" 到args数组。

使用环境变量处理敏感信息

为了提高安全性,您可以为连接字符串使用环境变量:

{
  "servers": [
    {
      "name": "SqlServerMcp",
      "command": "tsql-mcp-server",
      "args": [
        "--env-var",
        "SQL_CONNECTION_STRING"
      ]
    }
  ]
}

命令行选项

选项 简短 描述
--dsn -d SQL Server连接字符串
--env-var -e 包含连接字符串的环境变量名称
--read-only -r 以只读模式运行(块INSERT、UPDATE、DELETE等)

可用的MCP工具

查询工具

  • 执行查询:对数据库执行SQL查询并返回结果

    • 参数:
      • query:要执行的SQL查询
      • commandTimeout:可选命令超时时间(秒)
      • maxRows:可选择返回的最大行数
  • 执行存储过程:执行具有可选参数的存储过程

    • 参数:
      • schema:架构名称(例如“dbo”)
      • procedureName:存储过程名称
      • parametersJson:可选的JSON参数对象(例如。, {"@param1": "value"})
      • commandTimeout:可选命令超时时间(秒)
      • maxRows:可选择返回的最大行数

架构工具(令牌优化)

用于在不获取数据的情况下探索数据库结构的轻量级工具:

  • GetTableColumns:获取表的列名和类型
  • GetTableRowCount:获取表的行数
  • 列表表格:列出架构中的所有表(带可选行数)
  • 获取主键:获取表的主键列
  • GetSampleData:获取少量数据样本(最多20行)

数据库资源

服务器通过基于资源的方法提供数据库模式信息。资源通过URI访问,并延迟加载缓存以提高性能。

资源URI 描述 加载行为
sqlserver://schemas/{schema_name} 关于特定架构的信息 在第一次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/tables 架构中的表列表 第一次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/views 架构中的视图列表 首次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/procedures 架构中的存储过程列表 第一次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/tables/{table_name} 特定表的详细信息 第一次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/views/{view_name} 查看列(定义除外) 首次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/views/{view_name}/definition 查看SQL定义 根据请求加载
sqlserver://schemas/{schema_name}/procedures/{procedure_name} 过程参数(定义除外) 第一次请求时加载,缓存10分钟
sqlserver://schemas/{schema_name}/procedures/{procedure_name}/definition 过程SQL定义 根据请求加载

注: 默认情况下,视图和过程定义被排除在外,以减少令牌的使用。使用 /definition 端点,当您需要SQL源代码时。

资源由MCP客户端自动发现,可以直接访问,无需特定的工具调用。

安全注意事项

  • 使用具有适当权限的SQL Server帐户(最小权限原则)
  • 安全地存储连接字符串(不在源代码管理中)
  • 考虑对连接字符串使用环境变量
  • 为数据库连接启用TLS/SSL
  • SQL注入验证可防止危险操作,并防止常见的攻击媒介

示例用法

查询数据

ExecuteQuery:
  query: "SELECT TOP 10 * FROM MyTable"
  maxRows: 100

访问数据库资源

资源可以通过其URI直接访问:

# List all schemas
GET sqlserver://schemas

# Get information about a specific schema
GET sqlserver://schemas/dbo

# List all tables in a schema
GET sqlserver://schemas/dbo/tables

# Get detailed information about a specific table
GET sqlserver://schemas/dbo/tables/Customers

基于资源的方法提供了一种RESTful方式来探索数据库模式并与之交互。

许可证

该项目根据 MIT许可证 -看看 许可证.md 文件以获取详细信息。

MIT许可证是一种允许在最小限制下重用的许可证。它允许任何人使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,前提是所有副本中都显示原始版权声明和许可声明。