Skip to main content

生产级 MySQL 多数据源 MCP 工具,适配 TRAE CN IDE 环境

Project description

MultiMyMCP - 生产级 MySQL 多数据源 MCP 工具

项目概述

MultiMyMCP 是一个完全适配 TRAE SOLO IDE 环境的生产级 MySQL 多数据源管理工具。它提供了增强型连接池、安全配置、性能监控等核心功能,支持标准 MCP 协议,让 AI 能够直接查询多个 MySQL 数据库。

核心特性

1. 标准 MCP 协议支持

  • 完全符合 MCP (Model Context Protocol) 标准
  • 支持 JSON-RPC 2.0 通信协议
  • 提供 4 个核心工具:query_database、list_datasources、execute_sql、get_schema
  • 与 TRAE SOLO IDE 无缝集成

2. 增强型连接池

  • 支持连接池动态扩容/缩容
  • 记录连接使用时长和 SQL 执行耗时
  • 连接池状态监控(当前连接数、空闲连接数、等待队列长度)
  • 线程安全的连接管理

3. 安全与通用规范

  • SQL 执行超时控制
  • 数据源配置加密存储(AES-256)
  • SQL 白名单/黑名单机制
  • 危险 SQL 操作拦截

4. 多数据源支持

  • 支持同时管理多个 MySQL 数据源
  • 灵活的数据源切换
  • 全局配置文件管理
  • 支持主从库配置

技术栈

  • Python: 3.8+
  • 核心依赖: pymysql, DBUtils>=2.0, python-dotenv, cryptography, json5
  • 可选依赖: psutil, pytest

项目结构

MultiMyMCP/
├── multimymcp/
│   ├── __init__.py              # 模块初始化
│   ├── core.py                  # 核心MCP接口
│   ├── config.py                # 配置管理
│   ├── encryption.py            # 加密工具
│   ├── pool.py                  # 连接池管理
│   ├── executor.py              # SQL执行器
│   ├── monitor.py               # 监控模块
│   ├── exceptions.py            # 异常定义
│   ├── cli.py                   # 命令行接口
│   ├── mcp_server.py            # MCP服务器主程序
│   ├── mcp_protocol.py          # MCP协议处理器
│   ├── mcp_tools.py             # MCP工具实现
│   └── mcp_config_loader.py     # MCP配置加载器
├── tests/                       # 单元测试
├── docs/                        # 文档
├── requirements.txt             # 依赖配置
├── setup.py                     # 打包配置
├── README.md                    # 项目说明
├── CHANGELOG.md                 # 更新日志
└── .env.example                 # 环境变量示例

安装步骤

1. 克隆项目

git clone git@gitee.com:wanhonglei/multi-mysql-mcp.git
cd multimymcp

2. 安装依赖

pip3 install -r requirements.txt

3. 安装项目(开发模式)

pip3 install -e .

4. 验证安装

python3 -m multimymcp.mcp_server --help

应该看到帮助信息输出。

MCP 服务器使用指南

第一步:创建配置文件

1.1 创建配置目录

mkdir -p ~/.multimymcp

1.2 创建配置文件

创建 ~/.multimymcp/mcp_config.json5 文件:

cat > ~/.multimymcp/mcp_config.json5 << 'EOF'
{
  "datasources": {
    "master": {
      "host": "localhost",
      "port": 3306,
      "user": "root",
      "password": "your_password",
      "database": "production",
      "pool_min_size": 2,
      "pool_max_size": 10
    },
    "slave": {
      "host": "localhost",
      "port": 3307,
      "user": "readonly",
      "password": "your_password",
      "database": "production",
      "pool_min_size": 5,
      "pool_max_size": 20
    }
  },
  "security": {
    "whitelist_enabled": false,
    "blacklist_enabled": true,
    "blacklist": ["DROP", "TRUNCATE", "ALTER", "CREATE"]
  }
}
EOF

重要提示

  • 请将 your_password 替换为实际的数据库密码
  • 根据实际情况修改 host、port、user、database 等参数
  • 可以添加更多数据源

第二步:测试 MCP 服务器

2.1 测试初始化请求

echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}' | python3 -m multimymcp.mcp_server

预期输出

{"jsonrpc": "2.0", "id": 1, "result": {"protocolVersion": "2024-11-05", "capabilities": {"tools": {}}, "serverInfo": {"name": "multimymcp", "version": "1.0.0"}}}

2.2 测试工具列表

echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | python3 -m multimymcp.mcp_server

预期输出

{"jsonrpc": "2.0", "id": 2, "result": {"tools": [...]}}

第三步:在 TRAE SOLO IDE 中配置

3.1 打开 MCP 设置

