The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the MySQL MCP Server listing page.
A Python Model Context Protocol (MCP) server for inspecting and querying MySQL databases from MCP-compatible clients. It provides table discovery, schema inspection, read query execution, DDL lookup, query explanation, and optional write/DDL tools for controlled database administration workflows.
SHOW CREATE TABLE outputmysql_execute_read_query only accepts a single statement beginning with SELECT, rejects common modifying SQL keywords and risky file-read/write forms, and caps returned rows by MYSQL_READ_QUERY_LIMIT. This is a guardrail, not a substitute for database permissions. Use a dedicated read-only MySQL user for safe exploration. The write and DDL tools can modify or destroy data if the configured database user is allowed to do so; keep them on manual approval in your MCP client.
When published to PyPI, install or run the server like a standard Python MCP package:
For local development from source:
Copy the example environment file and update it with your database connection details.
| Variable | Description | Required | Default |
|---|---|---|---|
MYSQL_HOST | MySQL host | No | localhost |
MYSQL_PORT | MySQL port | No | 3306 |
MYSQL_USER | MySQL username | No | root |
MYSQL_PASSWORD | MySQL password | No | Empty |
MYSQL_DATABASE | MySQL database name | Yes | Empty |
MYSQL_POOL_SIZE | Connection pool size | No | 5 |
LOG_LEVEL | Python logging level | No | INFO |
MYSQL_READ_QUERY_LIMIT | Maximum rows returned by read queries | No | 1000 |
Example read-only user:
From a local checkout before PyPI publication, run:
For published installs, prefer uvx. MCP servers using stdio must write protocol messages only to stdout; this server writes logs to stderr through Python logging.
Most MCP clients accept this mcpServers JSON shape:
For local development from this repository, use the installed console script path instead:
VS Code uses the same command/args/env model in its MCP configuration:
| Tool | Purpose | Safety |
|---|---|---|
mysql_list_tables | List tables in the configured database | Read-only |
mysql_describe_table | Show schema for a table | Read-only |
mysql_execute_read_query | Execute a single bounded SELECT query | Read-only guardrail |
mysql_execute_write_query | Execute a single INSERT, UPDATE, or DELETE | Destructive |
mysql_execute_ddl | Execute a single CREATE, DROP, ALTER, or TRUNCATE | Destructive |
mysql_get_table_ddl | Return SHOW CREATE TABLE output | Read-only |
mysql_explain_query | Run EXPLAIN for a single query | Read-only |
mysql_get_database_summary | Return table list and row counts | Read-only |
Without a database, verify syntax with:
With a configured database, start the server and use your MCP client to call list_tables.
This server is published through the standard Python MCP distribution path:
mdev-mysql-mcp-serverio.github.musaddiq-dev/mysql-mcp-serveruvxstdioThe mcp-name marker at the top of this README is required for MCP Registry ownership verification. Users should prefer uvx mdev-mysql-mcp-server in local MCP client configurations.
.env or MCP client configs containing credentials.execute_write_query and execute_ddl on explicit manual approval.MIT