Skip to main content
Glama
mysql-mcp-server

mysql-mcp-server

by eeantoss

MySQL/PostgreSQL MCP 服务器

一个基于 Model Context Protocol (MCP) 的 MySQL 与 PostgreSQL 数据库操作服务器,支持跨平台使用,可以通过 MCP 协议执行 SQL 语句、脚本和数据库管理操作。

TL;DR(精简版)

  • 项目诉求(一句话):面向多项目多环境的智能数据库管理,通过 MCP 无需本地数据库客户端即可执行 SQL/脚本与环境切换。

  • 安装(两选一)

    • 本机开发:npm run build && npm link

    • 全局安装(Git):npm i -g git+https://github.com/eeantoss/mysql-mcp-server.git

  • Windsurf/Claude MCP 最小配置

    {
     "mcpServers":{ 
    
      "mysql": {
        "command": "mysql-mcp-server.cmd",
        "env": {
          "DEBUG": "false"
        }
      }
     } 
    }

在规则中添加,调用mysql数据库连接的时候,执行mcp服务

  • 三大典型场景(即贴即用)

    • 本地未安装 MySQL 客户端(仍可执行 SQL)

      { "tool": "database_connect", "arguments": {"host":"localhost","port":3306,"user":"root","password":"pwd","database":"test"} }
      SELECT 1 AS ok;  -- 校验
      SHOW TABLES;     -- 列出表
    • 数据库在 Docker 容器中

      { "tool": "database_connect", "arguments": {"connectionType":"docker","containerName":"database_container","user":"root","password":"pwd","database":"test"} }
    • 数据库在远程 IP(如 1.1.1.2:3306)

      { "tool": "database_connect", "arguments": {"host":"1.1.1.2","port":3306,"user":"root","password":"pwd","database":"prod"} }

更多功能/演示:见下方"文档导航"。

Related MCP server: mysql-mcp-zag

📚 文档导航

功能特性

🌟 核心功能

  • 🔌 多种连接方式:支持直连、Docker 容器、远程连接

  • 🖥️ 跨平台兼容:支持 Windows、Linux、macOS

  • 📝 SQL 执行:单条 SQL 语句执行,支持参数化查询

  • 📄 脚本执行:支持 SQL 脚本文件和批量 SQL 语句执行

  • 🗄️ 数据库结构查询:获取表、列、索引、外键、视图信息

  • 🔍 连接测试:测试数据库连接状态和性能

  • ⚡ 连接池管理:自动管理数据库连接池,提高性能

  • 🛡️ 错误处理:完善的错误处理和日志记录

🚀 智能项目管理 (新功能)

  • 🔍 自动项目检测:智能识别 Spring Boot、Node.js、Laravel、Django 项目

  • 🌍 多环境支持:自动解析 dev、test、prod 等多个环境配置

  • 🔄 动态环境切换:无需重启即可在不同数据库环境间切换

  • 📁 项目感知:根据工作目录自动加载项目配置文件

  • 🎯 会话管理:支持多项目多环境的并发连接管理

🛠️ Node.js 版本管理 (新功能)

  • 🔍 版本检查:自动检查 Node.js 版本是否符合要求 (≥ 18.0.0)

  • 📋 切换指导:提供详细的 Node.js 版本切换指导

  • 🔄 包装脚本:提供带版本检查的启动脚本

安装和配置

1. 安装依赖

npm install

Node 版本要求(重要)

  • 需要 Node.js ≥ 18。

  • 若使用 nvm(Windows):

nvm use 18.20.8
node -v   # 期望输出 v18.x

全局安装(两种方式,选其一)

  • 开发者本地(推荐):

npm run build
npm link   # 将本项目注册为全局命令 mysql-mcp-server
  • 从 GitHub 全局安装:

npm i -g git+https://github.com/eeantoss/mysql-mcp-server.git

2. 环境配置

复制 .env.example 为 .env 并配置您的数据库连接信息:

cp .env.example .env

编辑 .env 文件:

