MySQL数据库服务

基于Model Context Protocol (MCP)的MySQL数据库服务器,为AI助手提供安全的增删改查功能,支持参数化查询和只读模式。

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

使用说明

MCP MySQL Server

一个基于 Model Context Protocol (MCP) 的 MySQL 数据库服务器,为 AI 助手提供安全的数据库增删改查能力。

功能特性

  • 增删改查:默认支持 INSERT、UPDATE、DELETE、SELECT 等 DML 操作
  • DDL 支持:默认允许 CREATE、DROP、ALTER、TRUNCATE 等结构变更操作
  • 无查询限制:不限制 SQL 长度、执行超时、参数数量
  • 可选只读模式:通过 READ_ONLY=true 可限制为仅查询
  • 参数化查询:支持参数化查询

提供的工具

工具名称 描述
execute_sql 执行任意 SQL 语句(默认无操作类型限制)
get_tables_info 获取数据库所有表的结构信息
get_connection_status 获取数据库连接状态

安装

从 npm 安装(推荐)

npm install -g mcp-mysql-server

全局安装后可直接使用 mcp-mysql-server 命令启动。

从源码安装

git clone https://github.com/Fengqixian/mysql-server-mcp.git
cd mysql-server-mcp
npm install
npm start

本地打包安装

npm install
npm pack
npm install -g ./mcp-mysql-server-1.0.0.tgz

配置

在 Cursor 的 MCP 配置文件中添加此服务器,通过 env 字段配置数据库连接信息。

若从源码运行(未全局安装),将 command 改为 node,并添加 args 指向 index.js 的绝对路径。

环境变量

变量名 描述 默认值
DB_HOST 数据库主机地址 localhost
DB_PORT 数据库端口 3306
DB_USER 数据库用户名 root
DB_PASSWORD 数据库密码 -
DB_NAME 数据库名称 -
READ_ONLY 设为 true 时仅允许只读查询 false
MCP_SERVER_NAME MCP 服务器名称 mysql-mcp-server
MCP_SERVER_VERSION MCP 服务器版本 1.0.0

Windows

配置文件路径:%APPDATA%\Cursor\mcp.json

{
  "mcpServers": {
    "mysql": {
      "command": "mcp-mysql-server",
      "env": {
        "DB_HOST": "localhost",
        "DB_PORT": "3306",
        "DB_USER": "your_user",
        "DB_PASSWORD": "your_password",
        "DB_NAME": "your_database"
      }
    }
  }
}

macOS / Linux

配置文件路径:~/.cursor/mcp.json

{
  "mcpServers": {
    "mysql": {
      "command": "mcp-mysql-server",
      "env": {
        "DB_HOST": "localhost",
        "DB_PORT": "3306",
        "DB_USER": "your_user",
        "DB_PASSWORD": "your_password",
        "DB_NAME": "your_database"
      }
    }
  }
}

只读模式

若仅需查询、不允许写入,在 env 中添加:

"READ_ONLY": "true"

使用示例

配置完成后,AI 助手可以使用以下方式操作数据库:

查询数据

查询用户表的前 10 条数据:
SELECT * FROM users LIMIT 10

插入数据

新增用户:
INSERT INTO users (name, email) VALUES (?, ?)
参数: ["张三", "zhangsan@example.com"]

更新数据

更新用户名称:
UPDATE users SET name = ? WHERE id = ?
参数: ["李四", 1]

删除数据

删除指定用户:
DELETE FROM users WHERE id = ?
参数: [1]

查看表结构

获取数据库中所有表的结构信息

参数化查询

查询指定用户:
SELECT * FROM users WHERE id = ?
参数: [1]

安全说明

默认模式

默认不做 SQL 操作类型、长度、超时等限制,实际权限由 MySQL 数据库账号决定。请确保连接账号具备合适的权限,避免在生产环境使用过高权限账号。

只读模式

设置 READ_ONLY=true 后,将拦截 INSERT、UPDATE、DELETE 及 CREATE/DROP/ALTER 等写操作和 DDL。

基础校验

  • SQL 不能为空
  • 参数必须是数组,元素类型为 string、number、boolean 或 null
  • 数据库错误返回原始错误码和信息,便于排查

项目结构

mysql-server-mcp/
├── src/
│   ├── server.js      # MCP 服务器实现
│   ├── database.js    # 数据库连接和查询管理
│   ├── validators.js  # SQL 验证器
│   └── config.js      # 配置管理
├── index.js           # 入口文件
├── package.json
└── README.md

依赖

  • @modelcontextprotocol/sdk - MCP 协议 SDK
  • mysql2 - MySQL 数据库驱动
  • dotenv - 环境变量管理
  • express - Web 框架(可选)
  • helmet - 安全中间件
  • cors - 跨域支持
  • express-rate-limit - 请求限流

开发

# 开发模式(热重载)
npx nodemon index.js

# 生产模式
npm start

发布到 npm

维护者发布新版本:

# 1. 检查将要打入包内的文件
npm run pack:check

# 2. 登录 npm(首次)
npm login

# 3. 更新版本号并发布
npm version patch   # 或 minor / major
npm publish

# 4. 验证全局安装
npm install -g mcp-mysql-server
mcp-mysql-server

发布前会自动执行 pack:check,确认 files 字段包含的文件无误。