mcpField
M
MySQL Database Access MCP Server

MySQL Database Access MCP Server

本地服务
github.com/dpflucas数据库745 周前更新

关于 MySQL Database Access MCP Server

MySQL Database Access MCP Server 是一个面向 MySQL 数据库的只读 MCP 服务,可列出数据库和数据表、查看表结构并执行只读查询。它通过查询校验、超时和行数限制控制访问范围,适合需要让 AI 助手安全查看数据库内容的用户。

主要功能

  1. 01列出可访问的数据库与数据表
  2. 02查看指定表的结构定义
  3. 03执行仅限 SELECT、SHOW、DESCRIBE、EXPLAIN 的查询
  4. 04查询超时与返回行数限制
  5. 05BIGINT 与 DECIMAL 以字符串返回以避免精度损失
  6. 06可配置连接池参数

适用场景

  1. 01让 AI 助手探索数据库结构与表关系
  2. 02在不修改数据的前提下查询业务数据
  3. 03为数据分析提供只读的 SQL 查询入口

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露 list_databases、list_tables、describe_table 和 execute_query 等工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"mysql": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mysql-mcp-server MCP server

npm version

MySQL 数据库访问 MCP 服务

此 MCP 服务提供对 MySQL 数据库的只读访问。它支持:

  • 列出可用数据库
  • 列出数据库中的表
  • 描述表结构
  • 执行只读 SQL 查询

安全功能

  • 只读访问:仅允许 SELECT、SHOW、DESCRIBE 和 EXPLAIN 语句;拒绝可操作文件的 SELECT INTO 和 LOAD_FILE 形式
  • 查询验证:防止 SQL 注入并阻止任何数据修改尝试
  • 查询超时:防止长时间运行的查询消耗资源
  • 行数限制:防止返回过多数据
  • 大数精确处理:BIGINT 和 DECIMAL 值以字符串形式返回,以防止精度损失

安装

1. 使用以下任一方式安装:
从 NPM 安装
# Install globally
npm install -g mysql-mcp-server

# Or install locally in your project
npm install mysql-mcp-server
从源代码构建
# Clone the repository
git clone https://github.com/dpflucas/mysql-mcp-server.git
cd mysql-mcp-server

# Install dependencies and build
npm install
npm run build
2. 配置环境变量

服务需要以下环境变量:

  • MYSQL_HOST:数据库服务器主机名
  • MYSQL_PORT:数据库服务器端口(默认值:3306)
  • MYSQL_USER:数据库用户名
  • MYSQL_PASSWORD:数据库密码(可选,但建议用于安全连接)
  • MYSQL_DATABASE:默认数据库名称(可选)
3. 添加到 MCP 设置

将以下配置添加到 MCP 设置文件:

如果通过 npm 安装(选项 1):

{
  "mcpServers": {
    "mysql": {
      "command": "npx",
      "args": ["mysql-mcp-server"],
      "env": {
        "MYSQL_HOST": "your-mysql-host",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your-mysql-user",
        "MYSQL_PASSWORD": "your-mysql-password",
        "MYSQL_DATABASE": "your-default-database"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

如果从源代码构建(选项 2):

{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": ["/path/to/mysql-mcp-server/build/index.js"],
      "env": {
        "MYSQL_HOST": "your-mysql-host",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your-mysql-user",
        "MYSQL_PASSWORD": "your-mysql-password",
        "MYSQL_DATABASE": "your-default-database"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

可用工具

list_databases

列出 MySQL 服务器上所有可访问的数据库。

参数:无

示例:

{
  "server_name": "mysql",
  "tool_name": "list_databases",
  "arguments": {}
}
list_tables

列出指定数据库中的所有表。

参数:

  • database(可选):数据库名称(如果未指定,则使用默认值)

示例:

{
  "server_name": "mysql",
  "tool_name": "list_tables",
  "arguments": {
    "database": "my_database"
  }
}
describe_table

显示指定表的结构。

参数:

  • database(可选):数据库名称(如果未指定,则使用默认值)
  • table(必需):表名称

示例:

{
  "server_name": "mysql",
  "tool_name": "describe_table",
  "arguments": {
    "database": "my_database",
    "table": "my_table"
  }
}
execute_query

执行只读 SQL 查询。

参数:

  • query(必需):SQL 查询(仅允许 SELECT、SHOW、DESCRIBE 和 EXPLAIN 语句)
  • database(可选):数据库名称(如果未指定,则使用默认值)

示例:

{
  "server_name": "mysql",
  "tool_name": "execute_query",
  "arguments": {
    "database": "my_database",
    "query": "SELECT * FROM my_table LIMIT 10"
  }
}

高级连接池配置

如需更精细地控制 MySQL 连接池行为,可以配置其他参数:

{
  "mcpServers": {
    "mysql": {
      "command": "npx",
      "args": ["mysql-mcp-server"],
      "env": {
        "MYSQL_HOST": "your-mysql-host",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your-mysql-user",
        "MYSQL_PASSWORD": "your-mysql-password",
        "MYSQL_DATABASE": "your-default-database",
        
        "MYSQL_CONNECTION_LIMIT": "10",
        "MYSQL_QUEUE_LIMIT": "0",
        "MYSQL_CONNECT_TIMEOUT": "10000",
        "MYSQL_IDLE_TIMEOUT": "60000",
        "MYSQL_MAX_IDLE": "10"
      },
      "disabled": false,
      "autoApprove": []
    }
  }
}

这些高级选项包括:

  • MYSQL_CONNECTION_LIMIT:控制连接池中的最大连接数(默认值:10)
  • MYSQL_QUEUE_LIMIT:设置可排队的最大连接请求数(默认值:0,即无限制)
  • MYSQL_CONNECT_TIMEOUT:调整连接超时时间,单位为毫秒(默认值:10000)
  • MYSQL_IDLE_TIMEOUT:配置连接释放前可保持空闲的时长(单位为毫秒)
  • MYSQL_MAX_IDLE:设置连接池中保留的最大空闲连接数

测试

此服务包含测试脚本,可用于验证其与 MySQL 配置的兼容性:

1. 设置测试数据库

此脚本会创建测试数据库、表和示例数据:

# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password

# Run the setup script
npm run test:setup
2. 测试 MCP 工具

此脚本会针对测试数据库测试每个 MCP 工具:

# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password
export MYSQL_DATABASE=mcp_test_db

# Run the tools test script
npm run test:tools
3. 运行所有测试

运行设置脚本和工具测试:

# Set your MySQL credentials as environment variables
export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=your_username
export MYSQL_PASSWORD=your_password

# Run all tests
npm test

故障排除

如果遇到问题:

  1. 检查服务日志中的错误消息
  2. 验证 MySQL 凭据和连接详情
  3. 确保 MySQL 用户具有适当的权限
  4. 检查查询是否为只读且格式正确

许可证

本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。