使用说明
MSSQL MCP服务器
Microsoft SQL server的模型上下文协议(MCP)服务器实现。该服务器使像Claude这样的人工智能助手能够通过标准化的界面与MSSQL数据库进行交互。
特性
- 🚀 执行SQL查询:运行任何具有适当错误处理和结果格式的SQL查询
- 📊 浏览数据库架构:列出表、查看表结构和示例数据
- 🔧 多行查询支持:正确处理带有换行符、注释和GO语句的查询
- 🔐 灵活的身份验证:支持Windows(受信任)和SQL身份验证
- ⚙️ 环境配置:通过环境变量轻松设置
- 🛡️ 安全:连接字符串加密、证书信任选项和安全凭据处理
安装
来自PyPI
pip install mssql-mcp-server-enhanced
来源
git clone https://github.com/combiz/mssql-mcp-server.git
cd mssql-mcp-server
pip install -e .
先决条件
-
Python 3.8+
-
SQL Server的ODBC驱动程序 -安装以下之一:
安装命令:
# Ubuntu/Debian curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add - curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list sudo apt-get update sudo apt-get install -y msodbcsql17 # macOS brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release brew update brew install msodbcsql17 # Windows - Download installer from Microsoft
配置
使用环境变量配置服务器:
必需变量
MSSQL_DATABASE-要连接的数据库名称
连接变量
MSSQL_HOST或MSSQL_SERVER-服务器主机名(默认值:localhost)MSSQL_PORT-服务器端口(默认值:1433)
身份验证变量
对于SQL身份验证:
MSSQL_USER-用户名MSSQL_PASSWORD-密码MSSQL_TRUSTED_CONNECTION-设置为no(默认值:no)
对于Windows身份验证:
MSSQL_TRUSTED_CONNECTION-设置为yes- 无需用户名/密码
可选变量
MSSQL_DRIVER-ODBC驱动程序名称(默认值:ODBC Driver 17 for SQL Server)MSSQL_TRUST_SERVER_CERTIFICATE-信任服务器证书(默认值:yes)MSSQL_ENCRYPT-加密连接(默认值:yes)MSSQL_CONNECTION_TIMEOUT-连接超时(秒)(默认值:30)MSSQL_MULTI_SUBNET_FAILOVER-启用多子网故障切换(默认值:no)
用法
作为独立服务器
# Set environment variables
export MSSQL_SERVER=your-server.database.windows.net
export MSSQL_DATABASE=your-database
export MSSQL_USER=your-username
export MSSQL_PASSWORD=your-password
# Run the server
python -m mssql_mcp_server.server
与MCP兼容的客户端
添加到MCP配置文件中:
克劳德桌面:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json
克劳德代码:有关配置位置,请参阅Claude Code文档
光标:添加到光标MCP设置
{
"mcpServers": {
"mssql": {
"command": "python",
"args": ["-m", "mssql_mcp_server.server"],
"env": {
"MSSQL_SERVER": "your-server.database.windows.net",
"MSSQL_DATABASE": "your-database",
"MSSQL_USER": "your-username",
"MSSQL_PASSWORD": "your-password"
}
}
}
}
示例配置
Azure SQL数据库
export MSSQL_SERVER=myserver.database.windows.net
export MSSQL_DATABASE=mydatabase
export MSSQL_USER=myuser@myserver
export MSSQL_PASSWORD=mypassword
export MSSQL_ENCRYPT=yes
export MSSQL_TRUST_SERVER_CERTIFICATE=no
具有Windows身份验证的本地SQL Server
export MSSQL_SERVER=localhost
export MSSQL_DATABASE=mydatabase
export MSSQL_TRUSTED_CONNECTION=yes
非标准端口上的SQL Server
export MSSQL_SERVER=myserver.company.com
export MSSQL_PORT=1434
export MSSQL_DATABASE=mydatabase
export MSSQL_USER=sa
export MSSQL_PASSWORD=mypassword
虚拟环境下的MCP配置
适用于Claude Desktop、Claude Code、Cursor或任何兼容MCP的客户端。如果您使用的是Python虚拟环境,请指定Python可执行文件的完整路径:
{
"mcpServers": {
"mssql": {
"command": "/path/to/your/venv/bin/python",
"args": ["-m", "mssql_mcp_server.server"],
"env": {
"MSSQL_SERVER": "your-server-name",
"MSSQL_DATABASE": "your-database",
"MSSQL_DRIVER": "ODBC Driver 17 for SQL Server",
"MSSQL_TRUST_SERVER_CERTIFICATE": "yes",
"MSSQL_TRUSTED_CONNECTION": "yes",
"MSSQL_ENCRYPT": "yes",
"MSSQL_CONNECTION_TIMEOUT": "60",
"MSSQL_PORT": "1433"
}
}
}
}
可用工具
execute_sql
在连接的数据库上执行任何SQL查询。
参数:
query(string,必填):要执行的SQL查询
示例:
-- Simple SELECT
SELECT * FROM Users WHERE active = 1
-- Multi-line query with JOIN
SELECT
u.username,
u.email,
COUNT(o.id) as order_count
FROM Users u
LEFT JOIN Orders o ON u.id = o.user_id
GROUP BY u.username, u.email
HAVING COUNT(o.id) > 5
-- Create table
CREATE TABLE Products (
id INT PRIMARY KEY IDENTITY(1,1),
name NVARCHAR(100) NOT NULL,
price DECIMAL(10,2),
created_at DATETIME DEFAULT GETDATE()
)
-- Insert data
INSERT INTO Products (name, price)
VALUES ('Widget', 19.99), ('Gadget', 29.99)
可用资源
服务器将数据库表作为资源公开:
-
架构资源:
mssql://database/schema.table/schema- 显示表结构、列类型、约束
-
数据资源:
mssql://database/schema.table/data- 显示表中的示例数据(限制为100行)
查询预处理
服务器自动处理:
- ✅ 具有正确换行处理的多行查询
- ✅ SQL注释(两者
--和/* */样式) - ✅ GO批处理分隔符(仅在有警告的情况下执行第一批)
- ✅ 内嵌换行符的字符串文字
- ✅ 过多的空白清理
错误处理
服务器为以下对象提供详细的错误消息:
- 连接失败
- 身份验证错误
- SQL语法错误
- 查询执行错误
- 配置无效
安全考虑
- 凭证:使用环境变量或安全凭据存储。永远不要硬编码凭据。
- 权限:使用具有最低所需权限的数据库用户。
- 连接加密:启用
MSSQL_ENCRYPT对于生产环境。 - 证书验证:设置
MSSQL_TRUST_SERVER_CERTIFICATE=no用于生产。 - 查询验证:服务器按原样执行查询。请确保在数据库级别进行适当的访问控制。
发展
运行测试
pip install -e ".[dev]"
pytest
代码格式化
black mssql_mcp_server
flake8 mssql_mcp_server
mypy mssql_mcp_server
故障排除
连接问题
-
“找不到SQL Server的ODBC驱动程序X”
- 安装ODBC驱动程序(请参阅先决条件)
- 更新
MSSQL_DRIVER以匹配您安装的驱动程序
-
“用户登录失败”
- 验证凭据
- 检查服务器上是否启用了SQL身份验证
- 对于Azure SQL,请确保用户名包含服务器名称:
user@server
-
“无法打开登录请求的服务器”
- 验证服务器名称/地址
- 检查防火墙规则
- 确保SQL Server正在接受TCP/IP连接
查询问题
-
“‘GO’附近的语法不正确”
- 服务器通过仅执行第一批来处理GO语句
- 将多批处理脚本拆分为单独的查询
-
挂起查询
- 检查未关闭的交易记录
- 验证查询中没有与换行符相关的语法错误
- 通过以下方式监控查询执行时间
MSSQL_CONNECTION_TIMEOUT
贡献
欢迎投稿!拜托:
- 分叉存储库
- 创建要素分支
- 添加新功能的测试
- 确保所有测试通过
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件