MySQL数据库服务器工具

mcp_mysql_server_pro是一款支持MySQL CRUD操作、数据库异常分析和自定义工具扩展的数据库服务器工具。

  • by lyuhaochen
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 Ustinianslife/mysql_mcp

使用说明

mcp_mysql_server_pro

引言

mcp_mysql_server_pro不仅涉及mysql CRUD操作,还包括数据库异常分析功能,使开发人员易于使用自定义工具进行扩展。

  • 支持所有模型上下文协议(MCP)传输模式(STDIO、SSE、流式Http)
  • 支持OAuth2.0
  • 支持多个SQL执行,用“;”分隔
  • 支持根据表注释查询数据库表名和字段
  • 支持SQL执行计划分析
  • 支持中文字段到拼音的转换
  • 支持表锁分析
  • 支持数据库运行状况分析
  • 支持三种角色的权限控制:只读、写入和管理员
    "readonly": ["SELECT", "SHOW", "DESCRIBE", "EXPLAIN"],  # Read-only permissions
    "writer": ["SELECT", "SHOW", "DESCRIBE", "EXPLAIN", "INSERT", "UPDATE", "DELETE"],  # Read-write permissions
    "admin": ["SELECT", "SHOW", "DESCRIBE", "EXPLAIN", "INSERT", "UPDATE", "DELETE", 
             "CREATE", "ALTER", "DROP", "TRUNCATE"]  # Administrator permissions
    
  • 支持提示模板调用

刀具清单

工具名称 描述
execute_sql sql执行工具,可以根据权限配置执行[“SELECT”、“SHOW”、“DESCRIBE”、“EXPLAIN”、“INSERT”、“UPDATE”、“DELETE”、“CREATE”、“ALTER”、“DROP”、“TRUNCATE”]命令
get_chinese_initials 将中文字段名转换为拼音首字母
get_db_health_running 分析MySQL健康状态(连接状态、事务状态、运行状态、锁定状态检测)
get_table_desc 根据表名在数据库中搜索表结构,支持多表查询
get_table_index 根据表名在数据库中搜索表索引,支持多表查询
get_table_lock 检查当前MySQL服务器中是否有行级锁或表级锁
get_table_name 根据表注释和描述在数据库中搜索表名
get_db_health_index_usage 获取当前连接的mysql数据库的索引使用情况,包括冗余索引情况、性能不佳的索引情况以及查询时间大于30秒的前5个未使用的索引情况
optimize_sql 专业的sql性能优化工具,根据MySQL执行计划、表结构信息、表数据量和表索引提供专家优化建议。
use_prompt_queryTableData 使用内置提示让模型在mcp中构造工具的链式调用(不是常用的固定工具,您需要修改代码才能启用它,有关详细信息,请参阅此类)

提示列表

提示名称 描述
analysis mysql提示符 这是一个用于分析mysql相关问题的提示符
查询表数据提示 这是使用工具查询表数据的提示。如果描述为空,则将其初始化为MySQL数据库查询助手

使用说明

安装和配置

  1. 安装程序包
pip install mysql_mcp_server_pro
  1. 配置环境变量 创建一个 .env 包含以下内容的文件:
# MySQL Database Configuration
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
# Optional, default is 'readonly'. Available values: readonly, writer, admin
MYSQL_ROLE=readonly
  1. 运行服务
# SSE mode
mysql_mcp_server_pro --mode sse --envfile /path/to/.env

## Streamable Http mode (default)
mysql_mcp_server_pro --envfile /path/to/.env

# Streamable Http  oauth Authentication
mysql_mcp_server_pro --oauth true

  1. mcp客户端

请参阅“使用uv启动服务” ^_^

注:

  • 这 .env 文件应放置在运行命令的目录中,或使用--envfile参数指定路径
  • 您还可以直接在您的环境中设置这些变量
  • 确保数据库配置正确并且可以连接

使用uvx运行,客户端配置

  • 此方法可以直接在MCP支持的客户端中使用,无需下载源代码。例如,统一乾文插件、trae编辑器等。
{
	"mcpServers": {
		"mysql": {
			"command": "uvx",
			"args": [
				"--from",
				"mysql_mcp_server_pro",
				"mysql_mcp_server_pro",
				"--mode",
				"stdio"
			],
			"env": {
				"MYSQL_HOST": "192.168.x.xxx",
				"MYSQL_PORT": "3306",
				"MYSQL_USER": "root",
				"MYSQL_PASSWORD": "root",
				"MYSQL_DATABASE": "a_llm",
				"MYSQL_ROLE": "admin"
			}
		}
	}
}

