MySQL数据库连接服务器

一个基于NodeJS的MySQL数据库连接服务器,支持SSH隧道和Claude Code集成,提供安全的数据库查询和操作功能。

  • by authentichamza
  • 本地部署
  • 更新于
在 GitHub 查看 authentichamza/mcp-server-mysql

使用说明

MySQL的MCP服务器-克劳德代码版

🚀 这是一个针对Claude Code优化的修改版本,支持SSH隧道
原作者: @本博拉29
原始存储库: https://github.com/benborla/mcp-server-mysql
许可证: 麻省理工学院

基于NodeJS的MySQL MCP服务器

这款叉子的主要特点:

  • ✅ Claude代码集成 -针对Anthropic的Claude Code CLI进行了优化
  • ✅ SSH隧道支持 -内置对远程数据库SSH隧道的支持
  • ✅ 自动启动/停止挂钩 -带Claude启动/停止的自动隧道管理
  • ✅ DDL操作 -已添加 MYSQL_DISABLE_READ_ONLY_TRANSACTIONS 获取CREATE TABLE支持
  • ✅ 多项目设置 -轻松配置具有不同数据库的多个项目

Claude Code用户快速入门:

  1. 阅读安装指南:参见 项目_教程_指南.md 详细说明
  2. 配置SSH隧道:为远程数据库设置自动SSH隧道
  3. 与Claude一起使用:集成MCP服务器与Claude Code无缝协作

一个模型上下文协议服务器,通过SSH隧道提供对MySQL数据库的访问。此服务器使Claude和其他LLM能够安全地检查数据库模式并执行SQL查询。

目录

需求

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

安装

使用Smithery

安装和配置MCP服务器有几种方法,但最常见的是检查此网站 https://smithery.ai/server/@benborla29/mcp服务器mysql

光标

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

  1. 访问 https://smithery.ai/server/@benborla29/mcp服务器mysql
  2. 按照Cursor的说明进行操作

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

克劳德代码

选项1:从Claude Desktop导入(如果已配置,建议使用)

如果您已经在Claude Desktop中配置了此MCP服务器,则可以自动导入:

claude mcp add-from-claude-desktop

这将显示一个交互式对话框,您可以在其中选择您的 mcp_server_mysql 服务器导入所有现有配置。

选项2:手动配置

使用NPM/PNPM全局安装:

首先,全局安装该软件包:

# Using npm
npm install -g @benborla29/mcp-server-mysql

# Using pnpm
pnpm add -g @benborla29/mcp-server-mysql

然后将服务器添加到Claude Code中:

claude mcp add mcp_server_mysql \
  -e MYSQL_HOST="127.0.0.1" \
  -e MYSQL_PORT="3306" \
  -e MYSQL_USER="root" \
  -e MYSQL_PASS="your_password" \
  -e MYSQL_DB="your_database" \
  -e ALLOW_INSERT_OPERATION="false" \
  -e ALLOW_UPDATE_OPERATION="false" \
  -e ALLOW_DELETE_OPERATION="false" \
  -- npx @benborla29/mcp-server-mysql

使用本地存储库(用于开发):

如果您从克隆的存储库运行:

claude mcp add mcp_server_mysql \
  -e MYSQL_HOST="127.0.0.1" \
  -e MYSQL_PORT="3306" \
  -e MYSQL_USER="root" \
  -e MYSQL_PASS="your_password" \
  -e MYSQL_DB="your_database" \
  -e ALLOW_INSERT_OPERATION="false" \
  -e ALLOW_UPDATE_OPERATION="false" \
  -e ALLOW_DELETE_OPERATION="false" \
  -e PATH="/path/to/node/bin:/usr/bin:/bin" \
  -e NODE_PATH="/path/to/node/lib/node_modules" \
  -- /path/to/node /full/path/to/mcp-server-mysql/dist/index.js

替换:

  • /path/to/node 使用Node.js二进制路径(查找 which node)
  • /full/path/to/mcp-server-mysql 包含克隆存储库的完整路径
  • 更新MySQL凭据以匹配您的环境

使用Unix套接字连接:

对于使用Unix套接字的本地MySQL实例:

