返回市场
mcp-SqlServer-专业版

mcp-SqlServer-专业版

作者:jensenloke7 星标更新:2025-06-11

项目介绍

技术文档摘要

MSSQL MCP Server

这是一个提供对Microsoft SQL Server数据库全面访问的模型上下文协议(MCP)服务器。此增强型服务器使语言模型能够通过标准化接口检查数据库模式、执行查询、管理数据库对象并执行高级数据库操作。

🚀 增强功能

完整的数据库模式遍历

  • 23个全面的数据库管理工具(从5个基本操作扩展而来)
  • 完整的数据库对象层次结构探索 - 表、视图、存储过程、索引、模式
  • 高级数据库对象管理 - 创建、修改、删除操作
  • 智能资源访问 - 所有表和视图均可作为MCP资源
  • 大内容处理 - 检索完整的存储过程(1400+行)而不截断

核心能力

  • 数据库连接:使用灵活的身份验证连接到MSSQL Server实例

  • 模式检查:完全的数据库对象探索和管理

  • 查询执行:执行SELECT、INSERT、UPDATE、DELETE和DDL查询

  • 存储过程管理:创建、修改、执行和管理存储过程

  • 视图管理:创建、修改、删除和描述视图

  • 索引管理:创建、删除和分析索引

  • 资源访问:浏览表和视图数据作为MCP资源

  • 安全性:读取和写入操作被正确分离和验证

⚠️ 工程团队重要使用指南

数据库限制

🔴 关键:每个MCP服务器实例仅限一个数据库

  • 此增强型MCP服务器为每个数据库创建23个工具
  • 光标在所有MCP服务器上的40个工具限制
  • 使用多个数据库实例会超出光标的工具限制
  • 对于多个数据库,请在不同的项目中使用单独的MCP服务器实例

大内容限制

⚠️ 重要:不支持在聊天上下文中进行文件操作

  • 可以检索和查看大型存储过程(1400+行)在聊天中
  • 但是,由于令牌限制,通过MCP工具保存大量内容到文件是不可靠的
  • 对于批量数据提取:使用具有直接数据库连接的独立Python脚本
  • 推荐方法:从聊天中复制粘贴较小的过程,使用外部脚本处理较大的过程

工具分布

  • 核心工具:5个(read_query, write_query, list_tables, describe_table, create_table)
  • 存储过程:6个工具(create, modify, delete, list, describe, execute, get_parameters)
  • 视图:5个工具(create, modify, delete, list, describe)
  • 索引:4个工具(create, delete, list, describe)
  • 模式管理:2个工具(list_schemas, list_all_objects)
  • 总计:23个工具 + 增强的write_query支持所有数据库对象操作

安装

需求

  • Python 3.10或更高版本
  • SQL Server ODBC驱动程序17
  • 访问MSSQL Server实例

快速设置

  1. 克隆或创建项目目录:

    mkdir mcp-sqlserver && cd mcp-sqlserver
    
  2. 运行安装脚本:

    chmod +x install.sh
    ./install.sh
    
  3. 配置您的数据库连接:

    cp env.example .env
    # 编辑.env以包含您的数据库详细信息
    

手动安装

  1. 创建虚拟环境:

    python3 -m venv venv
    source venv/bin/activate
    
  2. 安装依赖项:

    pip install -r requirements.txt
    
  3. 安装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服务器

MCP(模型上下文协议)服务器设计用于与AI助手和语言模型一起工作。它们通过stdin/stdout使用JSON-RPC协议进行通信,而不是传统的Web服务。

运行服务器

对于AI助手集成:

python3 src/server.py

服务器将启动并等待来自stdin的MCP协议消息。这是像Claude Desktop或其他MCP客户端这样的AI助手如何与其通信的方式。

对于测试和开发:

  1. 测试数据库连接:

    python3 test_connection.py
    
  2. 检查服务器状态:

    ./status.sh
    
  3. 查看可用表:

    # 服务器提供了可以由MCP客户端调用的工具
    # 直接测试需要MCP客户端或测试框架
    

可用工具(总计23个)

增强型服务器提供了全面的数据库管理工具:

核心数据库操作(5个工具)

  1. read_query - 执行SELECT查询以读取数据
  2. write_query - 执行INSERT、UPDATE、DELETE和DDL查询
  3. list_tables - 列出数据库中的所有表
  4. describe_table - 获取特定表的架构信息
  5. create_table - 创建新表

存储过程管理(6个工具)

  1. create_procedure - 创建新的存储过程
  2. modify_procedure - 修改现有的存储过程
  3. delete_procedure - 删除存储过程
  4. list_procedures - 列出带有元数据的所有存储过程
  5. describe_procedure - 获取完整的存储过程定义
  6. execute_procedure - 使用参数执行过程
  7. get_procedure_parameters - 获取详细的参数信息

视图管理(5个工具)

  1. create_view - 创建新的视图
  2. modify_view - 修改现有的视图
  3. delete_view - 删除视图
  4. list_views - 列出数据库中的所有视图
  5. describe_view - 获取视图定义和架构

索引管理(4个工具)

  1. create_index - 创建新的索引
  2. delete_index - 删除索引
  3. list_indexes - 列出所有索引(可选按表)
  4. describe_index - 获取详细的索引信息

