小贴士:按下Ctrl+D 或 ⌘+D,一键收藏本站,方便下次快速访问!
MIT License
260
最近更新:10天前

一个提供只读访问MySQL数据库的Model Context Protocol服务器。该服务器使LLMs能够检查数据库模式并执行只读查询。

基于 NodeJS 的 MySQL MCP 服务器

smithery 徽章
演示

一个提供 MySQL 数据库访问的模型上下文协议服务器。该服务器使 LLM 能够检查数据库模式并执行 SQL 查询。

目录

要求

  • Node.js v18 或更高版本
  • MySQL 5.7 或更高版本(推荐 MySQL 8.0+)
  • 具有所需操作适当权限的 MySQL 用户
  • 对于写操作:需要具有 INSERT、UPDATE 和/或 DELETE 权限的 MySQL 用户

安装

有几种安装和配置 MCP 服务器的方法:

Claude 桌面版

要为 Claude 桌面应用手动配置 MCP 服务器,请将以下内容添加到您的 claude_desktop_config.json 文件中(通常位于用户目录):

json 复制代码
{
  "mcpServers": {
    "mcp_server_mysql": {
      "command": "npx",
      "args": [
        "-y",
        "@benborla29/mcp-server-mysql"
      ],
      "env": {
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASS": "your_password",
        "MYSQL_DB": "your_database",
        "ALLOW_INSERT_OPERATION": "false",
        "ALLOW_UPDATE_OPERATION": "false",
        "ALLOW_DELETE_OPERATION": "false",
           "PATH": "/Users/atlasborla/Library/Application Support/Herd/config/nvm/versions/node/v22.9.0/bin:/usr/bin:/bin", // <--- 重要:添加以下内容,在终端运行 `echo "$(which node)/../"` 获取路径
           "NODE_PATH": "/Users/atlasborla/Library/Application Support/Herd/config/nvm/versions/node/v22.9.0/lib/node_modules" // <--- 重要:添加以下内容,在终端运行 `echo "$(which node)/../../lib/node_modules"`
      }
    }
  }
}

Cursor

对于 Cursor IDE,您可以在项目中运行以下命令安装此 MCP 服务器:

复制代码
npx mcprunner MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_USER=root MYSQL_PASS=root MYSQL_DB=demostore ALLOW_INSERT_OPERATION=true ALLOW_UPDATE_OPERATION=true ALLOW_DELETE_OPERATION=false -- npx -y @benborla29/mcp-server-mysql

不要忘记替换该命令中的 env 值。如果您有最新版本(v0.47 及以上)的 Cursor,只需复制粘贴以下配置:

mcp.json

json 复制代码
{
  "mcpServers": {
    "MySQL": {
      "command": "npx",
      "args": [
        "mcprunner",
        "MYSQL_HOST=127.0.0.1",
        "MYSQL_PORT=3306",
        "MYSQL_USER=root",
        "MYSQL_PASS=root",
        "MYSQL_DB=demostore",
        "ALLOW_INSERT_OPERATION=true",
        "ALLOW_UPDATE_OPERATION=true",
        "ALLOW_DELETE_OPERATION=false",
        "--",
        "npx",
        "-y",
        "@benborla29/mcp-server-mysql"
      ]
    }
  }
}

使用 Smithery

安装和配置此 MCP 服务器最简单的方法是通过 Smithery:

bash 复制代码
npx -y @smithery/cli@latest install @benborla29/mcp-server-mysql --client claude

在配置过程中,系统会提示您输入 MySQL 连接详细信息。Smithery 将自动:

  • 设置正确的环境变量
  • 配置您的 LLM 应用程序以使用 MCP 服务器
  • 测试与 MySQL 数据库的连接
  • 在需要时提供有用的故障排除
  • 配置写操作设置(INSERT、UPDATE、DELETE 权限)

安装将要求以下连接详细信息:

  • MySQL 主机(默认:127.0.0.1)
  • MySQL 端口(默认:3306)
  • MySQL 用户名
  • MySQL 密码
  • MySQL 数据库名称
  • SSL 配置(如果需要)
  • 写操作权限:
    • 允许 INSERT 操作(默认:false)
    • 允许 UPDATE 操作(默认:false)
    • 允许 DELETE 操作(默认:false)

