MySQL安全访问服务

一款通过MCP协议提供MySQL数据库安全访问的服务,支持数据库查询、表结构查看等功能,适用于AI助手安全访问数据库的场景。

  • by AbrJA
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 AbrJA/mcp-mysql

使用说明

MCP MySQL服务器

一种模型上下文协议(MCP)服务器,提供对MySQL数据库的安全访问。此服务器将MySQL数据库操作作为MCP工具公开,允许AI助手和其他MCP客户端安全地与您的数据库交互。

特性

  • 安全查询执行:只读数据库访问只允许SELECT查询
  • 数据库架构检查:列出表和查看表架构
  • 令牌身份验证:内置基于令牌的身份验证中间件
  • Docker支持:包括Docker Compose设置,便于MySQL部署
  • FastMCP框架:基于FastMCP构建,实现高效的MCP服务器实施

可用工具

服务器公开了三个MCP工具:

  1. list_tables():列出已配置数据库中的所有表
  2. get_table_schema(表名):返回特定表的CREATE TABLE语句
  3. run_query(查询):对数据库执行SELECT查询(限制为100个结果)

先决条件

  • Python 3.8+
  • MySQL 8.0+(或使用附带的Docker Compose设置)
  • 虚拟环境(推荐)

安装

  1. 克隆存储库:
git clone <repository-url>
cd mcp-mysql
  1. 创建并激活虚拟环境:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. 安装依赖项:
pip install -r requirements.txt

配置

使用环境变量配置服务器:

变量 描述 默认值
MYSQL_HOST MySQL服务器主机名 localhost
MYSQL_PORT MySQL服务器端口 3306
MYSQL_USER MySQL用户名 root
MYSQL_PASSWORD MySQL密码 (空)
MYSQL_DATABASE 数据库名称 (空)
AUTH_TOKEN API访问的身份验证令牌 (无)

Docker快速入门

  1. 启动MySQL数据库:
docker-compose up -d

这将:

  • 启动MySQL 8.0容器
  • 创建测试数据库(test_db)
  • 使用示例表(用户、产品、订单)进行初始化
  • 暴露端口3306上的MySQL
  1. 运行MCP服务器:
./run_server.sh

或手动:

export MYSQL_HOST=localhost
export MYSQL_USER=root
export MYSQL_PASSWORD=password
export MYSQL_DATABASE=test_db
export AUTH_TOKEN=secret-token
python server.py

服务器将在端口8000上启动。

用法

作为MCP服务器

该服务器使用可流式HTTP传输作为HTTP MCP服务器运行。配置您的MCP客户端以连接到:

http://localhost:8000/mcp

在Authorization标头中包含身份验证令牌:

Authorization: Bearer <your-auth-token>

数据库操作示例

包含的示例数据库有三个表:

  • 用户:用户信息(id、用户名、电子邮件、created_at)
  • 产品:产品目录(id、名称、价格、库存)
  • 订单:订单记录(id、user_id、total_amount、Order_date)

您可以运行的示例查询:

SELECT * FROM users;
SELECT name, price FROM products WHERE stock > 20;
SELECT u.username, o.total_amount FROM orders o JOIN users u ON o.user_id = u.id;

安全

  • 查询限制:只允许使用SELECT语句来防止数据修改
  • 令牌身份验证:所有MCP端点都需要承载令牌身份验证
  • 连接处理:数据库连接得到正确管理,并在每次操作后关闭
  • 错误处理:详细的错误消息,不暴露敏感信息

发展

项目结构

mcp-mysql/
├── server.py              # Main MCP server implementation
├── requirements.txt       # Python dependencies
├── run_server.sh         # Server startup script
├── docker-compose.yml    # Docker configuration for MySQL
└── docker-init/
    └── init.sql          # Database initialization script

依赖项

  • 快速多通道处理:用于构建MCP服务器的FastMCP框架
  • mysql连接器python:Python官方MySQL驱动程序
  • 优维康:用于运行应用程序的ASGI服务器
  • python dotenv:环境变量管理

故障排除

连接问题

如果你无法连接到MySQL:

  • 验证Docker容器是否正在运行: docker-compose ps
  • 检查MySQL日志: docker-compose logs db
  • 确保端口3306尚未使用
  • 如果在主机上运行服务器,请设置 MYSQL_HOST=127.0.0.1 并验证MySQL是否正在监听 MYSQL_PORT.

身份验证错误

如果您收到401未经授权:

  • 验证AUTH_TOKEN是否设置正确
  • 在授权标头中包含令牌: Bearer <token>
  • 检查客户端和服务器上的令牌是否匹配

许可证

[在此处添加您的许可证]

贡献

[在此处添加贡献指南]