MySQL MCP服务器

一个安全且功能丰富的MySQL模型上下文协议(MCP)服务器,专为与Claude和VS Code GitHub Copilot等AI助手集成而设计。

  • by Lakshya-Saini
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 lakshya-saini/mysql-mcp-server

使用说明

MySQL MCP服务器

一个安全、功能丰富的MySQL模型上下文协议(MCP)服务器,专为与Claude和VS Code GitHub Copilot等AI助手集成而设计。

目录

特性

  • 安全第一:基于安全最佳实践、输入验证和可配置的访问控制构建
  • 可配置操作:根据需要启用/禁用CRUD操作和表创建(默认启用读取操作)
  • 表格数据显示:格式正确的响应便于数据可视化
  • 综合录井:调试和监控的详细日志记录
  • 基于环境的配置:使用环境变量或配置对象轻松设置
  • NPM包:准备用作项目中的依赖项

用法

使用Visual Studio代码

将此添加到您的 .vscode/mcp.json:

{
  "servers": {
    "mysql": {
      "command": "npx",
      "args": ["@lakshya-mcp/mysql-mcp-server-claude"],
      "env": {
        "MYSQL_HOST": "{your_host}",
        "MYSQL_PORT": "{your_port}",
        "MYSQL_USER": "{your_username}",
        "MYSQL_PASSWORD": "{your_password}",
        "MYSQL_DATABASE": "{your_database}",
        "MYSQL_ALLOW_CREATE": "false",
        "MYSQL_ALLOW_UPDATE": "false",
        "MYSQL_ALLOW_DELETE": "false",
        "MYSQL_ALLOW_CREATE_TABLE": "false",
        "MYSQL_READ_ONLY": "true" // Set to "true" for read-only mode; "false" allows writes.
      }
    }
  }
}

使用克劳德桌面

将此添加到您的 claude_desktop_config.json. 跟随这些 说明 查找文件。

{
  "mcpServers": {
    "mysql": {
      "command": "npx",
      "args": ["@lakshya-mcp/mysql-mcp-server-claude"],
      "env": {
        "MYSQL_HOST": "{your_host}",
        "MYSQL_PORT": "{your_port}",
        "MYSQL_USER": "{your_username}",
        "MYSQL_PASSWORD": "{your_password}",
        "MYSQL_DATABASE": "{your_database}",
        "MYSQL_ALLOW_CREATE": "false",
        "MYSQL_ALLOW_UPDATE": "false",
        "MYSQL_ALLOW_DELETE": "false",
        "MYSQL_ALLOW_CREATE_TABLE": "false",
        "MYSQL_READ_ONLY": "true" // Set to "true" for read-only mode; "false" allows writes.
      }
    }
  }
}

保存文件并重新启动claude桌面。它应该在工具下可见(选中旁边的图标 +).

使用克劳德代码

打开终端并运行以下命令:

对于windows(不带wsl):

claude mcp add mysql -e MYSQL_HOST=localhost -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASSWORD={your_password} -e MYSQL_DATABASE={your_database} -e MYSQL_ALLOW_CREATE=false -e MYSQL_ALLOW_UPDATE=false -e MYSQL_ALLOW_DELETE=false -e MYSQL_ALLOW_CREATE_TABLE=false -e MYSQL_READ_ONLY=true -- cmd /c npx @lakshya-mcp/mysql-mcp-server-claude

对于mac/windows(带wsl):

claude mcp add mysql -e MYSQL_HOST=localhost -e MYSQL_PORT=3306 -e MYSQL_USER=root -e MYSQL_PASSWORD={your_password} -e MYSQL_DATABASE={your_database} -e MYSQL_ALLOW_CREATE=false -e MYSQL_ALLOW_UPDATE=false -e MYSQL_ALLOW_DELETE=false -e MYSQL_ALLOW_CREATE_TABLE=false -e MYSQL_READ_ONLY=true -- npx -y @lakshya-mcp/mysql-mcp-server-claude

然后键入: claude 然后跑 /mcp。它应该显示:

 ❯ 1. mysql  ✔ connected · Enter to view details