模式探索(2个工具)

  1. list_schemas - 列出数据库中的所有模式
  2. list_all_objects - 按模式组织列出所有数据库对象

可用资源

表和视图均作为MCP资源暴露,URI如下:

  • mssql://表名/data - 以CSV格式访问表数据
  • mssql://视图名/data - 以CSV格式访问视图数据

资源提供前100行数据的CSV格式,以便快速数据探索。

数据库模式遍历示例

1. 探索数据库结构

# 从模式开始
list_schemas

# 获取特定模式下的所有对象
list_all_objects(schema_name: "dbo")

# 或获取所有模式下的所有对象
list_all_objects()

2. 表探索

# 列出所有表
list_tables

# 获取详细的表信息
describe_table(table_name: "您的表名")

# 将表数据作为MCP资源访问
# URI: mssql://您的表名/data

3. 视图管理

# 列出所有视图
list_views

# 获取视图定义
describe_view(view_name: "您的视图名")

# 创建新的视图
create_view(view_script: "CREATE VIEW MyView AS SELECT * FROM MyTable WHERE Active = 1")

# 将视图数据作为MCP资源访问
# URI: mssql://您的视图名/data

4. 存储过程操作

# 列出所有过程
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"])

5. 索引管理

# 列出所有索引
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

大内容处理

如何工作

服务器有效地处理大型数据库对象,如存储过程:

  1. 直接检索:直接从SQL Server获取完整内容
  2. 无截断:返回完整的存储过程定义,无论大小
  3. 聊天显示:大型过程可以在聊天界面中完整查看
  4. 内存高效:通过数据库连接流处理内容

使用示例

# 描述一个大型过程(获取完整定义)
describe_procedure(procedure_name: "wmPostPurchase")

# 适用于任何大小的过程(已测试1400+行的过程)
# 内容在聊天中显示以供查看和复制粘贴操作

文件操作限制

⚠️ 重要:虽然大型过程可以在聊天中检索和显示,但通过MCP工具将其保存到文件是不可靠的,因为推理令牌限制。对于批量数据提取:

  1. 小型过程:从聊天界面复制粘贴
  2. 大型过程:使用具有直接数据库连接的独立Python脚本
  3. 批量操作:在MCP上下文之外创建专用提取脚本

与AI助手的集成

Claude Desktop

将此服务器添加到您的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协议的客户端兼容。

开发

项目结构

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()调用来设置日志级别。

安全注意事项

  • 认证:始终使用强密码和安全认证
  • 网络:确保您的数据库服务器得到适当保护
  • 权限:仅授予用户账户必要的数据库权限
  • SSL/TLS:尽可能使用加密连接
  • 查询验证:服务器验证查询类型并防止未经授权的操作
  • DDL操作:数据库对象的创建/修改/删除操作被正确验证
  • 存储过程执行:参数被安全处理以防止注入攻击
  • 大内容处理:大型过程被高效地检索而不会截断
  • 文件操作:写入操作被验证和隔离
  • 先读取的方法:默认情况下,探索工具是只读的,以保证生产安全

故障排除

常见问题

  1. 连接失败:检查您的数据库服务器地址、凭据和网络连接性
  2. 未找到ODBC驱动程序:安装Microsoft ODBC驱动程序17 for SQL Server
  3. 权限被拒绝:确保数据库用户具有适当的权限
  4. 端口问题:验证正确的端口号和防火墙设置
  5. 大内容问题:大型过程在聊天中显示,但不能通过MCP工具保存到文件
  6. 内存问题:大型内容通过数据库连接流高效处理

调试模式

通过在src/server.py中将日志级别设置为DEBUG来启用调试日志记录:

logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')

大内容故障排除

如果您遇到大内容问题:

  1. 复制粘贴方法:使用聊天界面查看和复制大型过程
  2. 外部脚本:创建独立的Python脚本进行批量数据提取
  3. 检查内存:大型过程通过数据库连接高效处理
  4. 验证权限:确保数据库用户可以访问过程定义
  5. 测试小过程:首先验证基本功能

获取帮助

  1. 查看服务器日志以获取详细的错误消息
  2. 验证您的.env配置
  3. 独立测试数据库连接
  4. 确保所有依赖项都正确安装
  5. 对于大内容问题,使用聊天中的复制粘贴或创建外部提取脚本

最近增强

大内容处理(最新)

  • 验证了大型存储过程的完整检索而没有截断
  • 成功测试了如wmPostPurchase(1400+行,57KB)的过程
  • 大型过程在聊天界面中完整显示以供查看和复制粘贴
  • 通过数据库连接流高效处理内存
  • 注意:由于令牌限制,通过MCP工具保存大内容到文件是不可靠的

完整的数据库对象管理

  • 从5个基本操作扩展到23个全面的数据库管理工具
  • 添加了所有主要数据库对象的完整CRUD操作
  • 实现了与SSMS功能相匹配的模式遍历能力
  • 添加了表和视图的MCP资源访问
  • 通过适当的操作验证增强了安全性

许可

此项目是开源的。请参阅许可文件以了解详细信息。

贡献

欢迎贡献!请随时提交拉取请求或为错误和功能请求打开问题。