MySQL数据库协议服务器

一个全面的MySQL数据库操作协议服务器,提供数据库分析、健康监测和AI辅助数据库管理等高级功能。

  • by 404-error-notfound
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 404-error-notfound/mcp_mysql

使用说明

MySQL MCP服务器

一个全面的模型上下文协议(MCP)服务器,用于MySQL数据库操作,具有数据库分析、健康监控和人工智能辅助数据库管理的高级功能。

🚀 特性

MySQL MCP服务器 超越了基本的CRUD操作,提供了强大的数据库分析功能和可扩展的自定义工具框架。

🔌 运输方式

  • STDIO模式:与Cursor、Cline等MCP客户端直接集成
  • SSE模式:web应用程序的基于HTTP的服务器发送事件

🗄️ 数据库操作

  • 跨数据库访问:连接一次,无需切换连接即可访问所有数据库
  • 多语句执行:执行多个用“;”分隔的SQL语句
  • 智能表发现:按注释和描述查找表格
  • SQL执行计划分析:性能优化见解

🛡️ 安全和权限

  • 基于角色的访问控制:三个权限级别(只读、写入、管理)
  • SQL注释支持:使用处理SQL语句 -- 和 /* */ 评论

🔍 高级分析

  • 健康监测:连接、事务和锁状态分析
  • 性能洞察:索引使用分析和优化建议
  • 锁检测:行级和表级锁监控
  • 中文文本处理:中文字段名的拼音转换

🤖 人工智能集成

  • 提示模板:用于数据库分析和查询的预构建AI提示
  • 情境感知辅助:智能数据库操作指南

📋 权限级别

角色 权限 用例
只读 SELECT, SHOW, DESCRIBE, EXPLAIN, USE 报告和分析的只读访问
作家 只读+ INSERT, UPDATE, DELETE 应用程序开发和数据操作
管理员 完整的数据库管理 包括DDL、用户管理、备份/恢复在内的完整数据库管理

🛠️ 可用工具

数据库操作

工具 说明
execute_sql 使用基于角色的权限控制执行SQL语句
get_databases 列出所有可用数据库(不包括系统数据库)

架构发现

工具 说明
get_table_desc 跨数据库获取表结构(支持 database.table 格式)
get_table_index 使用跨数据库支持检索表索引
get_table_name 按注释和描述查找表格

性能与健康

工具 说明
get_db_health_running 分析MySQL运行状况(连接、事务、锁)
get_db_health_index_usage 索引使用分析及性能建议
get_table_lock 检测行级和表级锁

公用事业

工具 说明
get_chinese_initials 将中文字段名转换为拼音首字母

🤖 AI提示模板

提示模板 目的
analyzing-mysql-prompt 全面的MySQL问题分析和故障排除
query-table-data-prompt 人工智能辅助的智能表格数据查询

🚀 快速开始

先决条件

  • Python 3.10+
  • UV包管理器
  • MySQL服务器

安装

📦 安装UV包管理器

窗户:

# Using PowerShell (Recommended)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# Or using pip
pip install uv

# Or using Chocolatey
choco install uv

# Or using Scoop
scoop install uv

Linux/macOS:

# Using curl
curl -LsSf https://astral.sh/uv/install.sh | sh

# Or using pip
pip install uv

🔽 项目设置

  1. 克隆和安装依赖关系:

    Windows(PowerShell):

    git clone <repository-url>
    cd mcp_mysql
    uv sync
    

    Linux/macOS:

    git clone <repository-url>
    cd mcp_mysql
    uv sync
    
  2. 配置数据库连接:

    创建一个 .env 项目根目录中的文件:

    Windows(PowerShell):

    # Create .env file using PowerShell
    @"
    # MySQL Database Configuration
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USER=your_username
    MYSQL_PASSWORD=your_password
    # MYSQL_DATABASE=specific_db  # Optional: leave empty for cross-database access
    MYSQL_ROLE=admin  # Options: readonly, writer, admin
    "@ | Out-File -FilePath ".env" -Encoding utf8
    

    或手动创建 .env 包含内容的文件:

    # MySQL Database Configuration
    MYSQL_HOST=localhost
    MYSQL_PORT=3306
    MYSQL_USER=your_username
    MYSQL_PASSWORD=your_password
    # MYSQL_DATABASE=specific_db  # Optional: leave empty for cross-database access
    MYSQL_ROLE=admin  # Options: readonly, writer, admin
    

    对于远程MySQL服务器(示例):

    MYSQL_HOST=192.168.1.100
    MYSQL_PORT=3306
    MYSQL_USER=root
    MYSQL_PASSWORD=your_secure_password
    MYSQL_ROLE=admin
    