# 数据库类型:mysql 或 postgresql
DATABASE_TYPE=mysql

# 通用连接配置
DATABASE_HOST=localhost
DATABASE_PORT=3306
DATABASE_USER=root
DATABASE_PASSWORD=your_password
DATABASE_NAME=your_database

# PostgreSQL 默认 schema(可选,默认 public)
DATABASE_SCHEMA=public

# Docker 连接配置 (可选)
DOCKER_CONTAINER_NAME=database_container
DOCKER_DATABASE_PORT=3306

# 连接池配置
DATABASE_CONNECTION_LIMIT=10
DATABASE_ACQUIRE_TIMEOUT=60000
DATABASE_TIMEOUT=60000

# 调试模式
DEBUG=false

3. 编译项目

npm run build

4. 启动服务器

npm start

或者开发模式:

npm run dev

或者带版本检查的启动模式:

npm run start:check

5. 在 Windsurf / Claude 中以 MCP 方式启动(示例)

在 c:\\Users\\26811\\.codeium\\windsurf\\mcp_config.json 中配置:

{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": ["C:\\Users\\26811\\CascadeProjects\\mysql-mcp-server\\build\\index.js"],
      "env": { "DEBUG": "false" }
    }
  }
}

或者使用带版本检查的包装脚本:

{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": ["C:\\Users\\26811\\CascadeProjects\\mysql-mcp-server\\bin\\mysql-mcp-server-with-check.js"],
      "env": { "DEBUG": "false" }
    }
  }
}

注意:使用全局 CLI 后,无需写死绝对路径;部分 IDE 不允许设置 cwd 字段,请仅指定 command 即可。

MCP 工具列表

🌟 智能项目管理工具

1. database_detect_project - 检测项目配置

自动检测当前项目的数据库配置文件和环境设置。

参数:

  • workingDirectory (string, 可选): 项目根目录路径,默认为当前目录

支持的项目类型:

  • Spring Boot (application.yml, application-*.yml)

  • Node.js (.env, .env.*)

  • Laravel (.env, config/database.php)

  • Django (settings.py)

2. database_list_environments - 列出环境

列出检测到的所有数据库环境配置。

3. database_connect_environment - 连接环境

连接到指定的项目环境。

参数:

  • environmentName (string, 必需): 环境名称(如:dev, test, prod)

4. database_switch_environment - 切换环境

切换到不同的数据库环境。

参数:

  • environmentName (string, 必需): 要切换到的环境名称

5. database_list_sessions - 列出会话

列出所有活跃的数据库连接会话。

6. database_get_project_summary - 项目摘要

获取项目数据库配置的完整摘要信息。

🔧 基础数据库工具

7. database_connect - 手动连接数据库

连接到 MySQL 数据库。

参数:

  • host (string): MySQL 服务器地址,默认 'localhost'

  • port (number): MySQL 端口号,默认 3306

  • user (string): 用户名,默认 'root'

  • password (string): 密码 (必需)

  • database (string): 数据库名称(可选)

  • connectionType (string): 连接类型,可选值:'direct', 'docker', 'remote',默认 'direct'

  • containerName (string): Docker 容器名称(仅当 connectionType 为 'docker' 时需要)

示例:

{
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "mypassword",
  "database": "testdb",
  "connectionType": "direct"
}

8. database_execute_sql - 执行 SQL 语句

执行单条 SQL 语句。

参数:

  • sql (string): 要执行的 SQL 语句 (必需)

  • params (array): SQL 参数(可选)

示例:

{
  "sql": "SELECT * FROM users WHERE age > ?",
  "params": ["25"]
}

9. database_execute_script - 执行 SQL 脚本文件

执行 SQL 脚本文件。

参数:

  • scriptPath (string): SQL 脚本文件的完整路径 (必需)

示例:

{
  "scriptPath": "/path/to/your/script.sql"
}

10. database_execute_batch - 批量执行 SQL

批量执行多条 SQL 语句。

