MSSQL MCP服务器
一种模型上下文协议(MCP)服务器,提供对Microsoft SQL server数据库的全面访问。这个增强的服务器使语言模型能够通过标准化的接口检查数据库模式、执行查询、管理数据库对象和执行高级数据库操作。
🚀 增强功能
完成数据库架构遍历
- 23个全面的数据库管理工具 (从5个基本操作扩展)
- 完整的数据库对象层次结构探索 -表、视图、存储过程、索引、模式
- 高级数据库对象管理 -创建、修改、删除操作
- 智能资源访问 -所有可用作MCP资源的表和视图
- 大型内容处理 -在不截断的情况下检索完整的存储过程(1400+行)
核心能力
- 数据库连接:通过灵活的身份验证连接到MSSQL Server实例
- 架构检查:完成数据库对象探索和管理
- 查询执行:执行SELECT、INSERT、UPDATE、DELETE和DDL查询
- 存储过程管理:创建、修改、执行和管理存储过程
- 视图管理:创建、修改、删除和描述视图
- 索引管理:创建、删除和分析索引
- 资源访问:将表和数据作为MCP资源浏览
- 安全:只读和写入操作已正确分离和验证
⚠️ 工程团队重要使用指南
数据库限制
🔴 关键:每个MCP服务器实例限制为一个数据库
- 此增强的MCP服务器创建 每个数据库23个工具
- 光标有一个 40刀具限制 跨所有MCP服务器
- 使用多个数据库实例将超过Cursor的工具限制
- 对于多个数据库,在不同的项目中使用单独的MCP服务器实例
大内容限制
⚠️ 重要提示:聊天环境中不支持文件操作
- 可以在聊天中检索和查看大型存储过程(1400多行)
- 然而,由于令牌限制,通过MCP工具将大量内容保存到文件是不可靠的
- 用于批量数据提取:使用具有直接数据库连接的独立Python脚本
- 推荐方法:从聊天中复制粘贴较小的程序,对较大的程序使用外部脚本
工具分发
- 核心工具:5(read_query、write_query、list_tables、describe_table、create_table)
- 存储过程:6个工具(创建、修改、删除、列出、描述、执行、获取参数)
- 视图:5个工具(创建、修改、删除、列出、描述)
- 索引:4个工具(创建、删除、列出、描述)
- 模式管理:2个工具(list_schemas、list_all_objects)
- 总计:23个工具+增强的write_query,支持所有数据库对象操作
安装
先决条件
- Python 3.10或更高版本
- SQL Server的ODBC驱动程序17
- 访问MSSQL服务器实例
快速设置
- 克隆或创建项目目录:
mkdir mcp-sqlserver && cd mcp-sqlserver- 运行安装脚本:
chmod +x install.sh
./install.sh- 配置数据库连接:
cp env.example .env
# Edit .env with your database details手动安装
- 创建虚拟环境:
python3 -m venv venv
source venv/bin/activate- 安装依赖项:
pip install -r requirements.txt- 安装ODBC驱动程序(macOS):
brew tap microsoft/mssql-release
brew install msodbcsql17 mssql-tools配置
创建一个 .env 包含数据库配置的文件:
MSSQL_DRIVER={ODBC Driver 17 for SQL Server}
MSSQL_SERVER=your-server-address
MSSQL_DATABASE=your-database-name
MSSQL_USER=your-username
MSSQL_PASSWORD=your-password
MSSQL_PORT=1433
TrustServerCertificate=yes配置选项
MSSQL_SERVER:服务器主机名或IP地址(必填)MSSQL_DATABASE:要连接的数据库名称(必需)MSSQL_USER:身份验证用户名MSSQL_PASSWORD:身份验证密码MSSQL_PORT:端口号(默认值:1433)MSSQL_DRIVER:ODBC驱动程序名称(默认值:{SQL Server的ODBC驱动程序17})TrustServerCertificate:信任服务器证书(默认:是)Trusted_Connection:使用Windows身份验证(默认:否)
用法
了解MCP服务器
MCP(模型上下文协议)服务器旨在与AI助手和语言模型协同工作。它们使用JSON-RPC协议通过stdin/stdout进行通信,而不是传统的web服务。
运行服务器
对于AI助手集成:
python3 src/server.py服务器将启动并等待stdin上的MCP协议消息。这就是像Claude Desktop或其他MCP客户端这样的AI助手将如何与之通信。
测试和开发:
- 测试数据库连接:
python3 test_connection.py- 检查服务器状态:
./status.sh- 查看可用表格:
# The server provides tools that can be called by MCP clients
# Direct testing requires an MCP client or testing framework可用工具(共23个)
增强型服务器提供全面的数据库管理工具:
核心数据库操作(5个工具)
read_query-执行SELECT查询以读取数据write_query-执行INSERT、UPDATE、DELETE和DDL查询list_tables-列出数据库中的所有表describe_table-获取特定表的架构信息create_table-创建新表
存储过程管理(6个工具)
create_procedure-创建新的存储过程modify_procedure-修改现有存储过程delete_procedure-删除存储过程list_procedures-列出所有包含元数据的存储过程describe_procedure-获取完整的程序定义execute_procedure-使用参数执行程序get_procedure_parameters-获取详细的参数信息
视图管理(5个工具)
create_view-创建新视图modify_view-修改现有视图delete_view-删除视图list_views-列出数据库中的所有视图describe_view-获取视图定义和架构
索引管理(4个工具)
create_index-创建新索引delete_index-删除索引list_indexes-列出所有索引(可选按表)describe_index-获取详细的索引信息
模式探索(2个工具)
list_schemas-列出数据库中的所有架构list_all_objects-列出按架构组织的所有数据库对象
可用资源
表和视图都以MCP资源的形式公开,URI如下:
mssql://table_name/data-访问CSV格式的表数据mssql://view_name/data-访问CSV格式的视图数据
资源以CSV格式提供前100行数据,用于快速数据探索。
数据库模式遍历示例
1.探索数据库结构
# Start with schemas
list_schemas
# Get all objects in a specific schema
list_all_objects(schema_name: "dbo")
# Or get all objects across all schemas
list_all_objects()2.表勘探
# List all tables
list_tables
# Get detailed table information
describe_table(table_name: "YourTableName")
# Access table data as MCP resource
# URI: mssql://YourTableName/data3.视图管理
# List all views
list_views
# Get view definition
describe_view(view_name: "YourViewName")
# Create a new view
create_view(view_script: "CREATE VIEW MyView AS SELECT * FROM MyTable WHERE Active = 1")
# Access view data as MCP resource
# URI: mssql://YourViewName/data4.存储过程操作
# List all procedures
list_procedures
# Get complete procedure definition (handles large procedures like wmPostPurchase)
describe_procedure(procedure_name: "YourProcedureName")
# Save large procedures to file for analysis
write_file(file_path: "procedure_name.sql", content: "procedure_definition")
# Get parameter details
get_procedure_parameters(procedure_name: "YourProcedureName")
# Execute procedure
execute_procedure(procedure_name: "YourProcedureName", parameters: ["param1", "param2"])5.指标管理
# List all indexes
list_indexes()
# List indexes for specific table
list_indexes(table_name: "YourTableName")
# Get index details
describe_index(index_name: "IX_YourIndex", table_name: "YourTableName")
# Create new index
create_index(index_script: "CREATE INDEX IX_NewIndex ON MyTable (Column1, Column2)")存储过程管理示例
创建简单存储过程
CREATE PROCEDURE GetEmployeeCount
AS
BEGIN
SELECT COUNT(*) AS TotalEmployees FROM Employees
END创建带有参数的存储过程
CREATE PROCEDURE GetEmployeesByDepartment
@DepartmentId INT,
@MinSalary DECIMAL(10,2) = 0
AS
BEGIN
SELECT
EmployeeId,
FirstName,
LastName,
Salary,
DepartmentId
FROM Employees
WHERE DepartmentId = @DepartmentId
AND Salary >= @MinSalary
ORDER BY LastName, FirstName
END创建具有输出参数的存储过程
CREATE PROCEDURE GetDepartmentStats
@DepartmentId INT,
@EmployeeCount INT OUTPUT,
@AverageSalary DECIMAL(10,2) OUTPUT
AS
BEGIN
SELECT
@EmployeeCount = COUNT(*),
@AverageSalary = AVG(Salary)
FROM Employees
WHERE DepartmentId = @DepartmentId
END修改现有存储过程
ALTER PROCEDURE GetEmployeesByDepartment
@DepartmentId INT,
@MinSalary DECIMAL(10,2) = 0,
@MaxSalary DECIMAL(10,2) = 999999.99
AS
BEGIN
SELECT
EmployeeId,
FirstName,
LastName,
Salary,
DepartmentId,
HireDate
FROM Employees
WHERE DepartmentId = @DepartmentId
AND Salary BETWEEN @MinSalary AND @MaxSalary
ORDER BY Salary DESC, LastName, FirstName
END大型内容处理
运作原理
服务器高效地处理大型数据库对象,如存储过程:
- 直接检索:直接从SQL Server获取完整内容
- 无截断:返回完整的过程定义,无论大小如何
- 聊天显示:大型程序可以在聊天界面中完整查看
- 内存效率高:通过数据库连接流处理内容
使用示例
# Describe a large procedure (gets complete definition)
describe_procedure(procedure_name: "wmPostPurchase")
# Works with procedures of any size (tested with 1400+ line procedures)
# Content is displayed in chat for viewing and copy-paste operations文件操作的限制
⚠️ 重要:虽然可以在聊天中检索和显示大型程序,但由于推理令牌的限制,通过MCP工具将它们保存到文件中是不可靠的。对于批量数据提取:
- 小程序:从聊天界面复制粘贴
- 大型程序:使用具有直接数据库连接的独立Python脚本
- 批量操作:在MCP上下文之外创建专用提取脚本
与AI助手集成
克劳德桌面
将此服务器添加到您的Claude Desktop配置中:
{
"mcpServers": {
"mssql": {
"command": "python3",
"args": ["/path/to/mcp-sqlserver/src/server.py"],
"cwd": "/path/to/mcp-sqlserver",
"env": {
"MSSQL_SERVER": "your-server",
"MSSQL_DATABASE": "your-database",
"MSSQL_USER": "your-username",
"MSSQL_PASSWORD": "your-password"
}
}
}
}其他MCP客户端
服务器遵循标准MCP协议,应与任何兼容的MCP客户端一起工作。
发展
项目结构
mcp-sqlserver/
├── src/
│ └── server.py # Main MCP server implementation with chunking system
├── tests/
│ └── test_server.py # Unit tests
├── requirements.txt # Python dependencies
├── .env # Database configuration (create from env.example)
├── env.example # Configuration template
├── install.sh # Installation script
├── start.sh # Server startup script (for development)
├── stop.sh # Server shutdown script
├── status.sh # Server status script
└── README.md # This file测试
运行测试套件:
python -m pytest tests/测试数据库连接:
python3 test_connection.py日志记录
服务器使用Python的日志模块。通过修改日志级别来设置日志级别 logging.basicConfig() 打电话 src/server.py.
安全考虑
- 认证:始终使用强密码和安全身份验证
- 网络:确保您的数据库服务器得到适当保护
- 权限:仅向用户帐户授予必要的数据库权限
- SSL/TLS:尽可能使用加密连接
- 查询验证:服务器验证查询类型并防止未经授权的操作
- DDL操作:数据库对象的创建/修改/删除操作已正确验证
- 存储过程执行:安全处理参数以防止注射攻击
- 大型内容处理:无需截断即可高效检索大型程序
- 文件操作:写入操作已验证并沙盒化
- 阅读第一种方法:出于安全生产考虑,勘探工具默认为只读
故障排除
常见问题
- 连接失败:检查数据库服务器地址、凭据和网络连接
- 未找到ODBC驱动程序:安装SQL Server的Microsoft ODBC驱动程序17
- 权限不足:确保数据库用户具有适当的权限
- 港口问题:验证正确的端口号和防火墙设置
- 大型内容问题:聊天中显示大型程序,但无法通过MCP工具保存到文件中
- 内存问题:大型内容从数据库高效地流式传输
调试模式
在中通过将日志级别设置为debug来启用调试日志记录 src/server.py:
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')大内容故障排除
如果您遇到大量内容的问题:
- 复制粘贴方法:使用聊天界面查看和复制大型程序
- 外部脚本:创建用于批量数据提取的独立Python脚本
- 检查内存:数据库连接可高效处理大型过程
- 验证权限:确保数据库用户可以访问过程定义
- 用较小的程序进行测试:首先验证基本功能
获取帮助
- 检查服务器日志以获取详细的错误消息
- 验证您的
.env配置 - 独立测试数据库连接
- 确保所有依赖项都已正确安装
- 对于大型内容问题,请使用从聊天中复制粘贴或创建外部提取脚本
最近的增强功能
大型内容处理(最新)
- 验证了无截断的大型存储过程的完整检索
- 通过以下程序成功测试
wmPostPurchase(1400+行,57KB) - 大型程序完全显示在聊天界面中,可供查看和复制粘贴
- 通过数据库连接流高效处理内存
- 备注:由于令牌限制,通过MCP工具进行的文件操作对于大型内容不可靠
完整的数据库对象管理
- 从5个扩展到23个综合数据库管理工具
- 为所有主要数据库对象添加了完整的CRUD操作
- 实现了与Contoso功能匹配的架构遍历功能
- 为表和视图添加了MCP资源访问权限
- 通过正确的操作验证增强安全性
许可证
这个项目是开源的。有关详细信息,请参阅许可证文件。
贡献
欢迎投稿!请随时提交pull请求或打开bug和功能请求的问题。