运行服务器

SSE模式(基于Web)

Windows(PowerShell):

# Start SSE server on http://localhost:9000
uv run server.py

Linux/macOS:

# Start SSE server on http://localhost:9000
uv run server.py

MCP客户端配置(SSE):

{
  "mcpServers": {
    "mysql": {
      "name": "mysql",
      "description": "MySQL database operations",
      "isActive": true,
      "baseUrl": "http://localhost:9000/sse"
    }
  }
}

STDIO模式(直接集成)

Windows(PowerShell):

# Start STDIO server
uv run server.py --stdio

Linux/macOS:

# Start STDIO server
uv run server.py --stdio

MCP客户端配置(STDIO):

窗户:

{
  "mcpServers": {
    "mysql": {
      "name": "mysql",
      "command": "uv",
      "args": [
        "--directory", "C:\\path\\to\\mcp_mysql\\src",
        "run", "server.py", "--stdio"
      ],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_username",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_ROLE": "admin"
      }
    }
  }
}

Linux/macOS:

{
  "mcpServers": {
    "mysql": {
      "name": "mysql",
      "command": "uv",
      "args": [
        "--directory", "/path/to/mcp_mysql/src",
        "run", "server.py", "--stdio"
      ],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_username",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_ROLE": "admin"
      }
    }
  }
}

🛠️ Windows特定配置说明

常见问题及解决方法

PowerShell执行策略: 如果遇到执行策略错误,请运行:

Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

路径分隔符:

  • 使用双反睫毛 \\ 或正斜杠 / JSON配置
  • 例子: "C:\\Users\\YourName\\mcp_mysql" 或 "C:/Users/YourName/mcp_mysql"

Windows中的环境变量:

# Set environment variables temporarily (current session)
$env:MYSQL_HOST = "localhost"
$env:MYSQL_USER = "your_username"
$env:MYSQL_PASSWORD = "your_password"

# Run the server with environment variables
uv run server.py --stdio

Windows防火墙: 如果连接到远程MySQL服务器,请确保MySQL端口(默认3306)允许通过Windows防火墙。

🔧 使用自定义工具进行扩展

  1. 创建新的工具类:

    # src/handles/my_custom_tool.py
    from .base import BaseHandler
    from mcp.types import Tool, TextContent
    
    class MyCustomTool(BaseHandler):
        name = "my_custom_tool"
        description = "Description of what this tool does"
        
        def get_tool_description(self) -> Tool:
            # Define tool schema
            pass
            
        async def run_tool(self, arguments: dict) -> list[TextContent]:
            # Implement tool logic
            pass
    
  2. 注册工具:

    # src/handles/__init__.py
    from .my_custom_tool import MyCustomTool
    
    __all__ = [..., "MyCustomTool"]
    

💡 使用示例

跨数据库操作

列出所有数据库:

Use get_databases tool

跨数据库查询:

SELECT u.name, o.total 
FROM users_db.users u
JOIN orders_db.orders o ON u.id = o.user_id;

表结构分析:

get_table_desc: "users_db.users,orders_db.orders"

人工智能辅助操作

性能分析:

Analyze this slow query and suggest optimizations:
SELECT * FROM large_table lt 
LEFT JOIN another_table at ON lt.id = at.foreign_id 
WHERE lt.created_date > '2024-01-01'

健康监测:

Check MySQL health status and identify any performance issues

智能表发现:

Find all tables related to user management across all databases

僵局分析:

Analyze why this UPDATE statement is stuck:
UPDATE users SET status = 'active' WHERE id = 123

📖 文档

🤝 贡献

  1. 分叉存储库
  2. 创建要素分支
  3. 添加您的自定义工具或改进
  4. 提交拉取请求

📄 许可证

这个项目是开源的。请检查许可证文件以了解详细信息。


如果您觉得此存储库有用,请将其标记为星号! ⭐