参数:

  • sqlScript (string): 包含多条 SQL 语句的脚本内容 (必需)

示例:

{
  "sqlScript": "CREATE TABLE test (id INT PRIMARY KEY); INSERT INTO test VALUES (1);"
}

11. database_get_schema - 获取数据库结构

获取数据库结构信息,包括表、列、索引、外键、视图等。

参数:

  • databaseName (string): 数据库名称(可选,默认使用当前连接的数据库)

示例:

{
  "databaseName": "mydb"
}

12. database_test_connection - 测试连接

测试当前数据库连接状态。

参数: 无

🛠️ Node.js 版本管理工具

13. check_node_version - 检查 Node.js 版本

检查当前 Node.js 版本是否符合 MySQL MCP 服务器的要求。

参数: 无

返回信息:

  • 当前 Node.js 版本

  • 最低要求版本 (v18.0.0)

  • 检查结果 (符合/不符合要求)

  • 如果不符合要求,提供详细的解决方案指导

常用操作示例(可复制)

以下示例展示"连接 → 验证 → 列表 → CRUD"的完整流程,所有 SQL 均明确显示:

  • 连接(示例:localhost:3308/poseidon,root/root)

{ "tool": "database_connect", "arguments": {"host":"localhost","port":3308,"user":"root","password":"root","database":"poseidon"} }
  • 连接校验 SQL

SELECT 1 AS ok;
  • 列出当前库所有表

SHOW TABLES;
  • CRUD 演示

