使用说明
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
笔记:
- 这
-istdio传输需要标志 - 使用
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许可证是一种允许在最小限制下重用的许可证。它允许任何人使用、复制、修改、合并、发布、分发、再许可和/或出售软件的副本,前提是所有副本中都显示原始版权声明和许可声明。