A Model Context Protocol (MCP) server for MySQL databases with multi-database support and read-only mode. Enables AI assistants to securely query multiple MySQL databases.
Project description
MCP MySQL Server
MySQL 数据库模型上下文协议 (MCP) 实现,支持与 MySQL 数据库的安全交互。该服务器组件促进 AI 应用程序(主机/客户端)与 MySQL 数据库之间的通信,使数据库探索和分析更加安全和结构化。
注意: MCP MySQL Server 不是设计为独立服务器,而是作为 AI 应用程序和 MySQL 数据库之间的通信协议实现。
功能特性
- 多数据库支持: 配置多个 MySQL 连接,每个连接作为独立的工具
- 只读模式: 将连接限制为仅执行 SELECT/SHOW/DESCRIBE 查询
- 列出可用的 MySQL 表作为资源(按连接分组)
- 读取表内容
- 执行 SQL 查询,具有适当的错误处理
- 通过环境变量或配置文件实现安全的数据库访问
- 全面的日志记录
安装
使用 uvx(推荐)
uvx mcp-mysql-server
使用 pip
pip install mcp-mysql-server
配置
多数据库配置(推荐)
您可以使用 JSON 配置文件或环境变量来配置多个 MySQL 连接。
选项 1:JSON 配置文件
创建 JSON 配置文件并设置 MYSQL_CONFIG_FILE 环境变量:
单数据库模式(每个连接一个默认数据库):
{
"connections": {
"config_manage": {
"host": "localhost",
"port": 3306,
"user": "your_username",
"password": "your_password",
"database": "mysql-config-manage"
},
"product_staging": {
"host": "localhost",
"port": 3306,
"user": "your_username",
"password": "your_password",
"database": "mysql-product-sg-staging"
}
}
}
多数据库模式(一个连接可访问多个数据库,推荐用于大量数据库场景):
当同一个 MySQL 服务器上有多个数据库需要访问时,使用 databases 数组指定允许访问的数据库列表。每个连接只生成一个工具,通过 database 参数指定要操作的数据库:
{
"connections": {
"local_server": {
"host": "localhost",
"port": 3306,
"user": "your_username",
"password": "your_password",
"databases": ["config_manage", "product_staging", "user_center", "orders", "inventory"],
"readonly": true
},
"production": {
"host": "prod-db.example.com",
"port": 3306,
"user": "prod_user",
"password": "prod_password",
"databases": ["orders", "inventory", "analytics", "users", "logs"],
"readonly": true
}
}
}
这将创建 2 个工具(而不是 10 个):
execute_sql_local_server- 可访问 5 个数据库execute_sql_production- 可访问 5 个数据库
调用时通过 database 参数指定目标数据库:
{
"query": "SELECT * FROM users LIMIT 10",
"database": "config_manage"
}
优势:当您有几十个数据库时,这种方式可以大大减少工具数量,避免工具列表过长。
选项 2:环境变量 JSON
设置 MYSQL_CONNECTIONS 环境变量为 JSON 字符串:
# 单数据库模式
MYSQL_CONNECTIONS='{"connections":{"config_manage":{"host":"localhost","port":3306,"user":"user","password":"pass","database":"db1"}}}'
# 多数据库模式(推荐)
MYSQL_CONNECTIONS='{"connections":{"server":{"host":"localhost","port":3306,"user":"user","password":"pass","databases":["db1","db2","db3","db4","db5"]}}}'
只读模式
您可以为任何连接启用只读模式,将其限制为仅执行 SELECT、SHOW、DESCRIBE 和 EXPLAIN 查询。当您希望防止意外的数据修改时,即使数据库用户具有写权限,这也很有用。
在 JSON 配置文件中
{
"connections": {
"production_readonly": {
"host": "prod-db.example.com",
"port": 3306,
"user": "readonly_user",
"password": "password",
"database": "production",
"readonly": true
},
"staging_full_access": {
"host": "staging-db.example.com",
"port": 3306,
"user": "admin_user",
"password": "password",
"database": "staging",
"readonly": false
}
}
}
使用传统环境变量
MYSQL_HOST=localhost
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
MYSQL_READONLY=true # 启用只读模式(接受: true, 1, yes)
只读模式下允许的查询
SELECT- 读取数据SHOW- 显示表、数据库等DESCRIBE/DESC- 描述表结构EXPLAIN- 解释查询执行计划USE- 切换数据库
只读模式下被阻止的查询
INSERT,UPDATE,DELETE- 数据修改CREATE,ALTER,DROP,TRUNCATE- 结构变更GRANT,REVOKE- 权限变更CALL- 存储过程(可能修改数据)- 事务语句 (
BEGIN,COMMIT,ROLLBACK)
单数据库配置(传统)
为了向后兼容,您仍然可以使用单数据库环境变量:
MYSQL_HOST=localhost # 数据库主机
MYSQL_PORT=3306 # 可选:数据库端口(未指定时默认为 3306)
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database
使用方法
与 Claude Desktop 一起使用
多数据库配置
将以下内容添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"mysql": {
"command": "uvx",
"args": ["mcp-mysql-server"],
"env": {
"MYSQL_CONFIG_FILE": "/path/to/mysql_config.json"
}
}
}
}
或者使用内联 JSON 配置:
{
"mcpServers": {
"mysql": {
"command": "uvx",
"args": ["mcp-mysql-server"],
"env": {
"MYSQL_CONNECTIONS": "{\"connections\":{\"config_manage\":{\"host\":\"localhost\",\"port\":3306,\"user\":\"user\",\"password\":\"pass\",\"database\":\"config_db\"},\"product_staging\":{\"host\":\"localhost\",\"port\":3306,\"user\":\"user\",\"password\":\"pass\",\"database\":\"product_db\"}}}"
}
}
}
}
这将创建:
- 工具:
execute_sql_config_manage,execute_sql_product_staging - 资源:
[config_manage] table_name,[product_staging] table_name
单数据库配置(传统)
{
"mcpServers": {
"mysql": {
"command": "uvx",
"args": ["mcp-mysql-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database"
}
}
}
}
与 Visual Studio Code / Cursor 一起使用
多数据库配置
将以下内容添加到您的 mcp.json:
{
"servers": {
"mysql": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-mysql-server"],
"env": {
"MYSQL_CONFIG_FILE": "/path/to/mysql_config.json"
}
}
}
}
使用本地开发版本
要使用本地开发版本而不是发布的包:
{
"servers": {
"mysql": {
"type": "stdio",
"command": "uv",
"args": [
"--directory",
"/path/to/mcp-mysql-server",
"run",
"mcp-mysql-server"
],
"env": {
"MYSQL_CONFIG_FILE": "/path/to/mysql_config.json"
}
}
}
}
单数据库配置(传统)
{
"servers": {
"mysql": {
"type": "stdio",
"command": "uvx",
"args": ["mcp-mysql-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "your_username",
"MYSQL_PASSWORD": "your_password",
"MYSQL_DATABASE": "your_database"
}
}
}
}
开发
# 克隆仓库
git clone https://github.com/aahowe/mcp-mysql-server.git
cd mcp-mysql-server
# 创建虚拟环境
python -m venv venv
source venv/bin/activate # 或在 Windows 上使用 `venv\Scripts\activate`
# 安装开发依赖
pip install -r requirements-dev.txt
# 运行测试
pytest
安全考虑
- 永远不要提交环境变量或凭据
- 使用具有最小所需权限的数据库用户
- 考虑在生产环境中实施查询白名单
- 监控和记录所有数据库操作
安全最佳实践
此 MCP 实现需要数据库访问才能运行。为了安全:
- 创建专用 MySQL 用户,具有最小权限
- 永远不要使用 root 凭据 或管理账户
- 限制数据库访问 仅为必要的操作
- 启用日志记录 以进行审计
- 定期安全审查 数据库访问
⚠️ 重要:配置数据库访问时始终遵循最小权限原则。
许可证
MIT 许可证 - 请参阅 LICENSE 文件以获取详细信息。
贡献
- Fork 此仓库
- 创建您的功能分支 (
git checkout -b feature/amazing-feature) - 提交您的更改 (
git commit -m 'Add some amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启 Pull Request
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcp_mysql_server-1.0.2.tar.gz.
File metadata
- Download URL: mcp_mysql_server-1.0.2.tar.gz
- Upload date:
- Size: 15.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
96e89d0373a05f379d61878c5b11c7e50ba566c6968e53d40eaff022a1cf120a
|
|
| MD5 |
b5a9ac61be6db400e64e38dd7e4556d8
|
|
| BLAKE2b-256 |
f4a1482244b31268204e40b31046904891e9f02da38149e4baea8ce2c98113a3
|
File details
Details for the file mcp_mysql_server-1.0.2-py3-none-any.whl.
File metadata
- Download URL: mcp_mysql_server-1.0.2-py3-none-any.whl
- Upload date:
- Size: 11.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.17 {"installer":{"name":"uv","version":"0.9.17","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3c58446ca204e3ec722a6db85c71d3868dc7464d8bfea99ea9a064d698721afc
|
|
| MD5 |
24ba3d8375678bc4a970b096600e0649
|
|
| BLAKE2b-256 |
47274164b1ab2cfde86fd351dd250fead4f76c2ec511703630b3bbff068be8f2
|