项目简介

MySQL MCP Server 是一个基于 Java 开发的 MCP 服务器,它允许 AI 助手(如 Claude)安全地与 MySQL 数据库进行交互。该项目是 Python 版本 'design-computer/mysql_mcp_server' 的 Java 移植,保留了核心功能和逻辑。它旨在作为学习 MCP 概念的实践项目,并为 Java 环境提供 MySQL 数据库的 MCP 服务能力。

主要功能点

  • 资源 (Resources): 将 MySQL 数据库中的表作为资源暴露,允许 LLM 客户端获取表结构和数据。
    • 支持列出所有可用的 MySQL 表。
    • 支持读取指定表的内容(默认限制 100 行)。
  • 工具 (Tools): 提供执行 SQL 查询的工具,使 LLM 客户端能够通过受控的方式查询和操作数据库。
    • 支持执行 'SELECT' 查询以读取数据。
    • 支持执行 'SHOW TABLES' 查询以列出数据库中的表。
    • 支持执行 'INSERT', 'UPDATE', 'DELETE' 等 SQL 语句进行数据更新。
    • 提供基本的 SQL 错误处理。
  • Prompt 模板 (Prompts): 包含一个名为 'mcp-mysql-prompt' 的 Prompt 模板,用于引导用户进行数据库探索和分析,例如基于特定主题创建数据库场景。
  • 安全性: 通过环境变量管理数据库连接信息,避免硬编码敏感信息。
  • 日志: 提供全面的日志记录,方便监控和审计数据库操作。

注意: 该项目主要用于学习和演示 MCP 概念,可能不适用于生产环境,请务必关注安全性最佳实践。

安装步骤

由于这是一个 Java 项目,用户通常不需要执行 'pip install mysql-mcp-server' 命令,该命令可能是原始 Python 版本的安装方式。

要运行此 Java 版本的 MCP Server,您需要:

  1. 克隆仓库: 从 GitHub 克隆 'mcp-server-mysql' 仓库到本地。
  2. 安装 Java 和 Maven: 确保您的系统已安装 Java Development Kit (JDK) 和 Maven。
  3. 构建项目: 在项目根目录下,使用 Maven 构建项目。
    mvn clean install
  4. 配置环境变量: 设置以下环境变量,用于数据库连接:
    MYSQL_HOST=localhost      # MySQL 服务器主机名
    MYSQL_PORT=3306          # MySQL 服务器端口 (可选,默认为 3306)
    MYSQL_USER=your_username   # MySQL 数据库用户名
    MYSQL_PASSWORD=your_password # MySQL 数据库密码
    MYSQL_DATABASE=your_database # 要连接的 MySQL 数据库名
    重要安全提示: 请勿将数据库凭据硬编码到代码或提交到版本控制系统。使用环境变量是更安全的做法。

服务器配置

对于 MCP 客户端(例如 Claude Desktop),您需要配置服务器的启动命令和参数。以下是一个 'claude_desktop_config.json' 的配置示例,请根据实际情况调整路径

{
  "mcpServers": {
    "mysql": {
      "command": "java",  // 启动命令,这里假设您使用 java 命令运行 JAR 文件
      "args": [
        "-jar",
        "path/to/mcp-server-mysql-0.0.1-SNAPSHOT.jar" //  构建后生成的 JAR 文件路径,请替换为实际路径
      ],
      "env": {  // 环境变量配置,与安装步骤中设置的环境变量一致
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_username",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "your_database"
      }
    }
  }
}

参数说明:

  • '"mysql"': 服务器名称,客户端用此名称标识和调用该 MCP 服务器。
  • '"command": "java"': 指定用于启动服务器的命令,这里假设您使用 'java -jar' 运行 JAR 文件。
  • '"args": [...]"': 命令的参数列表。
    • '"-jar"': 'java' 命令的参数,表示运行 JAR 文件。
    • '"path/to/mcp-server-mysql-0.0.1-SNAPSHOT.jar"': 请务必替换为实际的 JAR 文件路径。 此 JAR 文件通常在 Maven 构建后的 'target' 目录下。
  • '"env": {...}': 环境变量配置,这些环境变量将被传递给 MCP 服务器进程。请确保配置正确的 MySQL 连接信息。

如果您直接运行 'Main.java' (例如在 IDE 中):

{
  "mcpServers": {
    "mysql": {
      "command": "java",
      "args": [
        "Main" //  假设 Main 类在 classpath 中
      ],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_username",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "your_database"
      }
    }
  }
}

基本使用方法

  1. 启动 MCP Server: 根据上述配置,启动 MySQL MCP Server。如果您使用 JAR 文件,则运行配置中 'command' 和 'args' 指定的命令。如果您在 IDE 中运行,则直接运行 'Main.java'。
  2. 配置 MCP 客户端: 在 MCP 客户端(例如 Claude Desktop)中,添加上述 'claude_desktop_config.json' 中 '"mcpServers"' 部分的配置。确保服务器名称 ('"mysql"') 与客户端配置一致。
  3. 客户端连接和交互: 客户端启动后,应该能够检测到并连接到 MySQL MCP Server。您可以使用客户端提供的界面来:
    • 浏览和读取 MySQL 数据库中的表资源。
    • 调用 'execute_sql' 工具执行 SQL 查询,例如查询数据或执行管理操作。
    • 使用 'mcp-mysql-prompt' Prompt 模板来引导 LLM 进行数据库相关的对话和任务。

安全最佳实践:

  • 最小权限原则: 为 MCP 服务器创建专用的 MySQL 用户,并授予其执行必要操作的最小权限。永远不要使用 root 用户或管理员账户。
  • 查询白名单/黑名单: 在生产环境中,考虑实现查询白名单或黑名单机制,限制 LLM 可以执行的 SQL 查询类型,增强安全性。
  • 监控和日志: 定期审查服务器日志,监控数据库访问和操作,及时发现异常行为。

信息

分类

数据库与文件