Skip to main content
Glama
YaangHailong

Local MySQL Read-only MCP Server

by YaangHailong
README.md
# Local MySQL Read-only MCP Server

This project provides a small stdio MCP server for reading local MySQL data.
It is designed to run with:

```powershell
D:\anaconda\envs\torch\python.exe
```

The server implements a minimal MCP JSON-RPC stdio layer directly because the
official Python MCP SDK requires a newer Python than the current `torch`
environment.

## Install Dependency

Recommended:

```powershell
conda install -n torch -c conda-forge pymysql
```

Fallback:

```powershell
D:\anaconda\envs\torch\python.exe -m pip install PyMySQL -i https://pypi.tuna.tsinghua.edu.cn/simple
```

If both commands fail because of local SSL or proxy settings, install `PyMySQL`
manually into the `torch` conda environment and then run the tests below.

## Configure MySQL

Copy the example file and fill in local credentials:

```powershell
Copy-Item mysql_mcp_config.example.json mysql_mcp_config.json
```

`mysql_mcp_config.json` is ignored by git. You can also point to another config
file with:

```powershell
$env:MYSQL_MCP_CONFIG = "D:\path\to\mysql_mcp_config.json"
```

Use a MySQL user with read-only permissions whenever possible. The MCP server
only exposes read tools, but database permissions should still enforce the same
rule.

## MCP Client Configuration

Example stdio configuration:

```json
{
  "mcpServers": {
    "local-mysql-readonly": {
      "command": "D:\\anaconda\\envs\\torch\\python.exe",
      "args": ["D:\\桌面\\aienglish\\server.py"],
      "env": {
        "MYSQL_MCP_CONFIG": "D:\\桌面\\aienglish\\mysql_mcp_config.json"
      }
    }
  }
}
```

## Tools

- `list_databases`: list visible databases, excluding system schemas by default.
- `list_tables`: list tables and views in one database.
- `describe_table`: return column and index metadata.
- `read_rows`: read rows using structured filters, ordering, limit, and offset.

`read_rows` does not accept raw SQL. Database, table, and column names are
validated against MySQL metadata, and values are sent as query parameters.

Allowed filter operators:

```text
=, !=, <, <=, >, >=, LIKE, IN, IS NULL, IS NOT NULL
```

## Test

```powershell
D:\anaconda\envs\torch\python.exe -m unittest
```

After `mysql_mcp_config.json` is configured and `PyMySQL` is installed, validate
manually with your MCP client by calling:

1. `list_databases`
2. `list_tables`
3. `describe_table`
4. `read_rows` with `limit` set to `5`