项目简介
MSSQL MCP 服务器是一个强大的 Node.js 应用,它允许大型语言模型(LLM)通过 Model Context Protocol (MCP) 协议与 Microsoft SQL Server 数据库进行交互。它能将数据库中的表暴露为可读取的资源,并提供执行 SQL 查询和获取表结构等工具,支持单数据库和多数据库连接模式。
主要功能点
- 数据库资源管理: 将 SQL Server 数据库中的表自动识别并暴露为上下文资源,LLM 可以方便地查询数据。
- SQL 查询执行: 允许 LLM 安全地执行 SQL 查询,支持 'SELECT'、'INSERT'、'UPDATE'、'DELETE' 等操作('SELECT' 采用只读事务,非 'SELECT' 操作会直接执行),并提供结果。
- 获取表结构: LLM 可以查询任何指定表的详细结构(列名、数据类型、最大长度等),以便更好地理解数据模型。
- 多数据库支持: 通过环境变量配置,支持连接到单个或多个 SQL Server 数据库,并允许 LLM 指定要操作的数据库。
- 安全与验证: 内置 SQL 注入防护、危险查询(如 'DROP'、'TRUNCATE' 等)检测和阻止,并使用 Zod 进行严格的数据输入验证,确保操作安全可靠。
- 标准 MCP 协议: 通过标准输入输出(STDIO)与 MCP 客户端(如 Claude Desktop, VS Code)进行通信。
安装步骤
- 前置条件:
- Node.js (v14 或更高版本)
- 可访问的 Microsoft SQL Server 数据库
- 克隆仓库:
打开终端并执行以下命令克隆项目:
git clone https://github.com/mihai-dulgheru/mssql-mcp-node.git cd mssql-mcp-node - 安装依赖:
npm install - 配置环境变量:
复制示例配置文件 '.env.example' 到 '.env',然后根据您的 SQL Server 连接信息更新 '.env' 文件。您可以选择配置单数据库模式或多数据库模式,但不要同时配置两者。
单数据库模式示例 ('.env'):cp .env.example .env
多数据库模式示例 ('.env'):MSSQL_SERVER=your_sql_server_address MSSQL_PORT=1433 MSSQL_USER=your_username MSSQL_PASSWORD=your_password MSSQL_DATABASE=your_database_name MSSQL_ENCRYPT=true MSSQL_TRUST_SERVER_CERTIFICATE=false
(请将示例中的 'your_sql_server_address', 'your_username', 'your_password', 'your_database_name' 等替换为您自己的实际连接信息。)# 主数据库 MSSQL_MAINDB_SERVER=your_sql_server_address MSSQL_MAINDB_PORT=1433 MSSQL_MAINDB_USER=your_username MSSQL_MAINDB_PASSWORD=your_password MSSQL_MAINDB_DATABASE=main_db_name MSSQL_MAINDB_ENCRYPT=true MSSQL_MAINDB_TRUST_SERVER_CERTIFICATE=false # 报告数据库 MSSQL_REPORTINGDB_SERVER=your_sql_server_address MSSQL_REPORTINGDB_PORT=1433 MSSQL_REPORTINGDB_USER=your_username MSSQL_REPORTINGDB_PASSWORD=your_password MSSQL_REPORTINGDB_DATABASE=reporting_db_name MSSQL_REPORTINGDB_ENCRYPT=true MSSQL_REPORTINGDB_TRUST_SERVER_CERTIFICATE=false
服务器配置 (供 MCP 客户端使用)
以下是配置 MCP 客户端连接此服务器的 JSON 格式示例。根据您的配置模式(单数据库或多数据库),选择相应的配置片段。这些配置应添加到您的 MCP 客户端配置文件中(例如 Claude Desktop 的 'mcpServers.json' 或 VS Code 的 '.vscode/mcp.json')。
单数据库模式配置示例:
{ "servers": { "mssql-mcp-node-single": { // 启动 MCP 服务器的命令 "command": "npx", // 命令的参数,"-y" 允许 npx 自动安装包,"mssql-mcp-node" 是要运行的包名 "args": ["-y", "mssql-mcp-node"], // 环境变量,用于 MCP 服务器连接 SQL Server "env": { "MSSQL_SERVER": "your_server_name", // SQL Server 地址 "MSSQL_PORT": "1433", // SQL Server 端口 (可选,默认 1433) "MSSQL_USER": "your_username", // 数据库用户名 "MSSQL_PASSWORD": "your_password", // 数据库密码 "MSSQL_DATABASE": "your_database", // 要连接的数据库名称 "MSSQL_ENCRYPT": "true", // 是否加密连接 (推荐生产环境为 "true") "MSSQL_TRUST_SERVER_CERTIFICATE": "false" // 是否信任服务器证书 (推荐生产环境为 "false") } } } }
多数据库模式配置示例:
{ "servers": { "mssql-mcp-node-multi": { // 启动 MCP 服务器的命令 "command": "npx", // 命令的参数,"-y" 允许 npx 自动安装包,"mssql-mcp-node" 是要运行的包名 "args": ["-y", "mssql-mcp-node"], // 环境变量,用于 MCP 服务器连接 SQL Server。每个数据库配置需要有独立的名称前缀。 "env": { // 主数据库配置 "MSSQL_MAINDB_SERVER": "your_server_name", "MSSQL_MAINDB_PORT": "1433", "MSSQL_MAINDB_USER": "your_username", "MSSQL_MAINDB_PASSWORD": "your_password", "MSSQL_MAINDB_DATABASE": "main_database", "MSSQL_MAINDB_ENCRYPT": "true", "MSSQL_MAINDB_TRUST_SERVER_CERTIFICATE": "false", // 报告数据库配置 "MSSQL_REPORTINGDB_SERVER": "your_server_name_2", "MSSQL_REPORTINGDB_PORT": "1433", "MSSQL_REPORTINGDB_USER": "your_username_2", "MSSQL_REPORTINGDB_PASSWORD": "your_password_2", "MSSQL_REPORTINGDB_DATABASE": "reporting_database", "MSSQL_REPORTINGDB_ENCRYPT": "true", "MSSQL_REPORTINGDB_TRUST_SERVER_CERTIFICATE": "false" } } } }
请根据您的实际环境替换 'your_server_name'、'your_username'、'your_password'、'main_database'、'reporting_database' 等占位符。
基本使用方法 (在 MCP 客户端中)
配置完成后,您的 MCP 客户端将能够发现并连接此 SQL Server MCP 服务器。您可以通过 LLM 客户端的交互界面,使用以下方式与数据库进行交互:
-
查看表数据 (资源): 当您向 LLM 提问时,如果您的数据库表被注册为资源,LLM 可能会自动显示或建议您读取这些资源。例如:
我想看看 'maindb' 数据库中 'YourTable' 表的数据。LLM 可能会返回类似以下格式的数据:
# Database: your_database id,name,created_at 1,Item1,2025-01-01 2,Item2,2025-01-02 -
执行 SQL 查询 (工具 'execute_sql'): LLM 可以直接调用 'execute_sql' 工具来执行 SQL 查询。例如:
请在 'maindb' 数据库中执行 SQL 查询:SELECT TOP 5 * FROM Customers。或更直接地使用工具调用语法(具体语法取决于您的 MCP 客户端实现):
{ "tool_code": "execute_sql", "tool_name": "execute_sql", "parameters": { "query": "SELECT TOP 5 * FROM Customers", "dbKey": "maindb" // 在多数据库模式下指定,单数据库模式下可选 } } -
获取表结构 (工具 'get_table_schema'): LLM 可以调用 'get_table_schema' 工具来获取指定表的列信息。例如:
'reportingdb' 数据库里 'Sales' 表有哪些列?或:
{ "tool_code": "get_table_schema", "tool_name": "get_table_schema", "parameters": { "table": "Sales", "dbKey": "reportingdb" // 在多数据库模式下指定,单数据库模式下可选 } } -
列出所有已配置数据库 (工具 'list_databases'): LLM 可以调用 'list_databases' 工具来查看所有已配置并可用的数据库。例如:
显示所有我能访问的数据库配置。或:
{ "tool_code": "list_databases", "tool_name": "list_databases", "parameters": {} }
信息
分类
数据库与文件