MySQL数据库访问服务

提供对MySQL数据库的只读访问服务,包括列出数据库、表结构描述和执行只读SQL查询等功能。

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

使用说明

MySQL数据库访问MCP服务器

此MCP服务器提供对MySQL数据库的只读访问。它允许您:

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

安全功能

  • 只读访问:只允许使用SELECT、SHOW、DESCRIBE和EXPLAIN语句
  • 查询验证:防止SQL注入并阻止任何数据修改尝试
  • 查询超时:防止长时间运行的查询消耗资源
  • 行限制:防止数据返回过多

安装

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/allizwellai/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": []
    }
  }
}

可用工具

列表_数据库

列出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设置的功能:

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许可证获得许可-请参阅 许可证 文件以获取详细信息。