npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

@xingyuchen/mysql-mcp-server

v4.0.5

Published

全新架构的MySQL数据库MCP服务器v4.0,支持StreamableHTTP协议、Header预配置、AI动态连接管理、多数据库切换,专为AI助手设计

Downloads

584

Readme

MySQL MCP Server 🚀

v4.0.0 - 全新架构重写,更简洁、更强大!

一个功能强大且易用的 MySQL 数据库 MCP(Model Context Protocol)服务器,支持 AI 助手安全地操作 MySQL 数据库。

🌟 核心特性

  • 🌐 StreamableHTTP 协议 - 基于最新 MCP 规范实现
  • 🔐 Header 预配置 - 凭证不暴露给 AI,安全可靠
  • 🤖 AI 动态管理 - AI 可以帮你添加/切换数据库连接
  • 🔗 多数据库支持 - 同时管理多个数据库,随时切换
  • 📊 完整 CRUD - 支持所有 SQL 操作
  • 🏗️ 模块化架构 - 清晰的目录结构,易于扩展

📦 安装

环境要求

  • Node.js 18+
  • MySQL 5.7+ 或 8.0+
  • MCP 客户端(Claude Desktop、Cursor 等)

安装步骤

# 克隆项目
git clone https://github.com/guangxiangdebizi/MySQL_MCP.git
cd MySQL_MCP

# 安装依赖
npm install

# 编译
npm run build

# 启动服务器
npm start

⚙️ 配置方法

方式一:Header 预配置(推荐)

编辑 MCP 配置文件:

Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json

单数据库配置

{
  "mcpServers": {
    "mysql-mcp": {
      "type": "streamableHttp",
      "url": "http://localhost:3001/mcp",
      "timeout": 600,
      "headers": {
        "X-MySQL-Host": "localhost",
        "X-MySQL-Port": "3306",
        "X-MySQL-User": "root",
        "X-MySQL-Password": "your_password",
        "X-MySQL-Database": "your_database"
      }
    }
  }
}

多数据库配置

{
  "mcpServers": {
    "mysql-mcp": {
      "type": "streamableHttp",
      "url": "http://localhost:3001/mcp",
      "timeout": 600,
      "headers": {
        "X-MySQL-Host-1": "prod.mysql.com",
        "X-MySQL-User-1": "prod_user",
        "X-MySQL-Password-1": "prod_pass",
        "X-MySQL-Database-1": "production",
        
        "X-MySQL-Host-2": "test.mysql.com",
        "X-MySQL-User-2": "test_user",
        "X-MySQL-Password-2": "test_pass",
        "X-MySQL-Database-2": "testing"
      }
    }
  }
}

优势:

  • ✅ 数据库凭证不暴露给 AI
  • ✅ 启动即连接,无需手动操作
  • ✅ 支持多数据库同时连接

方式二:AI 动态添加(灵活)

不配置 Header,让 AI 在对话中帮你添加连接:

{
  "mcpServers": {
    "mysql-mcp": {
      "type": "streamableHttp",
      "url": "http://localhost:3001/mcp",
      "timeout": 600
    }
  }
}

使用示例:

你: 帮我连接到本地 MySQL,用户名 root,密码 123456,数据库 mydb
AI: [调用 add_connection 工具]

🔧 工具列表

连接管理

| 工具名称 | 功能说明 | 使用场景 | |---------|---------|---------| | add_connection | 添加数据库连接 | AI 帮你动态添加新连接 | | list_connections | 列出所有连接 | 查看当前有哪些数据库 | | select_database | 选择活跃数据库 | 切换到其他数据库 | | remove_connection | 移除连接 | 清理不需要的连接 |

查询操作

| 工具名称 | 功能说明 | 使用场景 | |---------|---------|---------| | execute_query | 执行 SQL | 任何 SQL 操作(SELECT、INSERT、UPDATE、DELETE) | | show_tables | 显示所有表 | 快速了解数据库结构 | | describe_table | 查看表结构 | 查看字段、类型、样本数据 | | show_databases | 显示所有数据库 | 查看可访问的数据库列表 |


🎮 使用示例

场景一:使用 Header 预配置

你: 显示所有表
AI: [调用 show_tables] 
    📊 数据库表列表 (共 5 个表)
    1. users
    2. orders
    3. products
    ...

你: 查看 users 表的结构
AI: [调用 describe_table,参数:users]
    📋 表结构: users
    字段信息:
    - id (INT, 主键)
    - name (VARCHAR)
    - email (VARCHAR)
    ...

场景二:AI 动态添加连接

你: 帮我连接两个数据库:
    1. 生产库:prod.mysql.com,用户 admin,密码 xxx,数据库 shop
    2. 测试库:test.mysql.com,用户 tester,密码 yyy,数据库 shop_test

AI: [调用 add_connection,参数:id=prod, host=prod.mysql.com...]
    [调用 add_connection,参数:id=test, host=test.mysql.com...]
    ✅ 两个数据库连接已添加

你: 列出所有连接
AI: [调用 list_connections]
    📊 当前数据库连接列表 (共 2 个)
    🟢 [1] prod
       └─ prod.mysql.com:3306/shop
       └─ ✅ 当前活跃连接
    ⚪ [2] test
       └─ test.mysql.com:3306/shop_test

你: 切换到测试库
AI: [调用 select_database,参数:test]
    ✅ 已选择数据库: test

你: 查询用户表前 10 条
AI: [调用 execute_query,SQL: SELECT * FROM users LIMIT 10]
    ✅ 查询成功,返回 10 行数据
    [显示 JSON 格式数据]

