关于 SQL Server MCP Server
SQL Server MCP Server 通过 MCP 向 LLM 提供 SQL Server 查询和结构检查能力,适用于数据库用户及 Agent 工作流。它结合查询工具、缓存的结构资源和 SQL 注入校验。
主要功能
- 01执行 SQL 查询和存储过程
- 02检查表、视图和存储过程
- 03获取列、主键和样例数据
- 04缓存结构元数据
- 05校验并防范 SQL 注入
适用场景
- 01通过 LLM 查询 SQL Server 数据
- 02查询前探索数据库结构
- 03传入参数执行存储过程
MCP 相关
它通过 MCP 提供查询、存储过程和结构检查工具,并提供可通过 URI 访问的数据库资源。MCP 客户端可自动发现并直接访问这些资源。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
SQL Server MCP 服务
一个用于与 SQL Server 数据库交互的模型上下文协议(MCP)服务。该服务支持大语言模型(LLM)通过标准化协议查询和检查 SQL Server 数据库。
功能
- 数据库查询:执行 SQL 查询并获取结果
- 架构检查:列出表、视图、存储过程,并检查表架构
- 防止 SQL 注入:内置验证机制,防止 SQL 注入攻击
- 资源缓存:缓存元数据以提升性能
入门指南
先决条件
- .NET 10.0 SDK 或更高版本(或 Docker)
- SQL Server 实例(本地或远程)
安装
选项 1:Docker(推荐)
无需安装 .NET,即可使用 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
注意:
- stdio 传输必须使用
-i标志 - 使用
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 或其他支持模型上下文协议的大模型配合使用,需要在 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 集成,也可用于其他支持模型上下文协议的大模型平台。
使用 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;"
]
}
}
}
要启用只读模式,请在 args 数组中添加 "--read-only"。
使用环境变量存储敏感信息
为了提高安全性,可以使用环境变量存储连接字符串:
{
"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 工具
查询工具
-
ExecuteQuery:对数据库执行 SQL 查询并返回结果
- 参数:
query:要执行的 SQL 查询commandTimeout:可选,命令超时时间(秒)maxRows:可选,返回的最大行数
- 参数:
-
ExecuteStoredProcedure:执行存储过程,可选传入参数
- 参数:
schema:架构名称(例如,'dbo')procedureName:存储过程名称parametersJson:可选,参数 JSON 对象(例如,{"@param1": "value"})commandTimeout:可选,命令超时时间(秒)maxRows:可选,返回的最大行数
- 参数:
架构工具(针对令牌优化)
用于探索数据库结构而不获取数据的轻量级工具:
- GetTableColumns:获取表的列名和类型
- GetTableRowCount:获取表的行数
- ListTables:列出架构中的所有表(可选包含行数)
- GetPrimaryKey:获取表的主键列
- 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 定义 | 收到请求时加载 |
注意: 默认不包含视图和过程的定义,以减少令牌用量。需要 SQL 源代码时,请使用 /definition 端点。
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 License 许可,详情请参阅 LICENSE.md 文件。
MIT License 是一种限制极少的许可,允许重复使用。任何人都可以使用、复制、修改、合并、发布、分发、再许可和/或销售本软件的副本,但所有副本都必须包含原始版权声明和许可声明。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。