mysql-mcp-server
Enables running SQL queries (SELECT, INSERT, UPDATE, DELETE) against a MySQL database, with support for read-only or read-write mode, parameterized queries, and automatic reconnect.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mysql-mcp-serverShow me the first 10 records from the customers table"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mysql-mcp-server
A Model Context Protocol (MCP) server that lets an MCP
client (Claude Desktop, Claude Code, etc.) run SQL against a MySQL database through four
tools: select, insert, update, and delete.
The server runs as a uv-managed Python package and communicates with the client over
stdio, as a subprocess started by the client.
Requirements
Python 3.11+
A reachable MySQL server
Related MCP server: Universal Database MCP Server
Installation
uv syncConfiguration
The server requires six values, each settable via environment variable and/or CLI flag (CLI flags take priority over environment variables):
Parameter | Env var | CLI flag | Required | Default |
Mode |
|
| yes | — ( |
Host |
|
| yes | — |
Port |
|
| no |
|
User |
|
| yes | — |
Password |
|
| yes | — |
Database |
|
| yes | — |
If a required value is missing, or MYSQL_MODE is not readonly/readwrite, the server
prints an error to stderr and exits with status code 1 without starting.
readonlymode: only theselecttool is allowed.insert/update/deleteare rejected with aPERMISSION_DENIEDerror.readwritemode: all four tools are allowed.
The mode is fixed for the lifetime of the process; it cannot be changed at runtime.
Security recommendation:
readonlymode is an application-level guard, not a substitute for database privileges. Where possible, pointreadonlymode at a MySQL account that only hasSELECTgrants.
Is a
.envfile required? No. The server itself never reads.envfiles — it only reads CLI flags and real process environment variables (os.environ). How you get values into that environment depends on how you run it:
As an MCP server (see Connecting from an MCP client below): the client (Claude Desktop/Code) spawns the server process and injects the
envblock from its own JSON config directly as environment variables. No.envfile is involved or needed.Running the CLI directly for local dev/testing:
.envis just a convenience so you don't have toexportsix variables by hand. Copy.env.exampleto.env, fill in real values, and load it explicitly — it is not read automatically:uv run --env-file .env mysql-mcp-server
.envis git-ignored and must never be committed.
Running
# Environment variables (or use `uv run --env-file .env mysql-mcp-server`, see above)
export MYSQL_MODE=readonly
export MYSQL_HOST=127.0.0.1
export MYSQL_PORT=3306
export MYSQL_USER=app_user
export MYSQL_PASSWORD=secret
export MYSQL_DATABASE=mydb
uv run mysql-mcp-server
# Or, equivalently, via CLI flags
uv run mysql-mcp-server \
--mysql-mode readonly \
--mysql-host 127.0.0.1 \
--mysql-port 3306 \
--mysql-user app_user \
--mysql-password secret \
--mysql-database mydbConnecting from an MCP client
Claude Desktop / Claude Code
Add an entry to your MCP client's server config (e.g. Claude Desktop's
claude_desktop_config.json, or .mcp.json for Claude Code):
{
"mcpServers": {
"mysql": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/mysql-mcp-server",
"run",
"mysql-mcp-server"
],
"env": {
"MYSQL_MODE": "readonly",
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_USER": "app_user",
"MYSQL_PASSWORD": "secret",
"MYSQL_DATABASE": "mydb"
}
}
}
}Restart the client after editing the config. The select, insert, update, and
delete tools (subject to MYSQL_MODE) should then be available to the model.
Tools
All four tools take {"query": string, "params"?: array} and always use %s
parameter-binding placeholders in query — never string-format user input into a query.
Tool | Allowed in | Query must start with | Success |
| any mode |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Every tool call returns one of:
{ "success": true, "data": { ... } }{ "success": false, "error": { "code": "...", "message": "..." } }Error codes: PERMISSION_DENIED, INVALID_QUERY_TYPE, MULTI_STATEMENT_NOT_ALLOWED,
DB_CONNECTION_ERROR, DB_EXECUTION_ERROR, INTERNAL_ERROR.
Multi-statement queries (;-separated) and any DDL/privilege statement (DROP,
TRUNCATE, ALTER, GRANT, CREATE USER, ...) are always rejected, since only the
four whitelisted statement types above are ever accepted.
Development
uv sync
uv run ruff format .
uv run ruff check .
uv run pytest -v
uv run uv build # packaging checkTroubleshooting
Server exits immediately with status 1: a required
MYSQL_*value is missing orMYSQL_MODEis invalid — check stderr for which one.DB_CONNECTION_ERROR: MySQL is unreachable, or the credentials are wrong. The server keeps running and will retry the connection on the next tool call.PERMISSION_DENIEDon insert/update/delete: the server is running inreadonlymode; restart it withMYSQL_MODE=readwriteif writes are intended.
Version history
0.1.0 — Initial release:
select/insert/update/deletetools,readonly/readwritemode policy, stdio MCP transport, automatic reconnect-and-retry on lost connections.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that provides read-only access to MySQL databases.451970MIT
- FlicenseNot gradedqualityDmaintenanceA versatile MCP server that connects to multiple relational databases (MySQL, PostgreSQL, Oracle, SQL Server, SQLite) and enables secure read-only SQL query execution and metadata access.4
- AlicenseNot gradedqualityBmaintenanceA MySQL MCP server for local stdio clients, enabling database queries and management with read-only/write modes, audit logging, and configurable security.655MIT
- FlicenseNot gradedqualityCmaintenanceA generic MCP server for MySQL operations, enabling listing databases/tables, describing schemas, running read-only SQL, and optionally executing write SQL with logging.1
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
MCP server for managing Prisma Postgres.
2,000+ MCP servers read at source level. Know what one does before you connect. Free, no key.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/bomsan69/mysql-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server