出于安全原因,默认情况下写操作是禁用的。只有在需要 Claude 修改数据库数据时才启用它们。

使用 MCP Get

您也可以使用 MCP Get 安装此包:

bash 复制代码
npx @michaellatman/mcp-get@latest install @benborla29/mcp-server-mysql

MCP Get 提供了一个集中的 MCP 服务器注册表,并简化了安装过程。

使用 NPM/PNPM

对于手动安装:

bash 复制代码
# 使用 npm
npm install -g @benborla29/mcp-server-mysql

# 使用 pnpm
pnpm add -g @benborla29/mcp-server-mysql

手动安装后,您需要配置您的 LLM 应用程序以使用 MCP 服务器(参见下面的配置部分)。

从本地仓库运行

如果您想直接从源代码克隆并运行此 MCP 服务器,请按照以下步骤操作:

  1. 克隆仓库

    bash 复制代码
    git clone https://github.com/benborla/mcp-server-mysql.git
    cd mcp-server-mysql
  2. 安装依赖

    bash 复制代码
    npm install
    # 或
    pnpm install
  3. 构建项目

    bash 复制代码
    npm run build
    # 或
    pnpm run build
  4. 配置 Claude 桌面版

    将以下内容添加到您的 Claude 桌面配置文件(claude_desktop_config.json)中:

    json 复制代码
    {
      "mcpServers": {
        "mcp_server_mysql": {
          "command": "/path/to/node",
          "args": [
            "/full/path/to/mcp-server-mysql/dist/index.js"
          ],
          "env": {
            "MYSQL_HOST": "127.0.0.1",
            "MYSQL_PORT": "3306",
            "MYSQL_USER": "root",
            "MYSQL_PASS": "your_password",
            "MYSQL_DB": "your_database",
            "ALLOW_INSERT_OPERATION": "false",
            "ALLOW_UPDATE_OPERATION": "false",
            "ALLOW_DELETE_OPERATION": "false",
            "PATH": "/Users/atlasborla/Library/Application Support/Herd/config/nvm/versions/node/v22.9.0/bin:/usr/bin:/bin", // <--- 重要:添加以下内容,在终端运行 `echo "$(which node)/../"` 获取路径
            "NODE_PATH": "/Users/atlasborla/Library/Application Support/Herd/config/nvm/versions/node/v22.9.0/lib/node_modules" // <--- 重要:添加以下内容,在终端运行 `echo "$(which node)/../../lib/node_modules"`
          }
        }
      }
    }

    替换:

    • /path/to/node 为您的 Node.js 二进制文件的完整路径(使用 which node 查找)
    • /full/path/to/mcp-server-mysql 为您克隆仓库的完整路径
    • 设置 MySQL 凭据以匹配您的环境
  5. 测试服务器

    bash 复制代码
    # 直接运行服务器进行测试
    node dist/index.js

    如果成功连接到 MySQL,您就可以在 Claude 桌面版中使用它了。

组件

