一个安全且生产就绪的MCP(模型上下文协议)服务器,用于SQL Server数据库的检查和查询,设计用于与Claude Desktop和Claude Code无缝集成。
sys_*,*_audit等)list_tables:列出所有可访问的表及其指标(行数、大小)describe_table:显示完整的表结构及样本数据execute_query:执行安全的SELECT查询并设置超时时间get_table_relationships:分析外键关系选项1:自动安装(推荐)
Windows:
git clone https://github.com/Attilio81/MCP-Sql-Server.git
cd MCP-Sql-Server
setup.bat
Linux/macOS:
git clone https://github.com/Attilio81/MCP-Sql-Server.git
cd MCP-Sql-Server
chmod +x setup.sh
./setup.sh
选项2:手动安装
# 克隆仓库
git clone https://github.com/Attilio81/MCP-Sql-Server.git
cd MCP-Sql-Server
# 安装包
pip install -e .
# 配置环境
cp .env.example .env
# 编辑.env文件,填写您的凭据
# 测试连接
python test_connection.py
从Microsoft下载
或者通过Chocolatey安装:
choco install sqlserver-odbcdriver
</details>
<details>
<summary><b>Linux (Ubuntu/Debian)</b></summary>
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 ACCEPT_EULA=Y apt-get install -y msodbcsql17
</details>
<details>
<summary><b>macOS</b></summary>
brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
brew update
brew install msodbcsql1
</details>
在项目根目录创建一个.env文件:
# 连接字符串
SQL_CONNECTION_STRING=Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=MyDB;UID=user;PWD=password
# 安全限制
MAX_ROWS=100
QUERY_TIMEOUT=30
# 连接池
POOL_SIZE=5
POOL_TIMEOUT=30
# 安全:表黑名单(支持通配符)
BLACKLIST_TABLES=sys_*,*_audit,*_temp,internal_*
# 安全:模式白名单(空表示允许所有)
ALLOWED_SCHEMAS=dbo,sales,hr
# 日志
LOG_LEVEL=INFO
添加到claude_desktop_config.json:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"sqlserver": {
"command": "python",
"args": ["-m", "mcp_sqlserver.server"],
"env": {
"SQL_CONNECTION_STRING": "Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=MyDB;UID=user;PWD=password",
"MAX_ROWS": "100",
"QUERY_TIMEOUT": "30",
"BLACKLIST_TABLES": "sys_*,*_audit",
"ALLOWED_SCHEMAS": "dbo",
"LOG_LEVEL": "INFO"
}
}
}
}
重启Claude Desktop以加载MCP服务器。
在项目目录中创建.claude/mcp.json:
{
"mcpServers": {
"sqlserver": {
"command": "python",
"args": ["-m", "mcp_sqlserver.server"],
"env": {
"SQL_CONNECTION_STRING": "Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=MyDB;UID=user;PWD=password"
}
}
}
}
参见CLAUDE_CODE_USAGE.md了解详细的Claude Code集成指南。
配置完成后,可以向Claude提问:
# 在项目目录启动Claude Code
cd your-project
claude
# 然后提问:
"使用MCP SQL Server列出数据库中的所有表"
"分析Users表的结构并生成SQLAlchemy模型"
"查找Orders表中2024年的所有记录并生成摘要"
list_tables列出所有可访问的表及其指标。
参数:
schema_filter(可选):按特定模式过滤示例:
列出sales模式下的所有表
describe_table显示完整的表结构,可选提供样本数据。
参数:
table_name(必需):表名(格式:schema.table或table)sample_rows(可选):样本行数(默认:10,最大:50)示例:
描述dbo.Users表,并提供5条样本数据
execute_query执行带有安全检查的SELECT查询。
参数:
query(必需):SQL SELECT查询示例:
执行:SELECT TOP 20 * FROM Products WHERE Price > 100
get_table_relationships显示表的外键关系。
参数:
table_name(必需):表名示例:
展示OrderDetails表的关系
推荐:使用Windows身份验证(仅限Windows)
SQL_CONNECTION_STRING=Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=MyDB;Trusted_Connection=yes
Azure SQL与AAD:
SQL_CONNECTION_STRING=Driver={ODBC Driver 17 for SQL Server};Server=myserver.database.windows.net;Database=MyDB;Authentication=ActiveDirectoryInteractive
支持通配符进行模式匹配:
# 阻止特定表
BLACKLIST_TABLES=sys_logs,audit_trail
# 阻止模式
BLACKLIST_TABLES=sys_*,*_temp,internal_*
# 按模式阻止
BLACKLIST_TABLES=dbo.sensitive_*,admin.*
限制对特定模式的访问:
# 仅允许这些模式
ALLOWED_SCHEMAS=dbo,sales,hr
# 空表示允许所有模式
ALLOWED_SCHEMAS=
服务器会自动阻止:
--,/* */)xp_cmdshell,sp_executesql).env文件已加入.gitignoreLOG_LEVEL=INFO或DEBUG以便监控MAX_ROWS和QUERY_TIMEOUT参见SECURITY.md了解详细的网络安全指南。
POOL_SIZE(默认:5)多层次验证:
分层错误管理:
TimeoutError:连接池耗尽或查询缓慢pyodbc.Error:数据库特定错误(连接、语法、权限)Exception:通用异常,带完整堆栈跟踪日志python test_connection.py
运行6个自动化测试:
# 测试服务器启动(应等待标准输入)
python -m mcp_sqlserver.server
# 使用MCP Inspector测试(需要Node.js)
npx @modelcontextprotocol/inspector python -m mcp_sqlserver.server
解决方案:验证ODBC驱动程序是否已安装:
python -c "import pyodbc; print(pyodbc.drivers())"
更新连接字符串以使用正确的驱动程序名称(例如,ODBC Driver 18 for SQL Server)。
解决方案:增加.env中的池设置:
POOL_SIZE=10
POOL_TIMEOUT=60
解决方案:将模式添加到白名单:
ALLOWED_SCHEMAS=dbo,xyz
为了详细故障排除:
LOG_LEVEL=DEBUG
在Claude Desktop中查看日志:帮助 → 显示日志
mcp-sqlserver/
├── src/mcp_sqlserver/
│ ├── __init__.py
│ └── server.py # 主MCP服务器实现
├── tests/ # 单元测试(待完成)
├── .env.example # 环境模板
├── pyproject.toml # 包配置
├── README.md # 此文件
├── CLAUDE_CODE_USAGE.md # Claude Code集成指南
├── SECURITY.md # 安全最佳实践
├── CONTRIBUTING.md # 贡献指南
├── LICENSE # MIT许可证
└── test_connection.py # 连接测试脚本
# 安装开发依赖
pip install pytest pytest-asyncio
# 运行测试
pytest tests/
# 代码检查
pip install ruff
ruff check src/
# 代码格式化
ruff format src/
欢迎贡献!请阅读CONTRIBUTING.md了解指南。
# 克隆仓库
git clone https://github.com/Attilio81/MCP-Sql-Server.git
cd MCP-Sql-Server
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # Linux/macOS
# 或
venv\Scripts\activate # Windows
# 安装开发依赖
pip install -e ".[dev]"
# 安装预提交钩子
pre-commit install
本项目采用MIT许可证 - 详情请参阅LICENSE文件。
为Claude社区制作,充满爱心