关于 MCP Server for MySQL based on NodeJS
这款基于 NodeJS 的 MCP 服务为 LLM 应用提供 MySQL 数据库只读访问。它开放 SQL 查询和数据库结构信息,并提供预处理语句、速率限制和查询超时等控制。
主要功能
- 01只读 SQL 查询
- 02支持预处理语句
- 03表结构与关系信息
- 04查询超时与分页
- 05速率限制和查询控制
适用场景
- 01检查 MySQL 表结构
- 02执行只读数据库查询
- 03为 LLM 应用提供数据库上下文
MCP 相关
该服务向 MCP 客户端开放 `mysql_query` 工具和数据库结构资源。查询在只读事务中执行。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
基于 NodeJS 的 MySQL MCP 服务

一个提供 MySQL 数据库只读访问权限的模型上下文协议服务。此服务可让大模型检查数据库架构并执行只读查询。
安装
使用 Smithery
通过 Smithery 安装和配置此 MCP 服务最简单:
# Install the MCP server
npx -y @smithery/cli@latest install @benborla29/mcp-server-mysql --client claude
配置过程中,系统会提示你输入 MySQL 连接详细信息。Smithery 会自动:
- 设置正确的环境变量
- 配置你的大模型应用以使用 MCP 服务
- 测试与 MySQL 数据库的连接
- 如有需要,提供实用的故障排除建议
使用 MCP Get
你也可以通过 MCP Get 安装此软件包:
npx @michaellatman/mcp-get@latest install @benborla29/mcp-server-mysql
MCP Get 提供 MCP 服务的集中式注册表,并简化安装流程。
使用 NPM/PNPM
手动安装:
# Using npm
npm install -g @benborla29/mcp-server-mysql
# Using pnpm
pnpm add -g @benborla29/mcp-server-mysql
手动安装后,你需要配置大模型应用以使用 MCP 服务(请参阅下方的“配置”部分)。
组件
工具
- mysql_query
- 对已连接的数据库执行只读 SQL 查询
- 输入:
sql(字符串):要执行的 SQL 查询 - 所有查询均在只读事务中执行
- 支持使用预处理语句安全地处理参数
- 可配置查询超时和结果分页
- 内置查询执行统计信息
资源
此服务提供全面的数据库信息:
- 表架构
- 每个表的 JSON 架构信息
- 列名和数据类型
- 索引信息和约束
- 外键关系
- 表统计信息和指标
- 自动从数据库元数据中发现
安全功能
- 通过预处理语句防止 SQL 注入
- 查询白名单/黑名单功能
- 查询执行速率限制
- 查询复杂度分析
- 可配置连接加密
- 强制使用只读事务
性能优化
- 优化的连接池
- 查询结果缓存
- 大型结果集流式传输
- 查询执行计划分析
- 可配置查询超时
监控和调试
- 全面的查询日志记录
- 性能指标收集
- 错误跟踪和报告
- 健康检查端点
- 查询执行统计信息
配置
使用 Smithery 自动配置
如果你使用 Smithery 安装,配置已设置完成。你可以使用以下命令查看或修改配置:
smithery configure @benborla29/mcp-server-mysql
Claude Desktop App 手动配置
要为 Claude Desktop App 手动配置 MCP 服务,请将以下内容添加到 claude_desktop_config.json 文件中(通常位于你的用户目录下):
{
"mcpServers": {
"mcp_server_mysql": {
"command": "npx",
"args": [
"-y",
"@benborla29/mcp-server-mysql"
],
"env": {
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASS": "",
"MYSQL_DB": "db_name"
}
}
}
}
将 db_name 替换为你的数据库名称,或留空以访问所有数据库。
高级配置选项
如需更精细地控制 MCP 服务的行为,可以使用以下高级配置选项:
{
"mcpServers": {
"mcp_server_mysql": {
"command": "/path/to/npx/binary/npx",
"args": [
"-y",
"@benborla29/mcp-server-mysql"
],
"env": {
// Basic connection settings
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASS": "",
"MYSQL_DB": "db_name",
"PATH": "/path/to/node/bin:/usr/bin:/bin",
// Performance settings
"MYSQL_POOL_SIZE": "10",
"MYSQL_QUERY_TIMEOUT": "30000",
"MYSQL_CACHE_TTL": "60000",
// Security settings
"MYSQL_RATE_LIMIT": "100",
"MYSQL_MAX_QUERY_COMPLEXITY": "1000",
"MYSQL_SSL": "true",
// Monitoring settings
"MYSQL_ENABLE_LOGGING": "true",
"MYSQL_LOG_LEVEL": "info",
"MYSQL_METRICS_ENABLED": "true"
}
}
}
}
环境变量
基本连接
MYSQL_HOST:MySQL 服务主机(默认值:"127.0.0.1")MYSQL_PORT:MySQL 服务端口(默认值:"3306")MYSQL_USER:MySQL 用户名(默认值:"root")MYSQL_PASS:MySQL 密码MYSQL_DB:目标数据库名称
性能配置
MYSQL_POOL_SIZE:连接池大小(默认值:"10")MYSQL_QUERY_TIMEOUT:查询超时时间,单位为毫秒(默认值:"30000")MYSQL_CACHE_TTL:缓存生存时间,单位为毫秒(默认值:"60000")
安全配置
MYSQL_RATE_LIMIT:每分钟的最大查询数(默认值:"100")MYSQL_MAX_QUERY_COMPLEXITY:最大查询复杂度评分(默认值:"1000")MYSQL_SSL:启用 SSL/TLS 加密(默认值:"false")
监控配置
MYSQL_ENABLE_LOGGING:启用查询日志(默认值:"false")MYSQL_LOG_LEVEL:日志级别(默认值:"info")MYSQL_METRICS_ENABLED:启用性能指标(默认值:"false")
测试
数据库设置
运行测试前,需要设置测试数据库并填充测试数据:
-
创建测试数据库和用户
-- Connect as root and create test database CREATE DATABASE IF NOT EXISTS mcp_test; -- Create test user with appropriate permissions CREATE USER IF NOT EXISTS 'mcp_test'@'localhost' IDENTIFIED BY 'mcp_test_password'; GRANT ALL PRIVILEGES ON mcp_test.* TO 'mcp_test'@'localhost'; FLUSH PRIVILEGES; -
运行数据库设置脚本
# Run the database setup script pnpm run setup:test:db此脚本会创建必要的表并填充数据。脚本位于
scripts/setup-test-db.ts -
配置测试环境 在项目根目录中创建
.env.test文件:MYSQL_HOST=127.0.0.1 MYSQL_PORT=3306 MYSQL_USER=mcp_test MYSQL_PASS=mcp_test_password MYSQL_DB=mcp_test -
更新 package.json 脚本 将以下脚本添加到 package.json 中:
{ "scripts": { "setup:test:db": "ts-node scripts/setup-test-db.ts", "pretest": "pnpm run setup:test:db", "test": "vitest run", "test:watch": "vitest", "test:coverage": "vitest run --coverage" } }
运行测试
项目包含一套全面的测试,可确保功能正常且可靠:
# First-time setup
pnpm run setup:test:db
# Run all tests
pnpm test
故障排除
使用 Smithery 排查故障
如果你通过 Smithery 安装,可以使用其内置诊断功能:
# Check the status of your MCP server
smithery status @benborla29/mcp-server-mysql
# Run diagnostics
smithery diagnose @benborla29/mcp-server-mysql
# View logs
smithery logs @benborla29/mcp-server-mysql
使用 MCP Get 排查故障
如果你通过 MCP Get 安装:
# Check the status
mcp-get status @benborla29/mcp-server-mysql
# View logs
mcp-get logs @benborla29/mcp-server-mysql
常见问题
-
连接问题
- 确认 MySQL 服务正在运行且可访问
- 检查凭据和权限
- 如果启用了 SSL/TLS,请确保配置正确
- 尝试使用 MySQL 客户端连接,以确认可以访问
-
性能问题
- 调整连接池大小
- 配置查询超时值
- 如有需要,启用查询缓存
- 检查查询复杂度设置
- 监控服务资源使用情况
-
安全限制
- 检查速率限制配置
- 检查查询白名单/黑名单设置
- 确认 SSL/TLS 设置
- 确保用户拥有适当的 MySQL 权限
-
路径解析 如果遇到错误“Could not connect to MCP server mcp-server-mysql”,请显式设置所有必需二进制文件的路径:
{
"env": {
"PATH": "/path/to/node/bin:/usr/bin:/bin"
}
}
- 身份验证问题
- 对于 MySQL 8.0 及更高版本,请确保服务支持
caching_sha2_password身份验证插件 - 检查 MySQL 用户是否配置了正确的身份验证方式
- 如有需要,尝试创建使用旧版身份验证方式的用户:
CREATE USER 'user'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
- 对于 MySQL 8.0 及更高版本,请确保服务支持
贡献
欢迎贡献!请随时向以下地址提交 Pull Request: https://github.com/benborla/mcp-server-mysql
开发环境设置
- 克隆仓库
- 安装依赖:
pnpm install - 构建项目:
pnpm run build - 运行测试:
pnpm test
项目路线图
我们正在积极改进此 MCP 服务。请查看 CHANGELOG.md,了解计划中的功能详情,包括:
- 通过预处理语句增强查询能力
- 高级安全功能
- 性能优化
- 全面的监控
- 扩展的架构信息
如果你想为其中任何领域做贡献,请查看 GitHub 上的 issues,或新建一个 issue 来讨论你的想法。
提交更改
- Fork 仓库
- 创建功能分支:
git checkout -b feature/your-feature-name - 提交更改:
git commit -am 'Add some feature' - 推送到分支:
git push origin feature/your-feature-name - 提交 Pull Request
许可证
此 MCP 服务采用 MIT 许可证。详情请参阅 LICENSE 文件。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。