MySQL MCP Server — a secure, read-only-by-default MySQL integration for AI clients via the Model Context Protocol.
| Tool | Description | Read-only mode |
|---|---|---|
sql_query |
Execute SELECT / SHOW / DESCRIBE / EXPLAIN queries | Allowed |
sql_list_tables |
List all tables in the current database | Allowed |
sql_table_schema |
Get column structure and comments of a table | Allowed |
sql_execute |
Execute INSERT / UPDATE / DELETE (auto-rolled back) | Blocked |
| Variable | Description | Default |
|---|---|---|
MYSQL_HOST |
Database host | - |
MYSQL_PORT |
Database port | 3306 |
MYSQL_USER |
Database user | - |
MYSQL_PASS |
Database password | (empty) |
MYSQL_DB |
Database name | - |
| Variable | Description | Default |
|---|---|---|
MYSQL_READONLY |
Set to false to disable read-only mode |
true (enabled) |
MYSQL_READONLY_PREFIXES |
Custom SQL keyword whitelist (comma-separated, overrides defaults) | SELECT,SHOW,DESCRIBE,DESC,EXPLAIN,WITH |
| Variable | Description | Default |
|---|---|---|
MYSQL_CONNECTION_LIMIT |
Max connections in pool | 10 |
MYSQL_MULTIPLE_STATEMENTS |
Set to false to disable multi-statement execution |
true |
npm install @maxlmgc/mysql-mcpAdd to your MCP client configuration:
{
"mcpServers": {
"mysql-mcp": {
"command": "npx",
"args": ["-y", "@maxlmgc/mysql-mcp"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "root",
"MYSQL_PASS": "your_password",
"MYSQL_DB": "your_database"
}
}
}
}By default only query operations are allowed; sql_execute is not exposed.
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_USER": "root",
"MYSQL_DB": "your_database",
"MYSQL_READONLY": "false"
}Only allow SELECT and SHOW:
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_USER": "root",
"MYSQL_DB": "your_database",
"MYSQL_READONLY_PREFIXES": "SELECT,SHOW"
}- Read-only by default:
sql_executeis not registered in read-only mode - SQL injection prevention: Table names validated with regex; parameterized queries used
- Startup validation: Missing required env vars cause immediate failure
- Transaction rollback:
sql_executeruns in a transaction that is always rolled back - Dual-layer protection: SQL validation at both tool layer and connection pool layer
MIT