MySQL数据库协议服务器

一个提供连接和查询MySQL数据库工具的服务,通过标准化接口实现AI助手与数据库的交互。

  • by dvalenza
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 dvalenza/Generic-MySQL-MCP-Server

使用说明

MySQL MCP服务器

一种模型上下文协议(MCP)服务器,提供连接和查询通用MySQL数据库的工具。该服务器允许AI助手通过标准化的接口与MySQL数据库进行交互。

特性

  • 数据库连接管理:具有可配置超时的安全连接池
  • 查询执行:支持SELECT、INSERT、UPDATE、DELETE操作
  • 架构检查:用于探索数据库结构和表模式的工具
  • 连接测试:内置连接健康检查
  • 查询说明:解释性能分析的查询支持
  • 安全:参数化查询以防止SQL注入

可用工具

1. query_database

在MySQL数据库上执行SELECT查询。

  • 输入:SQL SELECT查询和可选参数
  • 输出:JSON格式的查询结果

2. update_database

执行INSERT、UPDATE、DELETE、CREATE、ALTER或DROP查询。

  • 输入:SQL修改查询和可选参数
  • 输出:受影响的行数

3. describe_table

获取特定表的详细架构信息。

  • 输入:表名称
  • 输出:列定义、数据类型、约束

4. list_tables

检索当前数据库中的所有表名。

  • 输出:表名数组

5. list_databases

获取MySQL服务器上所有可用的数据库。

  • 输出:数据库名称数组

6. test_connection

验证数据库连接是否正常工作。

  • 输出:连接状态

7. explain_query

获取SELECT查询的执行计划。

  • 输入:SQL SELECT查询和可选参数
  • 输出:查询执行计划明细

安装

  1. 克隆或创建项目目录:

    mkdir mysql-mcp-server
    cd mysql-mcp-server
    
  2. 安装依赖项:

    pip install -r requirements.txt
    

    或者使用开发安装:

    pip install -e .
    
  3. 设置环境变量:

    cp .env.example .env
    

    编辑 .env 使用MySQL数据库凭据:

    DB_HOST=localhost
    DB_PORT=3306
    DB_USER=your_username
    DB_PASSWORD=your_password
    DB_NAME=your_database_name
    

配置

服务器使用环境变量进行配置。所有设置都可以在您的 .env 文件:

数据库设置

  • DB_HOST:MySQL服务器主机名(默认值:localhost)
  • DB_PORT:MySQL服务器端口(默认:3306)
  • DB_USER:MySQL用户名(必填)
  • DB_PASSWORD:MySQL密码(必填)
  • DB_NAME:默认数据库名称(可选)
  • DB_CHARSET:字符集(默认值:utf8mb4)

连接池设置

  • DB_POOL_SIZE:池中的连接数(默认值:10)
  • DB_MAX_OVERFLOW:最大池溢出(默认值:20)

超时设置

  • DB_CONNECT_TIMEOUT:连接超时(秒)(默认值:10)
  • DB_READ_TIMEOUT:读取超时时间(秒)(默认值:30)
  • DB_WRITE_TIMEOUT:写入超时(秒)(默认值:30)

用法

运行服务器

要运行MCP服务器,请执行以下操作:

python -m mysql_mcp_server.main

与MCP客户端一起使用

此服务器实现了模型上下文协议,可以与任何兼容MCP的客户端一起使用。服务器通过stdio进行通信,并提供上面列出的工具。

查询示例

查询数据:

SELECT * FROM users WHERE age > 18 ORDER BY created_at DESC LIMIT 10

插入数据:

INSERT INTO users (name, email, age) VALUES (%(name)s, %(email)s, %(age)s)

更新数据:

UPDATE users SET last_login = NOW() WHERE id = %(user_id)s

获取表结构: 使用 describe_table 表名为“users”的工具

安全注意事项

  • 参数化查询:所有查询都支持参数化,以防止SQL注入
  • 查询验证:基本验证确保每个工具都有适当的查询类型
  • 连接池:具有自动清理功能的高效连接管理
  • 错误处理:全面的错误处理和记录

发展

项目结构

mysql_mcp_server/
├── __init__.py          # Package initialization
├── main.py             # MCP server implementation
├── database.py         # Database connection and operations
└── config.py           # Configuration management

运行测试

pytest tests/

代码格式化

black mysql_mcp_server/
ruff mysql_mcp_server/

需求

  • Python 3.8+
  • MySQL 5.7+或MariaDB 10.3+
  • 所需的Python包(见requirements.txt):
    • mcp>=1.0.0
    • PyMySQL>=1.1.0
    • python dotenv>=1.0.0
    • 媒染剂>=2.0.0

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

贡献

  1. 复刻仓库
  2. 创建要素分支
  3. 进行更改
  4. 如果适用,添加测试
  5. 提交拉取请求

故障排除

连接问题:

  • 验证MySQL服务器是否正在运行且可访问
  • 检查中的数据库凭据 .env 文件
  • 确保MySQL用户具有适当的权限
  • 使用测试连接 test_connection 工具

权限问题:

  • 确保MySQL用户具有SELECT、INSERT、UPDATE、DELETE权限
  • 对于模式检查,用户需要访问INFORMATION_schema

性能问题:

  • 在配置中调整连接池设置
  • 使用EXPLAIN工具分析查询性能
  • 考虑为频繁查询的列添加数据库索引