基于流式Http模式的本地开发

  • 使用uv启动服务

将以下内容添加到您的mcp客户端工具中,如游标、cline等。

mcp-json如下:

{
  "mcpServers": {
    "mysql_mcp_server_pro": {
      "name": "mysql_mcp_server_pro",
      "type": "streamableHttp",
      "description": "",
      "isActive": true,
      "url": "http://localhost:3000/mcp/"
    }
  }
}

修改.env文件内容,以使用数据库详细信息更新数据库连接信息:

# MySQL Database Configuration
MYSQL_HOST=192.168.xxx.xxx
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=a_llm
MYSQL_ROLE=admin

启动命令:

# Download dependencies
uv sync

# Start
uv run -m mysql_mcp_server_pro.server

# Custom env file location
uv run -m mysql_mcp_server_pro.server --envfile /path/to/.env

# oauth Authentication
uv run -m mysql_mcp_server_pro.server --oauth true

SSE模式下的地方发展

  • 使用uv启动服务

将以下内容添加到您的mcp客户端工具中,如游标、cline等。

mcp-json如下:

{
  "mcpServers": {
    "mysql_mcp_server_pro": {
      "name": "mysql_mcp_server_pro",
      "description": "",
      "isActive": true,
      "url": "http://localhost:9000/sse"
    }
  }
}

修改.env文件内容,以使用数据库详细信息更新数据库连接信息:

# MySQL Database Configuration
MYSQL_HOST=192.168.xxx.xxx
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=root
MYSQL_DATABASE=a_llm
MYSQL_ROLE=admin

启动命令:

# Download dependencies
uv sync

# Start
uv run -m mysql_mcp_server_pro.server --mode sse

# Custom env file location
uv run -m mysql_mcp_server_pro.server --mode sse --envfile /path/to/.env

STDIO模式下的地方发展

将以下内容添加到您的mcp客户端工具中,如游标、cline等。

mcp-json如下:

{
  "mcpServers": {
      "operateMysql": {
        "isActive": true,
        "name": "operateMysql",
        "command": "uv",
        "args": [
          "--directory",
          "/Volumes/mysql_mcp_server_pro/src/mysql_mcp_server_pro",    # Replace this with your project path
          "run",
          "-m",
          "mysql_mcp_server_pro.server",
          "--mode",
          "stdio"
        ],
        "env": {
          "MYSQL_HOST": "localhost",
          "MYSQL_PORT": "3306",
          "MYSQL_USER": "root", 
          "MYSQL_PASSWORD": "123456",
          "MYSQL_DATABASE": "a_llm",
          "MYSQL_ROLE": "admin"
       }
    }
  }
} 

自定义工具扩展

  1. 在handles包中添加一个新的工具类,从BaseHandler继承,并实现get_tool_description和run_tool方法

  2. 将新工具导入 初始化.py使其在服务器中可用

OAuth2.0身份验证

  1. 启动身份验证服务。默认情况下,它使用内置的OAuth 2.0密码模式身份验证。您可以在env文件中修改自己的身份验证服务地址。
uv run -m mysql_mcp_server_pro.server --oauth true
  1. 访问身份验证服务http://localhost:3000/login.默认用户名和密码在env文件中配置。

  2. 复制令牌并将其添加到请求标头中,例如:

{
  "mcpServers": {
    "mysql_mcp_server_pro": {
      "name": "mysql_mcp_server_pro",
      "type": "streamableHttp",
      "description": "",
      "isActive": true,
      "url": "http://localhost:3000/mcp/",
      "headers": {
        "authorization": "bearer TOKEN_VALUE"
      }
    }
  }
}

示例

  1. 创建新表并插入数据,提示格式如下:
# Task
   Create an organizational structure table with the following structure: department name, department number, parent department, is valid.
# Requirements
 - Table name: department
 - Common fields need indexes
 - Each field needs comments, table needs comment
 - Generate 5 real data records after creation
  1. 根据表注释查询数据,提示如下:
Search for data with Department name 'Executive Office' in Department organizational structure table
  1. 分析慢速SQL,提示如下:
select * from t_jcsjzx_hjkq_cd_xsz_sk xsz
left join t_jcsjzx_hjkq_jcd jcd on jcd.cddm = xsz.cddm 
Based on current index situation, review execution plan and provide optimization suggestions in markdown format, including table index status, execution details, and optimization recommendations
  1. 分析SQL死锁问题,提示如下:
update t_admin_rms_zzjg set sfyx = '0' where xh = '1' is stuck, please analyze the cause
  1. 分析健康状态提示如下
Check the current health status of MySQL