使用Gemini CLI

导航到主目录并查找名为的文件夹 .gemini. 在该文件夹中,您将找到 settings.json 文件。 将此添加到您的 .gemini/settings.json 文件:

{
  "mcpServers": {
    "mysql": {
      "command": "npx",
      "args": ["@lakshya-mcp/mysql-mcp-server-claude"],
      "env": {
        "MYSQL_HOST": "{your_host}",
        "MYSQL_PORT": "{your_port}",
        "MYSQL_USER": "{your_username}",
        "MYSQL_PASSWORD": "{your_password}",
        "MYSQL_DATABASE": "{your_database}",
        "MYSQL_ALLOW_CREATE": "false",
        "MYSQL_ALLOW_UPDATE": "false",
        "MYSQL_ALLOW_DELETE": "false",
        "MYSQL_ALLOW_CREATE_TABLE": "false",
        "MYSQL_READ_ONLY": "true" // Set to "true" for read-only mode; "false" allows writes.
      }
    }
  }
}

然后重新启动gemini cli。您应该能够看到mysql-mcp服务器。 您可以通过运行以下命令进行验证 /mcp.

在您的项目中

  1. 安装软件包
npm install -g @lakshya-mcp/mysql-mcp-server-claude
  1. 创建服务器并使用
const { MySQLMCPServer } = require("@lakshya-mcp/mysql-mcp-server-claude");

// Using environment variables
const server = new MySQLMCPServer();
await server.start();

// Or with custom configuration
const server = new MySQLMCPServer({
  database: {
    host: "localhost",
    port: 3306,
    user: "username",
    password: "password",
    database: "mydb",
  },
  features: {
    fetch: true,
    create: false,
    update: false,
    delete: false,
    createTable: false,
  },
});

可用工具

MySQL MCP Server为数据库交互提供了几个强大的工具。每个工具的设计都考虑到了安全性,并包括适当的输入验证:

mysql_list_tables

目的:列出数据库中所有可访问的表

  • 返回您有权访问的所有表的完整列表
  • 有助于发现数据库结构
  • 无需参数
  • 如果已配置,则尊重表访问控制

mysql_describe_table

目的:获取有关表结构的详细信息,包括列、类型和约束

  • 显示列名、数据类型、可空状态和键信息
  • 查询前理解表模式至关重要
  • 帮助识别主键、外键和数据约束
  • 参数:
    • table_name (string,必填):要描述的表的名称

mysql_select_data

目的:从具有可选筛选和分页的表中选择数据

  • 灵活的查询,支持过滤、排序和分页
  • 以表格格式返回数据,便于可视化
  • 支持复杂的WHERE子句以实现精确的数据检索
  • 内置行限制,提高性能和安全性
  • 参数:
    • table_name (string,必填):要查询的表的名称
    • columns (数组,可选):要选择的特定列(例如,[“姓名”、“电子邮件”])
    • where (字符串,可选):WHERE子句条件(例如,“年龄>25 AND状态='活动'”)
    • order_by (字符串,可选):ORDER BY子句(例如,“name ASC”或“created_at DESC”)
    • limit (number,可选):要返回的最大行数
    • offset (number,可选):分页时要跳过的行数

mysql_insert_data(如果启用)

目的:将新数据插入表中

  • 允许向数据库添加新记录
  • 仅在配置中启用CREATE操作时可用
  • 插入前根据表架构验证数据
  • 支持批量插入以提高效率
  • 参数:
    • table_name (string,必填):要插入的表的名称
    • data (object,必填):作为键值对插入的数据(例如,{“name”:“John”,“age”:30})

mysql_update_data(如果启用)

目的:更新表中的现有数据

  • 根据指定条件修改现有记录
  • 仅在配置中启用UPDATE操作时可用
  • 需要WHERE子句以防止意外的大规模更新
  • 根据表约束验证更新的数据
  • 参数:
    • table_name (字符串,必填):要更新的表的名称
    • data (object,必填):作为键值对更新的数据(例如,{“status”:“inactive”})
    • where (string,必填):WHERE子句,用于标识要更新的行(例如,“id=123”)
    • where_params (数组,可选):参数化WHERE子句的参数

