项目简介

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)进行通信。

安装步骤

  1. 前置条件:
    • Node.js (v14 或更高版本)
    • 可访问的 Microsoft SQL Server 数据库
  2. 克隆仓库: 打开终端并执行以下命令克隆项目:
    git clone https://github.com/mihai-dulgheru/mssql-mcp-node.git
    cd mssql-mcp-node
  3. 安装依赖:
    npm install
  4. 配置环境变量: 复制示例配置文件 '.env.example' 到 '.env',然后根据您的 SQL Server 连接信息更新 '.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
    多数据库模式示例 ('.env'):
    # 主数据库
    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
    (请将示例中的 'your_sql_server_address', 'your_username', 'your_password', 'your_database_name' 等替换为您自己的实际连接信息。)

服务器配置 (供 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": {}
    }

信息

分类

数据库与文件