MySQL MCP Server
A comprehensive MySQL interface for the Model Context Protocol that enables database management, SQL execution, and performance analysis. It features a robust Git-style version control system with automatic backups, secure permission management, and precise rollback capabilities for all data operations.
README
MySQL MCP Server
一个基于 Model Context Protocol (MCP) 的MySQL数据库服务器,具备企业级版本控制和安全权限管理功能。
🎯 功能特性
📊 核心数据库功能
- 🔍 执行自定义SQL查询 - 支持任意MySQL查询语句
- 📋 数据库管理 - 显示数据库、表、索引等信息
- 🔧 表结构查看 - 获取表的详细结构和统计信息
- 📈 性能分析 - 查询执行计划分析和数据库大小统计
- 🛠️ 数据操作 - 支持创建表、插入数据等操作
🛡️ 安全与权限控制
- 🔐 三级权限控制 - 精确控制INSERT/UPDATE/DELETE权限
- 🔒 默认只读模式 - 防止意外数据修改和删除
- 🎨 美观的表格输出 - 查询结果以表格形式展示
- 🔐 安全连接 - 支持SSL连接和完整的认证配置
⚡ Git风格版本控制系统
- 📚 智能备份策略 - 自动备份所有增删改操作
- 🔄 精确回滚功能 - 可回滚到任意历史版本
- 🕐 微秒级时间戳 - 精确的操作时间记录
- 🎭 会话隔离 - 每个对话的版本历史独立管理
- 💾 持久化存储 - 使用SQLite存储版本历史
- 📝 完整SQL记录 - 记录每个操作的完整SQL语句
🔧 开发友好
- 🔑 环境变量支持 - 通过环境变量预设数据库连接信息
- 🎛️ 灵活配置 - 支持多种连接和权限配置方式
安装
本地安装
- clone到本地:
git clone https://github.com/csrts/MySQL_MCP_Server
cd MySQL_MCP_Server
-
安装依赖:
npm install -
添加到你使用的MCP Clients:
例:Cursor
"mysql": { "command": "node", "args": [ "path_your_mcp_server/src/index.js" ], "env": { "MYSQL_HOST": "your_mysql_host", "MYSQL_PORT": "3306", "MYSQL_USER": "mysql_username", "MYSQL_PASSWORD": "mysql_password", "MYSQL_DATABASE": "mysql_database", "MYSQL_SSL": "false", "ALLOW_INSERT_OPERATION": "false", "ALLOW_UPDATE_OPERATION": "false", "ALLOW_DELETE_OPERATION": "false" } }
配置
MCP客户端配置
在您的MCP客户端配置文件中添加以下配置:
"mysql": {
"command": "node",
"args": [
"path_your_mcp_server/src/index.js"
],
"env": {
"MYSQL_HOST": "your_mysql_host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mysql_username",
"MYSQL_PASSWORD": "mysql_password",
"MYSQL_DATABASE": "mysql_database",
"MYSQL_SSL": "false",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
}
Claude Desktop配置示例
如果您使用Claude Desktop,请在以下位置创建或编辑配置文件:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mysql": {
"command": "node",
"args": [
"path_your_mcp_server/src/index.js"
],
"env": {
"MYSQL_HOST": "your_mysql_host",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mysql_username",
"MYSQL_PASSWORD": "mysql_password",
"MYSQL_DATABASE": "mysql_database",
"MYSQL_SSL": "false",
"ALLOW_INSERT_OPERATION": "false",
"ALLOW_UPDATE_OPERATION": "false",
"ALLOW_DELETE_OPERATION": "false"
}
}
}
}
配置字段说明
command: 要执行的命令(npx、node等)args: 命令参数数组"path_your_mcp_server/src/index.js": 替换为实际MCP Server的绝对路径
env(可选): 环境变量对象cwd(可选): 当前工作目录,仅在本地开发时需要
环境变量说明:
数据库连接:
MYSQL_HOST: 数据库主机地址MYSQL_PORT: 数据库端口MYSQL_USER: 数据库用户名(必需)MYSQL_PASSWORD: 数据库密码(必需)MYSQL_DATABASE: 数据库名称(必需)MYSQL_SSL: 是否使用SSL连接
权限控制变量(安全):
ALLOW_INSERT_OPERATION: 允许INSERT、CREATE TABLE等操作(默认:false)ALLOW_UPDATE_OPERATION: 允许UPDATE、ALTER TABLE等操作(默认:false)ALLOW_DELETE_OPERATION: 允许DELETE、DROP TABLE等操作(默认:false)
🛠️ 可用工具 (14个)
📊 基础查询工具
1. mysql_query
执行自定义MySQL查询
参数:
query(必需): SQL查询语句host,port,user,password,database,ssl(可选): 数据库连接参数
示例:
SELECT * FROM users WHERE age > 18 LIMIT 10
2. mysql_show_tables
显示数据库中的所有表
参数: 连接参数(如果配置了环境变量则无需传递)
3. mysql_describe_table
查看表的结构信息
参数:
table(必需): 表名- 其他连接参数(可选)
🗄️ 数据库管理工具
4. mysql_show_databases
显示所有可用的数据库
参数: 连接参数(可选)
5. mysql_table_info
获取表的详细统计信息
参数:
table(必需): 表名- 其他连接参数(可选)
功能: 显示表引擎、行数、数据大小、索引大小、创建时间等
6. mysql_show_indexes
显示表的索引信息
参数:
table(必需): 表名- 其他连接参数(可选)
7. mysql_show_processes
显示当前MySQL进程列表
参数: 连接参数(可选)
8. mysql_database_size
获取数据库大小统计
参数: 连接参数(可选)
功能: 显示数据库总大小、表数量及各表大小排序
🔧 数据操作工具
9. mysql_create_table
创建新表
参数:
table_name(必需): 表名schema(必需): 表结构定义- 其他连接参数(可选)
权限要求: ALLOW_INSERT_OPERATION=true
10. mysql_insert_data
插入数据到表中
参数:
table(必需): 表名data(必需): 数据对象(键值对)- 其他连接参数(可选)
权限要求: ALLOW_INSERT_OPERATION=true
📈 性能分析工具
11. mysql_explain_query
分析查询执行计划
参数:
query(必需): 要分析的SQL查询format(可选): 输出格式 (TRADITIONAL,JSON,TREE)- 其他连接参数(可选)
🕐 版本控制工具
12. mysql_list_versions
列出版本历史记录
参数:
limit(可选): 显示记录数量(默认:50)session_only(可选): 是否只显示当前会话(默认:true)operation_type(可选): 按操作类型过滤target_table(可选): 按目标表过滤
示例输出:
Version ID: 1
Timestamp: 2025-07-10 16:32:07.469221707
Operation: INSERT
Table: users
Affected Rows: 1
Description: INSERT operation: 1 row(s) inserted into users
13. mysql_rollback_to_version
回滚到指定版本
参数:
version_id(必需): 要回滚到的版本ID- 其他连接参数(可选)
支持的回滚操作:
- INSERT回滚: 自动删除插入的数据
- UPDATE回滚: 恢复到修改前的原始状态
- DELETE回滚: 重新插入被删除的数据
- CREATE_TABLE回滚: 删除创建的表
- DROP_TABLE回滚: 重新创建表和数据
14. mysql_clear_version_history
清理版本历史记录
参数:
confirm(必需): 确认删除(必须为true)session_only(可选): 是否只清理当前会话(默认:true)
🛡️ 版本控制系统详解
自动备份策略
系统会根据操作类型智能创建备份:
- DELETE操作: 在删除前备份即将被删除的数据
- UPDATE操作: 在修改前备份原始数据
- INSERT操作: 记录插入的详细信息(ID范围等)
- CREATE_TABLE操作: 记录表创建信息
- DROP_TABLE操作: 备份完整的表结构和数据
版本历史存储
使用SQLite数据库存储版本历史:
CREATE TABLE version_history (
id INTEGER PRIMARY KEY AUTOINCREMENT,
session_id TEXT NOT NULL, -- 会话隔离
timestamp TEXT NOT NULL, -- 微秒级时间戳
operation_type TEXT NOT NULL, -- 操作类型
target_table TEXT, -- 目标表
sql_query TEXT, -- 完整的SQL语句
backup_data TEXT, -- 备份数据(JSON格式)
affected_rows INTEGER, -- 影响行数
description TEXT -- 操作描述
);
精确回滚机制
- DELETE回滚: 使用INSERT语句重新插入被删除的数据
- UPDATE回滚: 使用UPDATE语句恢复到修改前的原始值
- INSERT回滚: 使用DELETE语句删除插入的数据
- 表操作回滚: 重新创建或删除相应的表结构
使用示例
基础查询
使用mysql_query工具执行:
query: SELECT id, name, email FROM users WHERE status = 'active'
表管理
使用mysql_show_tables工具查看所有表
使用mysql_describe_table工具查看'users'表结构
使用mysql_table_info工具获取'users'表的详细统计
数据操作(需要权限)
使用mysql_insert_data工具插入数据:
table: users
data: {"name": "John Doe", "email": "john@example.com"}
版本控制
使用mysql_list_versions工具查看版本历史
使用mysql_rollback_to_version工具回滚:
version_id: 5
性能分析
使用mysql_explain_query工具分析查询:
query: SELECT * FROM users WHERE email = 'test@example.com'
format: JSON
输出格式
查询结果将以美观的ASCII表格格式显示:
┌────┬──────────┬─────────────────────┐
│ id │ name │ email │
├────┼──────────┼─────────────────────┤
│ 1 │ John Doe │ john@example.com │
│ 2 │ Jane Doe │ jane@example.com │
└────┴──────────┴─────────────────────┘
🔐 安全注意事项
权限控制
- 🔒 默认只读模式:所有写操作默认禁用
- ⚠️ 三级权限控制:
ALLOW_INSERT_OPERATION=false: 禁用INSERT、CREATE TABLE、CREATE DATABASE操作ALLOW_UPDATE_OPERATION=false: 禁用UPDATE、ALTER TABLE操作ALLOW_DELETE_OPERATION=false: 禁用DELETE、DROP TABLE、DROP DATABASE、TRUNCATE操作
数据安全
- 🔐 数据库凭据安全:数据库凭据通过环境变量管理,不会被持久化存储
- 🔒 连接管理:每次查询都会创建新的连接并在完成后关闭
- 🛡️ 版本控制保护:所有增删改操作自动备份,支持精确回滚
- 📚 操作记录:完整记录所有SQL操作和时间戳
生产环境建议
- 🛡️ 保持权限控制为false,或使用只读数据库用户
- 🚨 谨慎开启写权限:如需开启写权限,请谨慎设置对应环境变量为true
- 💾 定期清理版本历史:使用
mysql_clear_version_history工具管理存储空间 - 🔍 监控操作日志:定期检查版本历史记录
系统要求
- Node.js >= 18.0.0
- MySQL 5.7+ 或 8.0+
- npm 或 yarn
依赖包
{
"dependencies": {
"@modelcontextprotocol/sdk": "^0.6.0",
"mysql2": "^3.11.0",
"better-sqlite3": "^11.8.0"
}
}
故障排除
连接失败
- 检查MySQL服务是否运行
- 验证用户名、密码和数据库名称
- 确认主机和端口配置正确
- 检查防火墙设置
权限错误
- 确保MySQL用户具有访问指定数据库的权限
- 对于修改操作,确保用户具有相应的写权限
- 检查环境变量中的权限控制设置
SSL连接问题
- 如果MySQL服务器要求SSL,请将
ssl参数设置为true - 检查MySQL服务器的SSL配置
版本控制问题
- 检查SQLite数据库文件
mysql_versions.db是否可写 - 确保有足够的磁盘空间存储版本历史
- 如需重置版本历史,可删除
mysql_versions.db文件
开发
本地开发
# 克隆项目
git clone https://github.com/csrts/MySQL_MCP_Server
cd MySQL_MCP_Server
# 安装依赖
npm install
版本控制数据库
版本控制系统使用SQLite数据库mysql_versions.db存储历史记录。该文件会在首次运行时自动创建。
许可证
MIT License
贡献
欢迎提交问题和PR!请确保您的代码符合项目的编码规范。
🎯 更新日志
v2.0.0 - 企业级版本控制系统
- ✅ 新增 8个扩展MySQL工具
- ✅ 实现Git风格版本控制系统
- ✅ 新增 3个版本控制工具
- ✅ 智能备份与精确回滚功能
- ✅ 会话隔离和微秒级时间戳
- ✅ 完整SQL语句记录
- ✅ 企业级数据安全保障
v1.0.0 - 基础功能
- ✅ 基础MySQL查询功能
- ✅ 权限控制系统
- ✅ 环境变量支持
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.