claude mcp add mcp_server_mysql \
  -e MYSQL_SOCKET_PATH="/tmp/mysql.sock" \
  -e MYSQL_USER="root" \
  -e MYSQL_PASS="your_password" \
  -e MYSQL_DB="your_database" \
  -e ALLOW_INSERT_OPERATION="false" \
  -e ALLOW_UPDATE_OPERATION="false" \
  -e ALLOW_DELETE_OPERATION="false" \
  -- npx @benborla29/mcp-server-mysql

选择正确的范围

根据您的需求考虑使用哪个范围:

# Local scope (default) - only available in current project
claude mcp add mcp_server_mysql [options...]

# User scope - available across all your projects
claude mcp add mcp_server_mysql -s user [options...]

# Project scope - shared with team members via .mcp.json
claude mcp add mcp_server_mysql -s project [options...]

对于具有证书的数据库服务器, 本地 或 用户 建议使用作用域来保持凭据私有。

验证

添加服务器后,请验证其配置是否正确:

# List all configured servers
claude mcp list

# Get details for your MySQL server
claude mcp get mcp_server_mysql

# Check server status within Claude Code
/mcp

多数据库配置

对于多数据库模式,省略 MYSQL_DB 环境变量:

claude mcp add mcp_server_mysql_multi \
  -e MYSQL_HOST="127.0.0.1" \
  -e MYSQL_PORT="3306" \
  -e MYSQL_USER="root" \
  -e MYSQL_PASS="your_password" \
  -e MULTI_DB_WRITE_MODE="false" \
  -- npx @benborla29/mcp-server-mysql

高级配置

对于高级功能,请添加其他环境变量:

claude mcp add mcp_server_mysql \
  -e MYSQL_HOST="127.0.0.1" \
  -e MYSQL_PORT="3306" \
  -e MYSQL_USER="root" \
  -e MYSQL_PASS="your_password" \
  -e MYSQL_DB="your_database" \
  -e MYSQL_POOL_SIZE="10" \
  -e MYSQL_QUERY_TIMEOUT="30000" \
  -e MYSQL_CACHE_TTL="60000" \
  -e MYSQL_RATE_LIMIT="100" \
  -e MYSQL_SSL="true" \
  -e ALLOW_INSERT_OPERATION="false" \
  -e ALLOW_UPDATE_OPERATION="false" \
  -e ALLOW_DELETE_OPERATION="false" \
  -e MYSQL_ENABLE_LOGGING="true" \
  -- npx @benborla29/mcp-server-mysql

克劳德代码设置故障排除

  1. 服务器连接问题:使用 /mcp Claude Code中的命令,用于检查服务器状态并在需要时进行身份验证。

  2. 路径问题:如果使用本地存储库,请确保正确设置了Node.js路径:

    # Find your Node.js path
    which node
    
    # For PATH environment variable
    echo "$(which node)/../"
    
    # For NODE_PATH environment variable
    echo "$(which node)/../../lib/node_modules"
    
  3. 权限错误:确保您的MySQL用户对您启用的操作具有适当的权限。

  4. 服务器未启动:检查Claude代码日志或直接运行服务器进行调试:

    # Test the server directly
    npx @benborla29/mcp-server-mysql
    

使用NPM/PNPM

对于手动安装:

# Using npm
npm install -g @benborla29/mcp-server-mysql

# Using pnpm
pnpm add -g @benborla29/mcp-server-mysql

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

从本地存储库运行

如果要直接从源代码克隆并运行此MCP服务器,请执行以下步骤:

  1. 克隆存储库

    git clone https://github.com/benborla/mcp-server-mysql.git
    cd mcp-server-mysql
    
  2. 安装依赖项

    npm install
    # or
    pnpm install
    
  3. 构建项目

    npm run build
    # or
    pnpm run build
    
  4. 配置Claude桌面

    将以下内容添加到您的Claude Desktop配置文件中(claude_desktop_config.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", // <--- Important to add the following, run in your terminal `echo "$(which node)/../"` to get the path
            "NODE_PATH": "/Users/atlasborla/Library/Application Support/Herd/config/nvm/versions/node/v22.9.0/lib/node_modules" // <--- Important to add the following, run in your terminal `echo "$(which node)/../../lib/node_modules"`
          }
        }
      }
    }
    

    替换:

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

    # Run the server directly to test
    node dist/index.js
    

    如果它成功连接到MySQL,您就可以将其与Claude Desktop一起使用了。