🏗️ 项目架构

MySQL_MCP/
├── src/
│   ├── index.ts              # 主入口(HTTP Server + 会话管理)
│   ├── database.ts           # 数据库连接管理器
│   └── tools/                # 工具模块
│       ├── index.ts          # 工具统一导出和路由
│       ├── connection.ts     # 连接管理工具
│       └── query.ts          # 查询工具
├── dist/                     # 编译后的 JS 文件
├── package.json
├── tsconfig.json
└── README.md

核心设计:

  • index.ts - Express HTTP 服务器 + MCP Server 初始化
  • database.ts - 封装数据库连接池和查询逻辑
  • tools/ - 每个文件负责一类工具的定义和处理

🔒 安全建议

数据库权限配置

为 MCP 创建专用数据库用户,限制权限:

-- 创建专用用户
CREATE USER 'mcp_user'@'%' IDENTIFIED BY 'strong_password';

-- 授予必要权限
GRANT SELECT, INSERT, UPDATE, DELETE ON your_database.* TO 'mcp_user'@'%';

-- 生产环境只读用户
GRANT SELECT ON your_database.* TO 'mcp_readonly'@'%';

HTTP 模式安全

  • ✅ 使用 Header 预配置,避免凭证暴露给 AI
  • ✅ 生产环境使用 HTTPS(Nginx 反向代理)
  • ✅ 限制访问 IP(防火墙规则)
  • ✅ 定期更新数据库密码
  • ✅ 监控日志,发现异常访问

🚀 NPM 脚本

# 开发模式(TypeScript 直接运行)
npm run dev

# 编译
npm run build

# 生产模式(运行编译后的 JS)
npm start

# 全局安装
npm run install-global

📝 环境变量

创建 .env 文件(可选):

# HTTP 服务器端口
PORT=3001

# Node 环境
NODE_ENV=production

❗ 常见问题

1. 端口被占用

错误: EADDRINUSE: address already in use :::3001

解决: 修改 .env 文件中的 PORT,或终止占用进程

# Windows
netstat -ano | findstr :3001
taskkill /F /PID <PID>

# Linux/Mac
lsof -ti:3001 | xargs kill -9

2. 连接失败

错误: 数据库连接失败

检查:

  • MySQL 服务是否运行
  • 主机、端口、用户名、密码是否正确
  • 防火墙是否允许连接

3. 会话丢失

问题: 重启服务器后提示 "Session not found"

原因: 会话存储在内存中,重启后清空

解决: 刷新 MCP 客户端(重新初始化)

4. 连接已关闭错误

错误: Can't add new command when connection is in closed state

原因:

  • 数据库连接长时间空闲,MySQL 服务器关闭了连接
  • 网络中断导致连接断开

解决方案:

  • ✅ v4.0.5+ 已使用连接池替代单连接,自动支持:
    • 连接保活(Keep-Alive)机制
    • 自动重连功能
    • 并发查询支持
  • 如果仍遇到问题,请重启 MCP 服务器

📦 版本历史

v4.0.5 (2025-12-09) - 连接池优化

  • 🎯 使用连接池替代单连接
  • 🔄 自动连接保活(Keep-Alive)
  • 🔌 自动重连机制
  • 🚀 支持并发查询
  • 🐛 修复 "connection in closed state" 错误

v4.0.0 (2025-12-09) - 全新架构

  • 🔥 完全重写,全新模块化架构
  • ✨ 基于最新 MCP StreamableHTTP 协议
  • 🎯 简化工具:连接管理 + 查询操作
  • 🏗️ 清晰的目录结构:tools/ 模块化
  • 🚀 更快的响应速度
  • 📖 更清晰的代码注释

v3.x - 旧版本

  • 支持事务管理、回滚等复杂功能
  • 较为复杂的架构

📞 支持与反馈


🔧 故障排除

问题:ERR_MODULE_NOT_FOUND 错误

错误信息

Error [ERR_MODULE_NOT_FOUND]: Cannot find module '...@modelcontextprotocol/sdk...'

解决方案

  1. 删除并重新安装依赖
# 删除旧依赖
rm -rf node_modules package-lock.json  # Linux/Mac
# 或
rmdir /s /q node_modules && del package-lock.json  # Windows

# 清理缓存
npm cache clean --force

# 重新安装
npm install
  1. 检查 Node.js 版本
node --version  # 需要 >= 18.0.0
  1. 使用全局安装
npm install -g @xingyuchen/mysql-mcp-server@latest

问题:SSE 流断开

错误信息

SSE stream disconnected: TypeError: terminated

解决方案

mcp.json 中设置更长的超时或禁用超时:

{
  "mysql-mcp-http": {
    "type": "streamableHttp",
    "url": "http://localhost:3002/mcp",
    "timeout": 0,  // 0 表示无超时限制
    "headers": { ... }
  }
}

问题:安全漏洞警告

警告信息

npm audit: vulnerabilities found

解决方案

# 自动修复
npm audit fix

# 如果还有问题,强制修复
npm audit fix --force

# 重新构建
npm run build

问题:端口被占用

错误信息

Error: listen EADDRINUSE: address already in use :::3002

解决方案

  1. 更改端口(在 .env 文件中):
PORT=3003
  1. 或者关闭占用端口的进程
# Windows
netstat -ano | findstr :3002
taskkill /PID <进程ID> /F

# Linux/Mac
lsof -i :3002
kill -9 <进程ID>

获取更多帮助


📄 License

Apache 2.0 License - 详见 LICENSE 文件


⭐ 如果这个项目对你有帮助,请给个 Star 支持一下!