MySQL交互服务器

一个用于与MySQL数据库交互的MCP服务器,支持执行只读查询和测试写入查询。

  • by xiangma9712
  • JavaScript
  • 本地部署
  • 6 星标
  • 更新于
在 GitHub 查看 xiangma9712/mysql-mcp-server

使用说明

MySQL MCP服务器

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

此服务器支持执行只读查询(query)和最终回滚的写查询(testexecute)。

设置

环境变量

将以下环境变量添加到 ~/.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注入预防是实现者的责任
  • 生产使用所需的适当网络配置
  • 连接到主机服务时需要适当的防火墙设置