MSSQL MCP 服务器是一个基于模型上下文协议(MCP)的服务器,它为访问 Microsoft SQL Server 数据库提供了全面的解决方案。借助标准化接口,该服务器使语言模型能够对数据库架构进行检查、执行查询、管理数据库对象以及执行高级数据库操作。
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
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 驱动名称(默认:{ODBC Driver 17 for SQL Server}) |
TrustServerCertificate |
信任服务器证书(默认:yes) |
Trusted_Connection |
使用 Windows 身份验证(默认:no) |
python3 src/server.py
服务器将启动并在标准输入上等待 MCP 协议消息。像 Claude Desktop 这样的 AI 助手或其他 MCP 客户端将通过这种方式与它进行通信。
python3 test_connection.py
./status.sh
# 服务器提供了可由 MCP 客户端调用的工具
# 直接测试需要 MCP 客户端或测试框架
🔴 重要提示:每个 MCP 服务器实例仅限使用一个数据库
⚠️ 重要提示:聊天上下文中不支持文件操作
read_query、write_query、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)write_queryMCP(模型上下文协议)服务器旨在与 AI 助手和语言模型配合使用。它们通过标准输入/输出使用 JSON-RPC 协议进行通信,而不是作为传统的 Web 服务。
增强型服务器提供了全面的数据库管理工具:
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://table_name/data - 以 CSV 格式访问表数据mssql://view_name/data - 以 CSV 格式访问视图数据
资源以 CSV 格式提供前 100 行数据,以便快速进行数据探索。# 从架构开始
list_schemas
# 获取特定架构中的所有对象
list_all_objects(schema_name: "dbo")
# 或者获取所有架构中的所有对象
list_all_objects()
# 列出所有表
list_tables
# 获取详细的表信息
describe_table(table_name: "YourTableName")
# 将表数据作为 MCP 资源访问
# URI: mssql://YourTableName/data
# 列出所有视图
list_views
# 获取视图定义
describe_view(view_name: "YourViewName")
# 创建新视图
create_view(view_script: "CREATE VIEW MyView AS SELECT * FROM MyTable WHERE Active = 1")
# 将视图数据作为 MCP 资源访问
# URI: mssql://YourViewName/data
# 列出所有存储过程
list_procedures
# 获取完整的存储过程定义(处理大型存储过程,如 wmPostPurchase)
describe_procedure(procedure_name: "YourProcedureName")
# 将大型存储过程保存到文件进行分析
write_file(file_path: "procedure_name.sql", content: "procedure_definition")
# 获取参数详细信息
get_procedure_parameters(procedure_name: "YourProcedureName")
# 执行存储过程
execute_procedure(procedure_name: "YourProcedureName", parameters: ["param1", "param2"])
# 列出所有索引
list_indexes()
# 列出特定表的索引
list_indexes(table_name: "YourTableName")
# 获取索引详细信息
describe_index(index_name: "IX_YourIndex", table_name: "YourTableName")
# 创建新索引
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": "your-server",
"MSSQL_DATABASE": "your-database",
"MSSQL_USER": "your-username",
"MSSQL_PASSWORD": "your-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)本项目为开源项目。有关详细信息,请参阅许可证文件。
欢迎贡献代码!请随时提交拉取请求或提出关于错误和功能请求的问题。