这是一个提供对Microsoft SQL Server数据库全面访问的模型上下文协议(MCP)服务器。此增强型服务器使语言模型能够通过标准化接口检查数据库模式、执行查询、管理数据库对象并执行高级数据库操作。
数据库连接:使用灵活的身份验证连接到MSSQL Server实例
模式检查:完全的数据库对象探索和管理
查询执行:执行SELECT、INSERT、UPDATE、DELETE和DDL查询
存储过程管理:创建、修改、执行和管理存储过程
视图管理:创建、修改、删除和描述视图
索引管理:创建、删除和分析索引
资源访问:浏览表和视图数据作为MCP资源
安全性:读取和写入操作被正确分离和验证
🔴 关键:每个MCP服务器实例仅限一个数据库
⚠️ 重要:不支持在聊天上下文中进行文件操作
克隆或创建项目目录:
mkdir mcp-sqlserver && cd mcp-sqlserver
运行安装脚本:
chmod +x install.sh
./install.sh
配置您的数据库连接:
cp env.example .env
# 编辑.env以包含您的数据库详细信息
创建虚拟环境:
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=您的服务器地址
MSSQL_DATABASE=您的数据库名称
MSSQL_USER=您的用户名
MSSQL_PASSWORD=您的密码
MSSQL_PORT=1433
TrustServerCertificate=yes
MSSQL_SERVER:服务器主机名或IP地址(必需)MSSQL_DATABASE:要连接的数据库名称(必需)MSSQL_USER:用于身份验证的用户名MSSQL_PASSWORD:用于身份验证的密码MSSQL_PORT:端口号(默认:11433)MSSQL_DRIVER:ODBC驱动程序名称(默认:{ODBC Driver 17 for SQL Server})TrustServerCertificate:信任服务器证书(默认:yes)Trusted_Connection:使用Windows身份验证(默认:no)MCP(模型上下文协议)服务器设计用于与AI助手和语言模型一起工作。它们通过stdin/stdout使用JSON-RPC协议进行通信,而不是传统的Web服务。
对于AI助手集成:
python3 src/server.py
服务器将启动并等待来自stdin的MCP协议消息。这是像Claude Desktop或其他MCP客户端这样的AI助手如何与其通信的方式。
对于测试和开发:
测试数据库连接:
python3 test_connection.py
检查服务器状态:
./status.sh
查看可用表:
# 服务器提供了可以由MCP客户端调用的工具
# 直接测试需要MCP客户端或测试框架
增强型服务器提供了全面的数据库管理工具:
read_query - 执行SELECT查询以读取数据write_query - 执行INSERT、UPDATE、DELETE和DDL查询list_tables - 列出数据库中的所有表describe_table - 获取特定表的架构信息create_table - 创建新表create_procedure - 创建新的存储过程modify_procedure - 修改现有的存储过程delete_procedure - 删除存储过程list_procedures - 列出带有元数据的所有存储过程describe_procedure - 获取完整的存储过程定义execute_procedure - 使用参数执行过程get_procedure_parameters - 获取详细的参数信息create_view - 创建新的视图modify_view - 修改现有的视图delete_view - 删除视图list_views - 列出数据库中的所有视图describe_view - 获取视图定义和架构create_index - 创建新的索引delete_index - 删除索引list_indexes - 列出所有索引(可选按表)describe_index - 获取详细的索引信息list_schemas - 列出数据库中的所有模式list_all_objects - 按模式组织列出所有数据库对象表和视图均作为MCP资源暴露,URI如下:
mssql://表名/data - 以CSV格式访问表数据mssql://视图名/data - 以CSV格式访问视图数据资源提供前100行数据的CSV格式,以便快速数据探索。
# 从模式开始
list_schemas
# 获取特定模式下的所有对象
list_all_objects(schema_name: "dbo")
# 或获取所有模式下的所有对象
list_all_objects()
# 列出所有表
list_tables
# 获取详细的表信息
describe_table(table_name: "您的表名")
# 将表数据作为MCP资源访问
# URI: mssql://您的表名/data
# 列出所有视图
list_views
# 获取视图定义
describe_view(view_name: "您的视图名")
# 创建新的视图
create_view(view_script: "CREATE VIEW MyView AS SELECT * FROM MyTable WHERE Active = 1")
# 将视图数据作为MCP资源访问
# URI: mssql://您的视图名/data
# 列出所有过程
list_procedures
# 获取完整的存储过程定义(处理大型过程如wmPostPurchase)
describe_procedure(procedure_name: "您的过程名")
# 将大型过程保存到文件以供分析
write_file(file_path: "过程名.sql", content: "过程定义")
# 获取参数详情
get_procedure_parameters(procedure_name: "您的过程名")
# 执行过程
execute_procedure(procedure_name: "您的过程名", parameters: ["参数1", "参数2"])
# 列出所有索引
list_indexes()
# 列出特定表的索引
list_indexes(table_name: "您的表名")
# 获取索引详情
describe_index(index_name: "IX_您的索引", table_name: "您的表名")
# 创建新的索引
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
服务器有效地处理大型数据库对象,如存储过程:
# 描述一个大型过程(获取完整定义)
describe_procedure(procedure_name: "wmPostPurchase")
# 适用于任何大小的过程(已测试1400+行的过程)
# 内容在聊天中显示以供查看和复制粘贴操作
⚠️ 重要:虽然大型过程可以在聊天中检索和显示,但通过MCP工具将其保存到文件是不可靠的,因为推理令牌限制。对于批量数据提取:
将此服务器添加到您的Claude Desktop配置中:
{
"mcpServers": {
"mssql": {
"command": "python3",
"args": ["/path/to/mcp-sqlserver/src/server.py"],
"cwd": "/path/to/mcp-sqlserver",
"env": {
"MSSQL_SERVER": "您的服务器",
"MSSQL_DATABASE": "您的数据库",
"MSSQL_USER": "您的用户名",
"MSSQL_PASSWORD": "您的密码"
}
}
}
}
该服务器遵循标准的MCP协议,并应与任何符合MCP协议的客户端兼容。
mcp-sqlserver/
├── src/
│ └── server.py # 主MCP服务器实现,带有分块系统
├── tests/
│ └── test_server.py # 单元测试
├── requirements.txt # Python依赖项
├── .env # 数据库配置(从env.example创建)
├── env.example # 配置模板
├── install.sh # 安装脚本
├── start.sh # 服务器启动脚本(用于开发)
├── stop.sh # 服务器关闭脚本
├── status.sh # 服务器状态脚本
└── README.md # 本文档
运行测试套件:
python -m pytest tests/
测试数据库连接:
python3 test_connection.py
服务器使用Python的日志模块。通过修改src/server.py中的logging.basicConfig()调用来设置日志级别。
通过在src/server.py中将日志级别设置为DEBUG来启用调试日志记录:
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
如果您遇到大内容问题:
.env配置wmPostPurchase(1400+行,57KB)的过程此项目是开源的。请参阅许可文件以了解详细信息。
欢迎贡献!请随时提交拉取请求或为错误和功能请求打开问题。