M

MySQL MCP服务

@xiangma9712/mysql-mcp-server
15 Stars 8.8k 次浏览 xiangma9712 更新于 2026-08-23

通过JSON命令启用与MySQL数据库的交互,支持只读查询、写查询的测试执行以及通过Docker进行的表信息检索。

MCP 服务配置

复制以下 JSON 到 OPClaw 或其他 MCP 客户端的配置文件中即可使用

{
  "mcpServers": {
    "mysql": {
      "args": [
        "run",
        "-i",
        "--rm",
        "--add-host=host.docker.internal:host-gateway",
        "--env-file",
        "/Users/username/.mcp/.env",
        "ghcr.io/xiangma9712/mcp/mysql"
      ],
      "command": "docker"
    }
  }
}

该服务需要配置环境变量:MYSQL_HOST、MYSQL_PASSWORD、MYSQL_PORT、MYSQL_USER

可用工具 (4 个)

该服务在 MCP 协议中暴露的工具,AI 可按需调用

query 1 个参数 需填 1 项

読み取り専用のSQLクエリを実行します。

必填参数:sql

test_execute 1 个参数 需填 1 项

SQLが実行可能か確認し、最後にロールバックします。

必填参数:sql

list_tables

データベース内のテーブル一覧を取得します。

该工具无需必填参数,直接调用即可

describe_table 1 个参数 需填 1 项

テーブルのカラム情報を取得します。

必填参数:tableName

服务介绍

MySQL MCP 服务器

一个用于与 MySQL 数据库交互的 MCP 服务器。

该服务器支持执行只读查询(query)和最终会被回滚的写查询(test_execute)。

设置

环境变量

将以下环境变量添加到 ~/.mcp/.env 文件中:

MYSQL_HOST=host.docker.internal  # Hostname to access host services from Docker container
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=your_password

注意host.docker.internal 是一个特殊的 DNS 名称,用于从 Docker 容器访问主机服务。
当连接到运行在您主机上的 MySQL 服务器时,请使用此设置。
如果连接到其他 MySQL 服务器,请更改为主机名。

mcp.json 配置

{
  "mcpServers": {
    "mysql": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "--add-host=host.docker.internal:host-gateway",
        "--env-file",
        "/Users/username/.mcp/.env",
        "ghcr.io/xiangma9712/mcp/mysql"
      ]
    }
  }
}

使用方法

启动服务器

docker run -i --rm --add-host=host.docker.internal:host-gateway --env-file ~/.mcp/.env ghcr.io/xiangma9712/mcp/mysql

注意:如果您使用 OrbStack,host.docker.internal 会自动支持,因此可以省略 --add-host 选项。
虽然 Docker Desktop 通常也会自动支持这一点,但为了更好的可靠性,建议添加 --add-host 选项。

可用命令

1. 执行只读查询

{
  "type": "query",
  "payload": {
    "sql": "SELECT * FROM your_table"
  }
}

响应:

{
  "success": true,
  "data": [
    {
      "id": 1,
      "name": "example"
    }
  ]
}

2. 测试查询执行

{
  "type": "test_execute",
  "payload": {
    "sql": "UPDATE your_table SET name = 'updated' WHERE id = 1"
  }
}

响应:

{
  "success": true,
  "data": "The UPDATE SQL query can be executed."
}

3. 列出表

{
  "type": "list_tables"
}

响应:

{
  "success": true,
  "data": ["table1", "table2", "table3"]
}

4. 描述表

{
  "type": "describe_table",
  "payload": {
    "table": "your_table"
  }
}

响应:

{
  "success": true,
  "data": [
    {
      "Field": "id",
      "Type": "int(11)",
      "Null": "NO",
      "Key": "PRI",
      "Default": null,
      "Extra": ""
    },
    {
      "Field": "name",
      "Type": "varchar(255)",
      "Null": "YES",
      "Key": "",
      "Default": null,
      "Extra": ""
    }
  ]
}

实现细节

  • 用 TypeScript 实现
  • 使用 mysql2 包
  • 作为 Docker 容器运行
  • 通过标准输入接收 JSON 命令
  • 通过标准输出返回 JSON 响应
  • 使用 host.docker.internal 连接到主机 MySQL(兼容 OrbStack 和 Docker Desktop)

安全注意事项

  • 使用环境变量管理敏感信息
  • SQL 注入预防是实施者的责任
  • 生产环境中需要正确的网络配置
  • 连接到主机服务时需要适当的防火墙设置

相关 MCP 服务