Skip to main content
Glama
664393425

MySQL MCP Server

by 664393425
README.md
# MySQL MCP Server

A feature-rich MySQL MCP (Model Context Protocol) server for AI coding assistants. Supports read/write operations, dynamic database/server switching, auto-config from Spring Boot projects, and more.

一个功能丰富的 MySQL MCP 服务,支持读写操作、动态切换数据库/服务器、自动读取 Spring Boot 项目配置等。

## ✨ Features

| Feature | Description |
|---------|-------------|
| 📖 **Read Queries** | SELECT, SHOW, DESCRIBE, EXPLAIN with auto LIMIT |
| ✏️ **Write Operations** | INSERT, UPDATE, DELETE, REPLACE |
| 🏗️ **DDL Support** | CREATE, ALTER, DROP, TRUNCATE |
| 🔄 **Dynamic Switch Database** | Switch database without restarting |
| 🌐 **Dynamic Switch Server** | Switch to a different MySQL server on the fly |
| 📋 **Show Tables** | List all tables with metadata, supports LIKE filter |
| 🔍 **Describe Table** | View column details and CREATE TABLE SQL |
| 🔗 **Connection Info** | View current connection details |
| 📚 **Show Databases** | List all available databases |
| ⚙️ **Auto Config** | Read DB config from Spring Boot `application.yml` |
| 🔁 **Auto Retry** | Automatic reconnection on connection loss |
| 🛡️ **Process Guard** | Prevents duplicate processes on startup |
| 📝 **Logging** | Daily rotating log files |

## 📦 Installation

```bash
git clone https://github.com/YOUR_USERNAME/mysql-mcp-server.git
cd mysql-mcp-server
npm install
```

**Requirements:** Node.js >= 18.0.0

## 🚀 Usage

### Option 1: Direct Connection Parameters

```bash
node index.js --host 127.0.0.1 --port 3306 --database mydb --user root --password yourpass
```

### Option 2: Auto-read from Spring Boot Project (Recommended for Java developers)

```bash
node index.js --project-dir /path/to/your/spring-boot-module
```

The server will automatically:
1. Read `application.yml` and detect `spring.profiles.active`
2. Load the corresponding `application-{profile}.yml`
3. Parse `spring.datasource` for connection info

### Option 3: Auto-read from `.gemini/settings.json`

If no arguments are provided, the server will search for `.gemini/settings.json` in the current directory and up to 5 parent directories to load the MySQL configuration.

## 🔧 MCP Tools

### `query` — Read-only queries
Execute SELECT / SHOW / DESCRIBE / EXPLAIN statements.
- `sql` (string, required): The SQL query
- `limit` (number, optional): Max rows to return (default: 200)

### `execute` — Write operations & DDL
Execute INSERT / UPDATE / DELETE / REPLACE / CREATE / ALTER / DROP / TRUNCATE.
- `sql` (string, required): The SQL statement

### `show_tables` — List tables
List all tables in the current database.
- `pattern` (string, optional): LIKE filter (e.g., `edu_%`)

### `describe_table` — Table structure
View column details and CREATE TABLE SQL.
- `table` (string, required): Table name

### `switch_database` — Switch database
Dynamically switch to a different database on the same server.
- `database` (string, required): Target database name

### `switch_connection` — Switch server
Dynamically switch to a different MySQL server without restarting.
- `host` (string, optional): MySQL host
- `port` (number, optional): MySQL port
- `user` (string, optional): Username
- `password` (string, optional): Password
- `database` (string, optional): Database name

Only pass the parameters you want to change; the rest will remain unchanged.

### `connection_info` — Current connection
View the current connection details (host, port, database, user, MySQL version).

### `show_databases` — List databases
List all available databases on the current MySQL server.

## ⚙️ IDE Configuration

### Antigravity / Gemini

Edit `~/.gemini/settings.json` or `~/.gemini/antigravity/mcp_config.json`:

```json
{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": [
        "/path/to/mysql-mcp-server/index.js",
        "--host", "127.0.0.1",
        "--port", "3306",
        "--database", "mydb",
        "--user", "root",
        "--password", "yourpass"
      ]
    }
  }
}
```

### Claude Desktop

Edit `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": [
        "/path/to/mysql-mcp-server/index.js",
        "--host", "127.0.0.1",
        "--port", "3306",
        "--database", "mydb",
        "--user", "root",
        "--password", "yourpass"
      ]
    }
  }
}
```

### Cursor

Edit `.cursor/mcp.json` in your project root:

```json
{
  "mcpServers": {
    "mysql": {
      "command": "node",
      "args": [
        "/path/to/mysql-mcp-server/index.js",
        "--project-dir",
        "/path/to/your/spring-boot-module"
      ]
    }
  }
}
```

## 📝 Logging

Logs are written to the `logs/` directory with daily rotation:

```
logs/
├── 2026-03-15.log
├── 2026-03-16.log
└── ...
```

Each log entry includes timestamp, level (INFO/WARN/ERROR), message, and optional structured data.

## 🔒 Safety

- **Read queries** are restricted to SELECT, SHOW, DESCRIBE, and EXPLAIN
- **Write operations** require explicit use of the `execute` tool
- **DROP/TRUNCATE** operations include a danger warning
- **Failed switches** automatically rollback to the previous connection
- **SQL injection prevention** via parameterized table name sanitization

## 📄 License

MIT License - see [LICENSE](./LICENSE) for details.