MySQL多数据库访问服务器

一个提供安全、可配置的多数据库MySQL访问的MCP服务器,支持懒加载和热重载功能。

  • by adamosk
  • JavaScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 adamosk/mysql-mcp-server

使用说明

MySQL MCP服务器

一个复杂的模型上下文协议(MCP)服务器,提供安全的多数据库MySQL访问,具有可配置的安全级别、延迟加载和热重新加载功能。

🚀 特性

  • 🗄️ 多数据库支持:同时配置和访问多个MySQL数据库
  • 🔒 可配置的安全性:从只读到完全访问的四个安全级别
  • ⚡ 延迟加载:仅在需要最佳资源使用时创建连接池
  • 🔄 热重新加载:无需重新启动服务器即可更新数据库配置
  • 📊 完整的架构信息:带有索引、外键和约束的完整表定义
  • 🛡️ 显式数据库选择:必需的数据库参数可防止意外操作
  • 🎯 MCP协议集成:原生VS代码与资源浏览的集成

🔧 安装

  1. 克隆并安装

    git clone <your-repository-url>
    cd mysql-mcp-server
    npm install
    
  2. 配置多数据库设置

    复制示例配置文件并对其进行自定义:

    cp .env.example .env
    

    编辑 .env 使用您的数据库配置:

    # Multi-Database Configuration (JSON Array)
    MYSQL_DATABASES='[
      {
        "name": "primary_db",
        "host": "localhost",
        "user": "your_username",
        "password": "your_password",
        "database": "your_database"
      },
      {
        "name": "analytics_db", 
        "host": "analytics.example.com",
        "user": "analytics_user",
        "password": "analytics_password",
        "database": "analytics"
      }
    ]'
    
    # Security Configuration
    # Options: (default), extended, all, or custom comma-separated list
    # MYSQL_ALLOWED_COMMANDS=extended
    
    # Connection Pool Settings
    MYSQL_CONNECTION_LIMIT=4
    MYSQL_WAIT_FOR_CONNECTIONS=true
    
    # Server Metadata
    MCP_SERVER_NAME=mysql-mcp-server
    MCP_SERVER_VERSION=1.0.0
    
  3. 添加到VS代码MCP配置

    添加到您的VS代码 settings.json 在MCP服务器下:

    {
      "mcp": {
        "mcpServers": {
          "mysql-mcp-server": {
            "command": "node",
            "args": ["C:/path/to/mysql-mcp-server/mcp-mysql-lite.js"],
            "env": {}
          }
        }
      }
    }
    

🔒 安全级别

配置 MYSQL_ALLOWED_COMMANDS 在你的 .env 文件:

默认值(推荐)

# MYSQL_ALLOWED_COMMANDS not set or commented out

允许的命令: SELECT, SHOW, DESCRIBE, DESC, EXPLAIN, ANALYZE
用例:数据分析和探索的安全只读访问

扩展的

MYSQL_ALLOWED_COMMANDS=extended

允许的命令:所有默认命令加 CREATE TABLE, ALTER TABLE, DROP TABLE, INSERT, UPDATE, DELETE, TRUNCATE等等。
用例:需要修改模式和数据的开发环境

全部(⚠️ 小心使用)

MYSQL_ALLOWED_COMMANDS=all

允许的命令:无限制-允许使用所有SQL命令
用例:需要完整数据库管理功能的可信环境

自定义

MYSQL_ALLOWED_COMMANDS="SELECT,INSERT,UPDATE,CREATE TABLE"

允许的命令:用户定义的逗号分隔列表
用例:具有定制权限的具体操作要求

🛠️ 可用工具

所有工具都需要明确的数据库选择以确保安全。

query_database

执行带有安全验证和显式数据库选择的SQL查询。

  • 参数:
    • sql (字符串, 必需的)-要执行的SQL查询
    • database (字符串, 必需的)-目标数据库名称(安全要求)
  • 安全:根据当前安全级别验证命令
  • 退货:使用执行元数据查询结果

describe_table

使用以下命令获取完整的表结构 SHOW CREATE TABLE 获取全面的模式信息。

  • 参数:
    • table_name (字符串, 必需的)-要描述的表的名称
    • database (字符串, 必需的)-包含表的数据库(安全要求)
  • 退货:完整的表定义,包括列、索引、外键和引擎详细信息

list_databases

显示所有已配置的数据库及其连接状态。

  • 参数:无需
  • 退货:具有连接池状态和默认数据库指示器的数据库配置

📚 可用资源

默认数据库中的表作为MCP资源公开,URI如下:

mysql://database_name/table/table_name

直接通过VS Code的资源浏览器浏览表模式。

💡 使用示例

基础数据库查询

-- Query with explicit database selection (security requirement)
SELECT COUNT(*) FROM users WHERE active = 1

数据库: primary_db

多数据库操作

-- Analytics query on different database
SELECT DATE(created_at), COUNT(*) 
FROM events 
WHERE event_type = 'purchase' 
GROUP BY DATE(created_at) 
ORDER BY DATE(created_at) DESC 
LIMIT 7

数据库: analytics_db

表模式探索

使用 describe_table 工具:

  • 表格: users
  • 数据库: primary_db

返回包含外键、索引和约束的完整表定义。

数据库发现

使用 list_databases 查看所有已配置数据库及其连接状态的工具:

[
  {
    "name": "primary_db",
    "host": "localhost", 
    "database": "app_production",
    "user": "app_user",
    "isDefault": true,
    "poolCreated": true
  },
  {
    "name": "analytics_db",
    "host": "analytics.company.com",
    "database": "analytics",
    "user": "analytics_user", 
    "isDefault": false,
    "poolCreated": false
  }
]

🔄 热重载功能

更新中的数据库配置 .env file-它们将自动重新加载:

  • ✅ 凭证更新:立即应用新密码/用户
  • ✅ 新建数据库:添加到可用列表中(重新启动VS Code以更新工具模式)
  • ✅ 配置更改:下次连接时应用主机/端口更新
  • 🔄 现有连接:保持活性,直到自然回收

⚡ 延迟加载

仅在需要时创建连接池:

  • 📊 资源效率的:没有不必要的数据库连接
  • 🚀 快速启动:无论数据库是否可用,服务器都会立即启动
  • 🔍 状态可见性: list_databases 显示哪些池处于活动状态
  • 🛡️ 故障隔离:一个数据库问题不会影响其他问题

🏗️ 建筑

VS Code MCP Client
       ↓ (stdio)
MySQL MCP Server
       ↓ (lazy loading)
Connection Pools
       ↓ (MySQL protocol)  
Multiple Databases

关键设计原则:

  • 多数据库:每个数据库都有独立的配置和连接池
  • 安全:执行前进行命令验证,需要明确选择数据库
  • 演出:延迟加载+连接池,实现最佳资源使用
  • 可靠性:热重新加载+错误隔离,确保生产稳定性

🚀 发展

运行服务器

npm start

测试配置

# Test connection to all configured databases
node mcp-mysql-lite.js

环境变量

  • MYSQL_DATABASES:数据库配置的JSON数组
  • MYSQL_ALLOWED_COMMANDS:安全级别(默认/扩展/全部/自定义)
  • MYSQL_CONNECTION_LIMIT:每个池的最大连接数(默认值:4)
  • MYSQL_WAIT_FOR_CONNECTIONS:等待可用连接(默认值:true)

📄 许可证

MIT许可证-有关详细信息,请参阅许可证文件。


内置于❤️ 模型上下文协议生态系统