在远程模式下运行

要在远程模式下运行,您需要提供 环境变量 到npx脚本。

  1. 在首选目录中创建env文件

    # create .env file
    touch .env
    
  2. 复制粘贴 示例文件 来自此存储库

  3. 设置MySQL凭据以匹配您的环境

  4. 集 IS_REMOTE_MCP=true

  5. 集 REMOTE_SECRET_KEY 到一个安全的字符串。

  6. 提供定制 PORT 如果需要的话。默认值为3000。

  7. 在当前会话中加载变量:

    source .env
    
  8. 运行服务器

    npx @benborla29/mcp-server-mysql
    
  9. 配置您的代理以使用下一个配置连接到MCP:

    {
      "mcpServers": {
        "mysql": {
          "url": "http://your-host:3000/mcp",
          "type": "streamableHttp",
          "headers": {
            "Authorization": "Bearer <REMOTE_SECRET_KEY>"
          }
        }
      }
    }
    

组件

工具

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

资源

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

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

安全功能

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

性能优化

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

监控与调试

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

配置

Smithery自动配置

如果您是使用Smithery安装的,那么您的配置已经设置好了。您可以通过以下方式查看或修改它:

smithery configure @benborla29/mcp-server-mysql

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

  • 基本连接设置:

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

    • 允许INSERT操作:如果要允许添加新数据,请设置为true
    • 允许更新操作:如果要允许更新现有数据,请设置为true
    • 允许删除操作:如果要允许删除数据,请设置为true

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

高级配置选项

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

{
  "mcpServers": {
    "mcp_server_mysql": {
      "command": "/path/to/npx/binary/npx",
      "args": [
        "-y",
        "@benborla29/mcp-server-mysql"
      ],
      "env": {
        // Basic connection settings
        "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",

        // Performance settings
        "MYSQL_POOL_SIZE": "10",
        "MYSQL_QUERY_TIMEOUT": "30000",
        "MYSQL_CACHE_TTL": "60000",

        // Security settings
        "MYSQL_RATE_LIMIT": "100",
        "MYSQL_MAX_QUERY_COMPLEXITY": "1000",
        "MYSQL_SSL": "true",

        // Monitoring settings
        "ENABLE_LOGGING": "true",
        "MYSQL_LOG_LEVEL": "info",
        "MYSQL_METRICS_ENABLED": "true",

        // Write operation flags
        "ALLOW_INSERT_OPERATION": "false",
        "ALLOW_UPDATE_OPERATION": "false",
        "ALLOW_DELETE_OPERATION": "false"
      }
    }
  }
}

环境变量

基本连接

  • MYSQL_SOCKET_PATH:本地连接的Unix套接字路径(例如“/tmp/mysql.sock”)
  • MYSQL_HOST:MySQL服务器主机(默认值:“127.0.0.1”)-如果设置了MY_RESOCKET_PATH,则忽略
  • MYSQL_PORT:MySQL服务器端口(默认值:“3306”)-如果设置了MY_RESOCKET_PATH,则忽略
  • 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”)
  • MYSQL_DISABLE_READ_ONLY_TRANSACTIONS: 新 禁用只读事务强制(默认值:“false”)⚠️ 安全警告: 仅当您需要完整的写入功能并将LLM与您的数据库信任时,才启用此功能
  • 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配置

  • IS_REMOTE_MCP:启用远程MCP模式(默认:“false”)
  • REMOTE_SECRET_KEY:远程MCP身份验证的密钥(默认值:“”)。如果没有提供,远程MCP模式将被禁用。
  • PORT:远程MCP服务器的端口号(默认值:3000)

多数据库模式

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

启用多数据库模式

要启用多数据库模式,只需离开 MYSQL_DB 环境变量为空。在多数据库模式下,查询需要模式限定:

-- Use fully qualified table names
SELECT * FROM database_name.table_name;

-- Or use USE statements to switch between databases
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. 创建测试数据库和用户

    -- Connect as root and create test database
    CREATE DATABASE IF NOT EXISTS mcp_test;
    
    -- Create test user with appropriate permissions
    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. 运行数据库安装脚本

    # Run the database setup script
    pnpm run setup:test:db
    

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

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

    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中:

    {
      "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"
      }
    }
    

运行测试