-- 建表(存在则忽略)
CREATE TABLE IF NOT EXISTS test_user (
  id INT PRIMARY KEY AUTO_INCREMENT,
  name VARCHAR(64) NOT NULL,
  age INT NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 插入
INSERT INTO test_user (name, age) VALUES ("Alice", 28), ("Bob", 35);

-- 查询
SELECT id, name, age, created_at FROM test_user ORDER BY id;

-- 更新
UPDATE test_user SET age = age + 1 WHERE name = "Alice";

-- 验证更新
SELECT id, name, age FROM test_user WHERE name = "Alice";

-- 删除
DELETE FROM test_user WHERE name = "Bob";

建议在对话式智能体中,每一步先回显"将执行的 SQL/动作",再调用 MCP 工具执行,最后回显结果,保证可观测性。

14. database_disconnect - 断开连接

断开数据库连接。

参数: 无

使用场景

场景 1:多项目多环境管理 🌟

问题:开发者经常需要在不同项目的不同环境间切换操作数据库

  • 项目A:开发环境(1.1.1.1:3306)、测试环境(1.1.1.1:3307)、生产环境(1.1.1.2:3306)

  • 项目B:本地环境(localhost:3306)、云端环境(cloud.db.com:3306)

解决方案:

您: "检测当前Spring Boot项目的数据库配置"
Claude: [自动检测] → 发现dev、test、prod三个环境

您: "连接到开发环境,查询用户数据"
Claude: [连接dev环境] → [执行查询]

您: "切换到生产环境,执行相同查询对比数据"
Claude: [切换prod环境] → [执行查询] → [对比结果]

场景 2:替代命令行 MySQL 客户端

当您的系统没有安装 MySQL 客户端,或者 MySQL 运行在 Docker 容器中时,可以使用此 MCP 服务器来执行 SQL 操作。

# 传统方式(可能失败)
mysql -u root -p mydb < script.sql

# 使用 MCP 方式
# 通过 MCP 客户端调用 database_execute_script 工具

场景 3:智能体 SQL 操作

在 AI 智能体中集成数据库操作能力,让智能体能够:

  • 自动检测项目配置并连接相应环境

  • 执行数据查询和分析

  • 运行数据库脚本

  • 管理数据库结构

  • 执行数据迁移

  • 在多环境间进行数据对比

场景 4:跨平台数据库管理

在不同操作系统上提供统一的数据库操作接口,无需安装特定的数据库客户端。

Docker 支持

连接到 Docker 中的 MySQL

如果您的 MySQL 运行在 Docker 容器中,可以这样连接:

{
  "host": "localhost",
  "port": 3306,
  "user": "root",
  "password": "password",
  "connectionType": "docker",
  "containerName": "database_container"
}

在 Docker 中运行 MCP 服务器

您也可以将 MCP 服务器本身运行在 Docker 中:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
CMD ["npm", "start"]

故障排除

常见问题

  1. 连接失败

    • 检查 MySQL 服务是否运行

    • 验证连接参数(主机、端口、用户名、密码)

    • 确认防火墙设置

  2. 权限错误

    • 确保用户有足够的数据库权限

    • 检查 MySQL 用户配置

  3. Docker 连接问题

    • 确认容器名称正确

    • 检查端口映射

    • 验证网络连接

  4. MCP 报错:failed to initialize server: transport error: server terminated

    • 常见原因:Node 版本过低或 ESM 主入口判断差异。

    • 处理:确保 Node ≥ 18;我们已在 src/index.ts 修复入口判断(pathToFileURL(process.argv[1]) 比较)并使用 process.stdin.resume() 保活。

    • 若更新后仍报错,请在 IDE 中 Reload Window 或重存 mcp_config.json 触发重启。

  5. PowerShell 提示 Execution Policy / profile.ps1 安全警告

    • 这是终端环境提示,不影响构建与运行,可忽略或按需调整系统策略。

  6. 连接测试语句报错 near 'current_time'

    • 旧版本使用 NOW() as current_time 在部分 MySQL/MariaDB/SQL 模式下可能报错。

    • 已改为更高兼容的探针:SELECT 1 AS ok; 与可选 SELECT @@version AS version;。

    • 如仍遇到此错误,请确认已重启 MCP 进程并加载最新构建。

Node.js 版本问题

如果遇到 ReferenceError: AbortController is not defined 错误,这表明您正在使用低于 v18.0.0 的 Node.js 版本。

解决方案:

  1. 使用 check_node_version 工具检查当前版本

  2. 按照工具提供的指导切换到合适的 Node.js 版本

  3. 或者使用带版本检查的启动脚本 (npm run start:check)

设置环境变量 DEBUG=true 启用调试模式,查看详细的日志信息。

开发

项目结构

mysql-mcp-server/
├── src/
│   ├── index.ts                    # MCP 服务器主程序
│   ├── enhanced-connection-manager.ts # 会话管理
│   ├── project-detector.ts         # 项目配置自动检测
│   ├── connection-manager-factory.ts # 连接管理器工厂
│   ├── dialect-factory.ts        # SQL 方言工厂
│   └── core/
│       ├── types.ts               # 通用类型定义
│       ├── config-resolver.ts     # 配置解析
│       ├── connection-manager.ts  # 连接管理器接口
│       ├── dialect.ts             # SQL 方言接口
│       ├── database-client.ts     # 数据库客户端工厂
│       ├── database-tools.ts      # 通用数据库工具
│       └── sql-parser.ts          # SQL 脚本解析
│   ├── mysql/
│   │   ├── mysql-connection-manager.ts
│   │   └── mysql-dialect.ts
│   └── postgres/
│       ├── postgres-connection-manager.ts
│       └── postgres-dialect.ts
├── build/                         # 编译输出
├── package.json
├── tsconfig.json
└── README.md

开发命令

# 安装依赖
npm install

# 编译
npm run build

# 开发模式(监听文件变化)
npm run watch

# 启动服务器
npm start

# 带版本检查的启动模式
npm run start:check

# 开发模式启动
npm run dev

许可证

MIT License

贡献

欢迎提交 Issue 和 Pull Request!

更新日志

v1.0.0

  • 初始版本

  • 支持基本的 MySQL 操作

  • 跨平台兼容

  • Docker 支持

  • 完整的 MCP 协议实现

v1.1.0

  • 新增:智能项目检测与多环境管理(database_detect_project 等 6 个工具)

  • 新增:增强连接管理器,支持多会话与快速切换

  • 新增:启动与生命周期详细日志,改进 ESM 入口判断与保活

  • 优化:连接测试改为 SELECT 1 AS ok / SELECT @@version AS version,提升兼容性

  • 文档:新增 Windsurf/Claude MCP 配置示例与完整 CRUD 演练

v2.0.0

  • 破坏性变更:所有工具名从 mysql_* 改为 database_*

  • 新增:PostgreSQL 数据库支持(pg 驱动)

  • 新增:统一的 ConnectionManager / SQLDialect 抽象层,支持未来扩展更多数据库

  • 新增:环境变量支持 DATABASE_TYPE、DATABASE_HOST 等中性变量(保留 MYSQL_*/PG* fallback)

  • 新增:database_connect 支持显式传入数据库类型

  • 优化:项目检测器支持识别 PostgreSQL 配置

v1.2.0

  • 新增:Node.js 版本检查工具 (check_node_version)

  • 新增:带版本检查的启动脚本

  • 新增:Node.js 版本管理相关文档

  • 优化:改进错误处理和用户指导信息

Available Tools

14 tools
check_node_versionB

Check Node.js version

Inputs: no named parameters.

database_connectC

Connect to a MySQL or PostgreSQL database

Inputs: ssl, host, port, type, +9 more.

database_connect_environmentB

Connect to a specific detected database environment

Inputs: environmentName (required).

database_detect_projectB

Detect database configuration from a project directory

Inputs: projectPath (required).

database_disconnectB

Close the active database connection

Inputs: sessionId.

database_execute_batchB

Execute multiple SQL statements as a batch on the active database connection

Inputs: batch (required).

database_execute_scriptB

Execute a SQL script with multiple statements on the active database connection

Inputs: script (required).

database_execute_sqlA

Execute a single SQL statement on the active database connection

Inputs: sql (required), params.

database_get_project_summaryB

Get summary of the currently detected project

Inputs: no named parameters.

database_get_schemaA

Get the database schema (tables, columns, indexes, foreign keys, views)

Inputs: schema.

database_list_environmentsA

List detected database environments for the current project

Inputs: no named parameters.

database_list_sessionsB

List active database sessions

Inputs: no named parameters.

database_switch_environmentB

Switch to a different detected database environment

Inputs: environmentName (required).

database_test_connectionB

Test the active database connection

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.9/5.0

    Scored across 14 tools

    Disambiguation2/5

    Several tools have overlapping purposes: database_execute_sql, database_execute_script, and database_execute_batch all execute SQL but with subtle differences, while database_connect, database_connect_environment, and database_switch_environment cover similar connection territory. The presence of check_node_version, which has nothing to do with database operations, further confuses tool selection.

    Naming Consistency3/5

    Most tools follow a consistent database_verb_noun pattern (e.g., database_connect, database_execute_sql), but the lone check_node_version breaks the convention entirely. The naming is readable but not fully uniform.

    Tool Count3/5

    At 14 tools, the count is at the high end of the typical range but still acceptable for a database server. However, the inclusion of check_node_version, which is unrelated to MySQL/PostgreSQL work, suggests the count could be reduced or the tool placed in a separate utility server.

    Completeness4/5

    The tool set covers core database operations well: connecting, disconnecting, testing, executing SQL (single, script, batch), retrieving schema, managing project environments, and listing sessions. Minor gaps like explicit transaction control are not critical for a basic MCP database server, so the surface is fairly complete.

    Maintenance

    ActivityMaintained
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables MySQL database operations through MCP, including executing SQL queries, listing databases and tables, and describing table structures.
      896 npm
      5
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Enables interaction with MariaDB/MySQL databases via MCP, supporting read-only mode, SQL execution, and schema inspection.
      6
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables secure interaction with MySQL databases through MCP, offering tools for SQL queries, schema inspection, and data sampling, with support for multiple databases, SSH tunnels, and safe write operations.
      3
      1
      MIT