mysql_delete_data(如果启用)

目的:从表中删除数据

  • 根据指定条件从数据库中删除记录
  • 仅在配置中启用DELETE操作时可用
  • 需要WHERE子句以防止意外批量删除
  • 包括安全检查和确认提示
  • 参数:
    • table_name (string,必填):要从中删除的表的名称
    • where (string,必填):WHERE子句,用于标识要删除的行(例如,“status='expired'”)
    • where_params (数组,可选):参数化WHERE子句的参数

mysql_create_table(如果启用)

目的:使用指定的列和约束创建新表

  • 允许使用自定义架构定义创建新的数据库表
  • 仅在配置中启用CREATE TABLE操作时可用
  • 支持各种列类型、约束和表选项
  • 包括“如果不存在”选项等安全功能
  • 参数:
    • table_name (string,必填):要创建的表的名称
    • columns (array,必填):具有以下属性的列定义数组:
      • name (字符串,必填):列名
      • type (字符串,必填):列数据类型(例如,“VARCHAR”、“INT”、“TEXT”、“DATETIME”)
      • length (number,可选):支持它的类型的列长度(例如VARCHAR(255))
      • nullable (boolean,可选):列是否可以为NULL(默认值:true)
      • primaryKey (boolean,可选):此列是否是主键的一部分(默认值:false)
      • autoIncrement (boolean,可选):此列是否自动递增(默认值:false)
      • unique (boolean,可选):此列是否具有唯一约束(默认值:false)
      • defaultValue (任意,可选):列的默认值
    • if_not_exists (布尔值,可选):如果表存在,则使用CREATE TABLE IF NOT EXISTS以避免错误(默认值:false)
    • engine (字符串,可选):存储引擎(例如“InnoDB”、“MyISAM”)
    • charset (字符串,可选):字符集(例如“utf8mb4”)
    • collation (字符串,可选):排序规则(例如,“utf8mb4_unicode_ci”)

备注:出于安全考虑,默认情况下禁用写入操作(INSERT、UPDATE、DELETE、CREATE TABLE)。仅在必要时启用它们,并确保适当的访问控制到位。

配置选项

数据库配置

{
  database: {
    host: "localhost",        // MySQL host
    port: 3306,              // MySQL port
    user: "username",        // MySQL username
    password: "password",    // MySQL password
    database: "dbname",      // Database name
    ssl: false,              // Enable SSL
    connectionLimit: 10,     // Connection pool limit
    acquireTimeout: 60000   // Connection acquire timeout in ms
  }
}

功能配置

{
  features: {
    fetch: true,        // Always enabled - read operations
    create: false,      // Enable INSERT operations
    update: false,      // Enable UPDATE operations
    delete: false,      // Enable DELETE operations
    createTable: false  // Enable CREATE TABLE operations
  }
}

安全配置

{
  security: {
    allowedTables: ["users", "products"],  // Only allow these tables
    blockedTables: ["admin", "secrets"],   // Block these tables
    maxRows: 1000,                        // Maximum rows per query
    readOnly: true                        // Disable all write operations
  }
}

日志记录配置

{
  logging: {
    level: "info",              // error, warn, info, debug
    file: "./mysql-mcp.log"     // Optional log file path
  }
}

安全功能

  • 输入验证:所有输入都使用Joi模式进行验证
  • SQL注入防护:仅使用参数化查询
  • 表访问控制:表格的可配置允许/阻止列表
  • 行限制:每个查询可配置的最大行数
  • 只读模式:禁用所有写入操作的选项
  • 连接池:具有超时功能的安全连接管理
  • 审计日志:全面记录所有操作和安全事件

错误处理

服务器包括全面的错误处理:

  • 数据库连接错误
  • SQL查询无效
  • 拒绝权限操作
  • 配置验证错误
  • 运行时异常

所有错误都会与上下文一起记录,并作为结构化响应返回。

贡献

欢迎投稿!请确保维护所有安全最佳实践,并为新功能添加适当的测试。

支持

对于问题和疑问,请在GitHub存储库中创建问题。