该项目包括一个全面的测试套件,以确保功能和可靠性:

# First-time setup
pnpm run setup:test:db

# Run all tests
pnpm test

运行评估

evals包加载一个mcp客户端,然后运行index.ts文件,因此不需要在测试之间重建。您可以通过在npx命令前加前缀来加载环境变量。完整文档可以在以下网址找到 MCP评估.

OPENAI_API_KEY=your-key  npx mcp-eval evals.ts index.ts

故障排除

常见问题

  1. 连接问题

    • 验证MySQL服务器是否正在运行且可访问
    • 检查凭据和权限
    • 如果启用,请确保SSL/TLS配置正确
    • 尝试连接MySQL客户端以确认访问
  2. 性能问题

    • 调整连接池大小
    • 配置查询超时值
    • 如果需要,启用查询缓存
    • 检查查询复杂性设置
    • 监控服务器资源使用情况
  3. 安全限制

    • 审查限速配置
    • 检查查询白名单/黑名单设置
    • 验证SSL/TLS设置
    • 确保用户具有适当的MySQL权限
  4. 路径解析 如果遇到错误“无法连接到MCP服务器MCP-server mysql”,请显式设置所有必需二进制文件的路径:

    {
      "env": {
        "PATH": "/path/to/node/bin:/usr/bin:/bin"
      }
    }
    

    我在哪里可以找到我的 node 料箱路径 运行以下命令以获取它:

    对于 路径

    echo "$(which node)/../"
    

    对于 节点路径

    echo "$(which node)/../../lib/node_modules"
    
  5. Claude桌面特定问题

    • 如果您在Claude Desktop中看到“服务器已断开连接”日志,请检查以下日志 ~/Library/Logs/Claude/mcp-server-mcp_server_mysql.log

    • 确保您使用的是Node二进制文件和服务器脚本的绝对路径

    • 检查你的 .env 文件已正确加载;在配置中使用显式环境变量

    • 尝试直接从命令行运行服务器,查看是否存在连接问题

    • 如果需要写操作(INSERT、UPDATE、DELETE),请在配置中将相应的标志设置为“true”:

      "env": {
        "ALLOW_INSERT_OPERATION": "true",  // Enable INSERT operations
        "ALLOW_UPDATE_OPERATION": "true",  // Enable UPDATE operations
        "ALLOW_DELETE_OPERATION": "true"   // Enable DELETE operations
      }
      
    • 确保你的MySQL用户对你正在启用的操作拥有适当的权限

    • 对于直接执行配置,请使用:

      {
        "mcpServers": {
          "mcp_server_mysql": {
            "command": "/full/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"
            }
          }
        }
      }
      
  6. 身份验证问题

    • 对于MySQL 8.0+,确保服务器支持 caching_sha2_password 身份验证插件

    • 检查MySQL用户是否配置了正确的身份验证方法

    • 如果需要,请尝试使用传统身份验证创建用户:

      CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
      

      @李庄

  7. 我遇到了 Error [ERR_MODULE_NOT_FOUND]: Cannot find package 'dotenv' imported from 错误 尝试以下解决方法:

    npx -y -p @benborla29/mcp-server-mysql -p dotenv mcp-server-mysql
    

    感谢@lizhuangs

贡献

欢迎投稿!请随时向提交拉取请求 https://github.com/benborla/mcp-server-mysql

非常感谢以下贡献者

开发设置

  1. 克隆存储库
  2. 安装依赖项: pnpm install
  3. 构建项目: pnpm run build
  4. 运行测试: pnpm test

项目路线图

我们正在积极致力于增强此MCP服务器。查看我们的 更改日志.md 有关计划功能的详细信息,包括:

  • 通过预处理语句增强查询功能
  • 高级安全功能
  • 性能优化
  • 综合监控
  • 扩展的架构信息

如果你想为这些领域做出贡献,请查看GitHub上的问题或打开一个新的问题来讨论你的想法。

提交变化

  1. 分叉存储库
  2. 创建要素分支: git checkout -b feature/your-feature-name
  3. 提交您的更改: git commit -am 'Add some feature'
  4. 推到分支: git push origin feature/your-feature-name
  5. 提交拉取请求

许可证

此MCP服务器根据MIT许可证获得许可。有关详细信息,请参阅LICENSE文件。