工具

  • mysql_query
    • 对连接的数据库执行 SQL 查询
    • 输入:sql(字符串):要执行的 SQL 查询
    • 默认情况下仅限于只读操作
    • 可选的写操作(通过配置启用):
      • INSERT:向表中添加新数据(需要 ALLOW_INSERT_OPERATION=true
      • UPDATE:修改现有数据(需要 ALLOW_UPDATE_OPERATION=true
      • DELETE:删除数据(需要 ALLOW_DELETE_OPERATION=true
    • 所有操作都在具有适当提交/回滚处理的事务中执行
    • 支持预处理语句以进行安全参数处理
    • 可配置的查询超时和结果分页
    • 内置查询执行统计

资源

服务器提供全面的数据库信息:

  • 表模式
    • 每个表的 JSON 模式信息
    • 列名和数据类型
    • 索引信息和约束
    • 外键关系
    • 表统计和指标
    • 从数据库元数据自动发现

安全功能

  • 通过预处理语句防止 SQL 注入
  • 查询白名单/黑名单功能
  • 查询执行的速率限制
  • 查询复杂性分析
  • 可配置的连接加密
  • 只读事务强制执行

性能优化

  • 优化的连接池
  • 查询结果缓存
  • 大结果集流式传输
  • 查询执行计划分析
  • 可配置的查询超时

监控和调试

  • 全面的查询日志记录
  • 性能指标收集
  • 错误跟踪和报告
  • 健康检查端点
  • 查询执行统计

配置

使用 Smithery 自动配置

如果使用 Smithery 安装,您的配置已经设置。您可以使用以下命令查看或修改:

bash 复制代码
smithery configure @benborla29/mcp-server-mysql

重新配置时,您可以更新任何 MySQL 连接详细信息以及写操作设置:

  • 基本连接设置

    • MySQL 主机、端口、用户、密码、数据库
    • SSL/TLS 配置(如果您的数据库需要安全连接)
  • 写操作权限

    • 允许 INSERT 操作:设置为 true 如果您想允许添加新数据
    • 允许 UPDATE 操作:设置为 true 如果您想允许更新现有数据
    • 允许 DELETE 操作:设置为 true 如果您想允许删除数据

出于安全原因,默认情况下所有写操作都是禁用的。只有在您特别需要 Claude 修改数据库数据时才启用这些设置。

高级配置选项

为了更精细地控制 MCP 服务器的行为,您可以使用这些高级配置选项:

json 复制代码
{
  "mcpServers": {
    "mcp_server_mysql": {
      "command": "/path/to/npx/binary/npx",
      "args": [
        "-y",
        "@benborla29/mcp-server-mysql"
      ],
      "env": {
        // 基本连接设置
        "MYSQL_HOST": "127.0.0.1",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "root",
        "MYSQL_PASS": "",
        "MYSQL_DB": "db_name",
        "PATH": "/path/to/node/bin:/usr/bin:/bin",
        
        // 性能设置
        "MYSQL_POOL_SIZE": "10",
        "MYSQL_QUERY_TIMEOUT": "30000",
        "MYSQL_CACHE_TTL": "60000",
        
        // 安全设置
        "MYSQL_RATE_LIMIT": "100",
        "MYSQL_MAX_QUERY_COMPLEXITY": "1000",
        "MYSQL_SSL": "true",
        
        // 监控设置
        "MYSQL_ENABLE_LOGGING": "true",
        "MYSQL_LOG_LEVEL": "info",
        "MYSQL_METRICS_ENABLED": "true",
        
        // 写操作标志
        "ALLOW_INSERT_OPERATION": "false",
        "ALLOW_UPDATE_OPERATION": "false",
        "ALLOW_DELETE_OPERATION": "false"
      }
    }
  }
}

环境变量

基本连接

  • MYSQL_HOST: MySQL 服务器主机(默认:"127.0.0.1")
  • MYSQL_PORT: MySQL 服务器端口(默认:"3306")
  • MYSQL_USER: MySQL 用户名(默认:"root")
  • MYSQL_PASS: MySQL 密码
  • MYSQL_DB: 目标数据库名称(留空为多数据库模式)

性能配置

  • MYSQL_POOL_SIZE: 连接池大小(默认:"10")
  • MYSQL_QUERY_TIMEOUT: 查询超时毫秒数(默认:"30000")
  • MYSQL_CACHE_TTL: 缓存生存时间毫秒数(默认:"60000")

安全配置

  • MYSQL_RATE_LIMIT: 每分钟最大查询数(默认:"100")
  • MYSQL_MAX_QUERY_COMPLEXITY: 最大查询复杂度分数(默认:"1000")
  • MYSQL_SSL: 启用 SSL/TLS 加密(默认:"false")
  • ALLOW_INSERT_OPERATION: 启用 INSERT 操作(默认:"false")
  • ALLOW_UPDATE_OPERATION: 启用 UPDATE 操作(默认:"false")
  • ALLOW_DELETE_OPERATION: 启用 DELETE 操作(默认:"false")
  • ALLOW_DDL_OPERATION: 启用 DDL 操作(默认:"false")
  • SCHEMA_INSERT_PERMISSIONS: 模式特定的 INSERT 权限
  • SCHEMA_UPDATE_PERMISSIONS: 模式特定的 UPDATE 权限
  • SCHEMA_DELETE_PERMISSIONS: 模式特定的 DELETE 权限
  • SCHEMA_DDL_PERMISSIONS: 模式特定的 DDL 权限
  • MULTI_DB_WRITE_MODE: 在多数据库模式中启用写操作(默认:"false")

监控配置

  • MYSQL_ENABLE_LOGGING: 启用查询日志(默认:"false")
  • MYSQL_LOG_LEVEL: 日志级别(默认:"info")
  • MYSQL_METRICS_ENABLED: 启用性能指标(默认:"false")

多数据库模式

MCP-Server-MySQL 支持在没有设置特定数据库时连接到多个数据库。这允许 LLM 查询 MySQL 用户有权访问的任何数据库。有关完整详细信息,请参见 README-MULTI-DB.md

启用多数据库模式

要启用多数据库模式,只需将 MYSQL_DB 环境变量留空。在多数据库模式中,查询需要模式限定:

sql 复制代码
-- 使用完全限定的表名
SELECT * FROM database_name.table_name;

-- 或使用 USE 语句在数据库之间切换
USE database_name;
SELECT * FROM table_name;

模式特定权限

为了对数据库操作进行精细控制,MCP-Server-MySQL 现在支持模式特定权限。这允许不同的数据库具有不同级别的访问权限(只读、读写等)。

配置示例

复制代码
SCHEMA_INSERT_PERMISSIONS=development:true,test:true,production:false
SCHEMA_UPDATE_PERMISSIONS=development:true,test:true,production:false
SCHEMA_DELETE_PERMISSIONS=development:false,test:true,production:false
SCHEMA_DDL_PERMISSIONS=development:false,test:true,production:false

有关完整详细信息和安全建议,请参见 README-MULTI-DB.md

测试

数据库设置

在运行测试之前,您需要设置测试数据库并用测试数据填充:

  1. 创建测试数据库和用户

    sql 复制代码
    -- 以 root 身份连接并创建测试数据库
    CREATE DATABASE IF NOT EXISTS mcp_test;
    
    -- 创建具有适当权限的测试用户
    CREATE USER IF NOT EXISTS 'mcp_test'@'localhost' IDENTIFIED BY 'mcp_test_password';
    GRANT ALL PRIVILEGES ON mcp_test.* TO 'mcp_test'@'localhost';
    FLUSH PRIVILEGES;
  2. 运行数据库设置脚本

    bash 复制代码
    # 运行数据库设置脚本
    pnpm run setup:test:db

    这将创建必要的表和种子数据。脚本位于 scripts/setup-test-db.ts

  3. 配置测试环境
    在项目根目录创建 .env.test 文件(如果不存在):

    env 复制代码
    MYSQL_HOST=127.0.0.1
    MYSQL_PORT=3306
    MYSQL_USER=mcp_test
    MYSQL_PASS=mcp_test_password
    MYSQL_DB=mcp_test
  4. 更新 package.json 脚本
    将这些脚本添加到您的 package.json:

    json 复制代码
    {
      "scripts": {
        "setup:test:db": "ts-node scripts/setup-test-db.ts",
        "pretest": "pnpm run setup:test:db",
        "test": "vitest run",
        "test:watch": "vitest",
        "test:coverage": "vitest run --coverage"
      }
    }

运行测试

项目包含全面的测试套件

1panel

mcp-1panel 是为 1Panel 实现的 Model Context Protocol (MCP) 服务器。

Aact mcp

与AACT临床试验数据库集成,支持查询和分析大规模试验数据,适用于研究和医疗应用。

Abap Adt

一个服务器,它将模型上下文协议(MCP)与SAP ABAP系统连接起来,使像Cline这样的工具能够检索ABAP源代码、表结构和其他开发工件。

Adwords Mcp

一个令人尴尬的MCP服务器,向Cursor、Claude和其他客户端的开发者提供广告

Adx Server

一个模型上下文协议 (MCP) 服务器,使 AI 助手能够通过标准化接口查询和分析 Azure Data Explorer 数据库。