在 TRAE SOLO IDE 中:

方式一:通过菜单

  1. 点击菜单栏的 Preferences(偏好设置)
  2. 选择 MCP Servers(MCP 服务器)
  3. 点击 Edit MCP Settings(编辑 MCP 设置)

方式二:通过命令面板

  1. Cmd + Shift + P(macOS)打开命令面板
  2. 输入 MCP
  3. 选择 MCP: Edit MCP Settings

3.2 添加 MCP 服务器配置

在打开的配置文件中,添加以下内容:

{
  "mcpServers": {
    "multimymcp": {
      "command": "python3",
      "args": ["-m", "multimymcp.mcp_server"],
      "env": {}
    }
  }
}

完整配置示例

如果文件中已有其他 MCP 服务器,请添加到 mcpServers 对象中:

{
  "mcpServers": {
    "existing-server": {
      "command": "...",
      "args": [...]
    },
    "multimymcp": {
      "command": "python3",
      "args": ["-m", "multimymcp.mcp_server"],
      "env": {}
    }
  }
}

3.3 保存并重启

  1. 保存配置文件(Cmd + S
  2. 重启 MCP 服务器或重启 TRAE SOLO IDE

第四步:验证配置成功

4.1 检查 MCP 服务器状态

在 TRAE SOLO IDE 中:

  1. 打开命令面板(Cmd + Shift + P
  2. 输入 MCP: Show Status
  3. 查看 multimymcp 是否显示为 connected(已连接)

4.2 测试 AI 调用

在 TRAE SOLO IDE 的 AI 对话框中,尝试以下对话:

请列出所有可用的 MySQL 数据源

AI 应该会调用 list_datasources 工具并返回结果。

请查询 master 数据源中的 users 表,返回前 10 条记录

AI 应该会调用 query_database 工具执行查询。

可用的 MCP 工具

1. query_database

描述:在指定的 MySQL 数据源上执行查询 SQL

参数

  • datasource: 数据源名称(必需)
  • sql: 完整的 SELECT 查询语句(必需)

示例

请从 master 数据源查询 users 表的前 10 条记录

2. list_datasources

描述:列出所有可用的 MySQL 数据源

参数:无

示例

请列出所有可用的 MySQL 数据源

3. execute_sql

描述:执行 SQL 语句(INSERT/UPDATE/DELETE 等)

参数

  • datasource: 数据源名称(必需)
  • sql: 完整的 SQL 语句(必需)

示例

请在 master 数据源中执行以下 SQL:
INSERT INTO users (name, email) VALUES ('Alice', 'alice@example.com')

4. get_schema

描述:获取指定数据源的表结构信息

参数

  • datasource: 数据源名称(必需)
  • table: 表名(可选,不指定则返回所有表)

示例

请获取 master 数据源中 users 表的结构信息

Python API 使用

基本使用

from multimymcp import MultiMyMCP

# 初始化 MCP
mcp = MultiMyMCP()

# 连接数据源
mcp.connect('default')

# 执行 SQL
result = mcp.execute('SELECT * FROM users LIMIT 10')
print(result)

# 断开连接
mcp.disconnect()

多数据源配置

from multimymcp import MultiMyMCP, DataSourceConfig

mcp = MultiMyMCP()

# 添加主库
master_config = DataSourceConfig(
    name="master",
    host="master_db",
    port=3306,
    user="root",
    password="master_password",
    database="production"
)
mcp.add_data_source(master_config)

# 添加从库
slave_config = DataSourceConfig(
    name="slave",
    host="slave_db",
    port=3306,
    user="readonly",
    password="slave_password",
    database="production"
)
mcp.add_data_source(slave_config)

# 使用不同数据源
mcp.connect('master')
mcp.execute('INSERT INTO users (name) VALUES ("test")')

mcp.connect('slave')
result = mcp.execute('SELECT * FROM users')

事务处理

from multimymcp import MultiMyMCP

mcp = MultiMyMCP()
mcp.connect('default')

# 使用事务
try:
    mcp._executors['default'].begin_transaction()
    
    mcp.execute('INSERT INTO orders (user_id, amount) VALUES (1, 100)')
    mcp.execute('UPDATE users SET balance = balance - 100 WHERE id = 1')
    
    mcp._executors['default'].commit_transaction()
except Exception as e:
    mcp._executors['default'].rollback_transaction()
    raise

监控与调试

1. 连接池状态

status = mcp.get_pool_status()
print(f"当前连接数: {status['current_size']}")
print(f"活跃连接数: {status['active_size']}")
print(f"空闲连接数: {status['idle_size']}")

2. 性能报告

report = mcp.get_performance_report()
print(f"总执行次数: {report['summary']['total_sql_executions']}")
print(f"成功率: {report['summary']['success_rate']:.2f}%")
print(f"平均执行时间: {report['summary']['avg_execution_time']:.3f}s")

3. 健康检查

health = mcp.get_health_status()
if health['healthy']:
    print("系统健康状态良好")
else:
    print("系统存在问题:")
    for issue in health['issues']:
        print(f"- {issue}")

命令行工具

# 查看帮助
multimymcp --help

# 连接数据源
multimymcp connect default

# 执行 SQL
multimymcp execute "SELECT * FROM users"

# 查看状态
multimymcp status

# 健康检查
multimymcp health

# 性能报告
multimymcp performance

# 列出数据源
multimymcp list

# 调整连接池大小
multimymcp resize 5 20

常见问题排查

问题 1:MCP 服务器无法启动

症状:状态显示为 disconnectederror

解决方法

  1. 检查 Python 路径是否正确:

    which python3
    
  2. 在配置中使用完整路径:

    {
      "mcpServers": {
        "multimymcp": {
          "command": "/usr/bin/python3",
          "args": ["-m", "multimymcp.mcp_server"],
          "env": {}
        }
      }
    }
    

问题 2:找不到模块

症状:错误信息显示 ModuleNotFoundError

解决方法

  1. 确认项目已安装:

    pip3 install -e /path/to/MultiMyMCP
    
  2. 在配置中添加 PYTHONPATH:

    {
      "mcpServers": {
        "multimymcp": {
          "command": "python3",
          "args": ["-m", "multimymcp.mcp_server"],
          "env": {
            "PYTHONPATH": "/path/to/MultiMyMCP"
          }
        }
      }
    }
    

问题 3:数据库连接失败

症状:AI 调用工具时返回连接错误

解决方法

  1. 检查配置文件中的数据库连接信息
  2. 确认数据库服务正在运行
  3. 测试数据库连接:
    mysql -h localhost -P 3306 -u root -p
    

安全配置

生产环境配置

{
  "security": {
    "whitelist_enabled": true,
    "blacklist_enabled": true,
    "whitelist": ["SELECT", "INSERT", "UPDATE", "DELETE"],
    "blacklist": ["DROP", "TRUNCATE", "ALTER", "CREATE", "GRANT", "REVOKE"]
  }
}

性能优化建议

1. 连接池优化

# 推荐配置
config = DataSourceConfig(
    # 其他配置...
    pool_min_size=5,      # 基础并发数
    pool_max_size=15,     # 最大并发数
    pool_timeout=30,      # 连接池超时(秒)
    sql_timeout=60        # SQL执行超时(秒)
)

2. SQL 优化

  • 使用参数化查询
  • 批量执行操作
  • 使用事务减少网络开销
  • 限制结果集大小

测试

运行单元测试:

pytest tests/ -v --cov=multimymcp

版本信息

  • 版本: 1.0.0
  • 发布日期: 2026-03-12
  • Python 版本: 3.8+

许可证

MIT License

更新日志

v1.0.0 (2026-03-12)

  • 初始版本发布
  • 实现标准 MCP 协议支持
  • 实现 4 个核心 MCP 工具
  • 实现核心连接池管理
  • 实现加密存储功能
  • 实现 SQL 执行器和监控功能
  • 完整的单元测试覆盖
  • 详细的文档和使用指南

技术支持

如有任何问题,请参考文档或提交 Issue。

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

multimymcp-1.0.0.tar.gz (30.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

multimymcp-1.0.0-py3-none-any.whl (29.2 kB view details)

Uploaded Python 3

File details

Details for the file multimymcp-1.0.0.tar.gz.

File metadata

  • Download URL: multimymcp-1.0.0.tar.gz
  • Upload date:
  • Size: 30.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for multimymcp-1.0.0.tar.gz
Algorithm Hash digest
SHA256 3125a24f7529bccc6579e7b08a320f20b06af1e90965fd1e88c3401339c9454f
MD5 d5d4967e59cffb14a477230afe2ebc43
BLAKE2b-256 c43b38348dea2b08899643f3dc8cccf57860702e4bca476fb55e287d69c905b8

See more details on using hashes here.

File details

Details for the file multimymcp-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: multimymcp-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 29.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.13

File hashes

Hashes for multimymcp-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 94a4c0b77fd98ec2a440635f49b1486fb7bccfc5807e1ffee850339083942d42
MD5 e22cc9533e583e4a465d7fc762c13027
BLAKE2b-256 35899179dfe7f4cb75c6171947ae578b5360b3eda58d7fc3c6f176aca0b76b3e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page