MySQL只读查询服务器

一个基于MCP协议的MySQL只读查询服务器,允许AI安全地执行SELECT查询和数据库结构分析,适用于数据分析和安全查询场景。

  • by yaokun123
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 yaokun123/demo_mcp_sse

使用说明

MySQL MCP 服务器(只读版本)

这是一个用于 Cursor 的 MCP (Model Context Protocol) 服务器,允许 AI 直接查询您的 MySQL 数据库。

🔒 安全特性

⚠️ 重要:此服务器仅支持只读操作!

  • ✅ 允许:SELECT、SHOW、DESCRIBE、EXPLAIN 等查询操作
  • ❌ 禁止:INSERT、UPDATE、DELETE、DROP、CREATE、ALTER 等修改操作
  • 🛡️ 多层安全保护,确保数据安全

功能特性

  • 🔍 执行 SQL 查询(仅只读)
  • 📊 查看数据库表结构
  • 📋 列出所有数据库和表
  • 🔒 安全的参数化查询
  • 📈 数据分析支持
  • 🛡️ 自动拦截所有写操作

安装步骤

1. 创建虚拟环境并安装依赖

# 创建虚拟环境
python -m venv venv

# 激活虚拟环境
source venv/bin/activate  # Mac/Linux
# 或 venv\Scripts\activate  # Windows

# 安装依赖
pip install -r requirements.txt

2. 配置数据库连接

复制 .env.example 文件为 .env 并填入您的数据库信息:

cp .env.example .env

编辑 .env 文件:

MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database

3. 配置 Cursor

将以下配置添加到 Cursor 的 MCP 配置文件中:

Mac/Linux: ~/Library/Application Support/Cursor/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json

Windows: %APPDATA%\Cursor\User\globalStorage\saoudrizwan.claude-dev\settings\cline_mcp_settings.json

{
  "mcpServers": {
    "mysql-database": {
      "command": "/Users/yaokun/anaconda3/envs/company_desc_2/bin/python",
      "args": [
        "/Users/yaokun/www/cursor_demo/demo_mcp_sse/server.py"
      ],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_username",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "your_database"
      }
    }
  }
}

4. 重启 Cursor

配置完成后,重启 Cursor 使配置生效。

使用方法

配置完成后,您可以在 Cursor 中直接向 AI 提问:

示例查询

"帮我查询用户表中的所有数据"
"分析一下订单表的销售趋势"
"列出数据库中所有的表"
"查看 users 表的结构"
"统计每个月的订单数量"

可用工具

MCP 服务器提供以下工具:

  1. execute_query - 执行 SQL 查询
  2. list_databases - 列出所有数据库
  3. list_tables - 列出指定数据库的所有表
  4. describe_table - 查看表结构
  5. get_table_info - 获取表的详细信息(包括索引、外键等)

安全注意事项

  • ⚠️ 不要在生产环境中使用具有完全权限的数据库用户
  • ⚠️ 建议创建一个只读用户用于 MCP 服务器
  • ⚠️ .env 文件包含敏感信息,不要提交到版本控制系统
  • ⚠️ 使用参数化查询防止 SQL 注入

创建只读数据库用户(推荐)

-- 创建只读用户
CREATE USER 'mcp_readonly'@'localhost' IDENTIFIED BY 'your_password';

-- 授予只读权限
GRANT SELECT ON your_database.* TO 'mcp_readonly'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

故障排除

连接失败

  • 检查数据库连接信息是否正确
  • 确认 MySQL 服务正在运行
  • 检查防火墙设置

Cursor 无法识别 MCP 服务器

  • 确认配置文件路径正确
  • 检查 Python 路径是否正确
  • 重启 Cursor

依赖安装失败

  • 确保使用正确的 Python 版本(3.8+)
  • 尝试升级 pip: pip install --upgrade pip

项目结构

demo_mcp_sse/
├── server.py              # MCP 服务器主文件
├── requirements.txt       # Python 依赖
├── .env.example          # 环境变量示例
├── .env                  # 环境变量(需要创建)
└── README.md             # 本文件

技术栈

  • Python 3.8+
  • mcp (Model Context Protocol)
  • PyMySQL (MySQL 驱动)
  • python-dotenv (环境变量管理)

贡献

欢迎提交 Issue 和 Pull Request!