MySQL MCP Server
Provides tools to interact with MySQL databases, including listing databases and tables, describing table schemas, and executing read-only SQL queries (with optional write support when configured).
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 Serverlist tables in mydb"
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 (FastMCP)
Python MCP server built with FastMCP to connect to MySQL. It exposes tools to list databases and tables, describe tables, and execute SQL queries (read-only by default).
Requirements
Python 3.10+
MySQL reachable (host, username, password)
Related MCP server: MCP Server for MySQL
Installation
Requires uv. In the project directory:
cd /Users/macbook/projets/MCP/mysql
uv syncThis creates the virtual environment (.venv) and installs dependencies.
No pip step is required.
To validate locally:
uv run env PYTHONPATH=src python -m mysql_mcpConfiguration
How the server reads credentials
The server uses environment variables with prefix MYSQL_. The resolution happens in two layers:
First: values provided to the process via
envin Cursormcp.json(or via shell/CI).Second (fallback): values from the project
.envfile, but only for fields that are not defined in the environment.
This means that if you configure MYSQL_USER and MYSQL_PASSWORD in mcp.json, the project .env file will not override those values.
Environment variables (or .env file):
Variable | Required | Description | Default |
| Yes | MySQL username | - |
| Yes | Password | - |
| No | Host | 127.0.0.1 |
| No | Port | 3306 |
| No | Default database | - |
| No | Connection pool size | 5 |
| No | Allow INSERT/UPDATE/DELETE | false |
| No | Enable TLS/SSL for MySQL connection | false |
| No | Validate server certificate chain | true |
| No | Path to CA bundle (recommended in prod) | - |
| No | Client certificate path (for mTLS) | - |
| No | Client private key path (for mTLS) | - |
Security details
By default, the server only accepts read-only queries (for example: SELECT, SHOW, DESCRIBE).
When MYSQL_ALLOW_WRITE=true, it also accepts INSERT, UPDATE, DELETE, and REPLACE.
Additional rules:
UPDATEandDELETErequire an explicitWHEREclause (otherwise the query is rejected).
.env file (optional)
If you want, create /Users/macbook/projets/MCP/mysql/.env using the same format as the variables above.
You can use /.env.example in this repository as a reference.
Minimum example (read-only):
MYSQL_USER=user
MYSQL_PASSWORD=password
MYSQL_DATABASE=database
MYSQL_ALLOW_WRITE=falseProduction note (require_secure_transport=ON)
If your MySQL server enforces secure transport (--require_secure_transport=ON),
you must enable TLS:
MYSQL_SSL_ENABLED=true
MYSQL_SSL_VERIFY_CERT=true
MYSQL_SSL_CA=/absolute/path/to/ca.pemIf you do not have a CA certificate available yet, you can still use TLS encryption without certificate validation:
MYSQL_SSL_ENABLED=true
MYSQL_SSL_VERIFY_CERT=falseThis is useful as a temporary fallback, but it is less secure (susceptible to
man-in-the-middle attacks). Prefer MYSQL_SSL_VERIFY_CERT=true with a valid CA
bundle in production.
If your database requires mTLS, also set:
MYSQL_SSL_CERT=/absolute/path/to/client-cert.pem
MYSQL_SSL_KEY=/absolute/path/to/client-key.pemCursor note (mcp.json)
If you are using Cursor, the most common setup is to configure MYSQL_* directly in the env of the mysql server block inside /Users/macbook/.cursor/mcp.json (as shown in the Cursor example below).
This avoids relying on the local .env file for credentials.
Running the server
STDIO (e.g. Claude Desktop, Cursor):
/usr/bin/env PYTHONPATH=/Users/macbook/projets/MCP/mysql/src /Users/macbook/projets/MCP/mysql/.venv/bin/python -m mysql_mcpAlternative:
uv run env PYTHONPATH=src python -m mysql_mcpHTTP (port 8000):
/Users/macbook/projets/MCP/mysql/.venv/bin/python -c "from mysql_mcp.server import run; run(transport='http', port=8000)"Or with the FastMCP CLI:
uv run fastmcp run mysql_mcp.server:mcp --transport http --port 8000MCP Tools
list_databases - Lists all databases.
list_tables - Lists tables in a database (optional
databaseparameter).describe_table - Returns column information (name, type, null, key, default, extra) for a table.
execute_query - Executes a validated SQL query (following the security rules).
Cursor configuration example
In Cursor Settings > MCP, add a server that will be started via stdio.
Important: for stdio, do not set transport=http and do not provide port. The server uses stdio by default.
Example (JSON in ~/.cursor/mcp.json)
If you use Cursor global configuration, edit /Users/macbook/.cursor/mcp.json (or create a .cursor/mcp.json inside this project directory) and add a mcpServers entry like this:
{
"mcpServers": {
"mysql": {
"command": "/usr/bin/env",
"args": [
"PYTHONPATH=/Users/macbook/projets/MCP/mysql/src",
"/Users/macbook/projets/MCP/mysql/.venv/bin/python",
"-m",
"mysql_mcp"
],
"cwd": "/Users/macbook/projets/MCP/mysql",
"env": {
"MYSQL_USER": "user",
"MYSQL_PASSWORD": "password",
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_DATABASE": "database",
"MYSQL_ALLOW_WRITE": "false"
}
}
}
}Per-project (recommended) - 3 environments
You can configure multiple MySQL targets per workspace by creating/updating:
/Users/macbook/projets/MCP/mysql/.cursor/mcp.json
Example (3 server blocks, read-only by default):
{
"mcpServers": {
"mysql_local": {
"command": "/usr/bin/env",
"args": [
"PYTHONPATH=/Users/macbook/projets/MCP/mysql/src",
"/Users/macbook/projets/MCP/mysql/.venv/bin/python",
"-m",
"mysql_mcp"
],
"cwd": "/Users/macbook/projets/MCP/mysql",
"env": {
"MYSQL_USER": "your_user",
"MYSQL_PASSWORD": "your_password",
"MYSQL_HOST": "127.0.0.1",
"MYSQL_PORT": "3306",
"MYSQL_DATABASE": "database",
"MYSQL_ALLOW_WRITE": "false"
}
},
"mysql_staging": {
"command": "/usr/bin/env",
"args": [
"PYTHONPATH=/Users/macbook/projets/MCP/mysql/src",
"/Users/macbook/projets/MCP/mysql/.venv/bin/python",
"-m",
"mysql_mcp"
],
"cwd": "/Users/macbook/projets/MCP/mysql",
"env": {
"MYSQL_USER": "your_user",
"MYSQL_PASSWORD": "your_password",
"MYSQL_HOST": "staging-db.example.com",
"MYSQL_PORT": "3306",
"MYSQL_DATABASE": "database",
"MYSQL_ALLOW_WRITE": "false"
}
},
"mysql_prod": {
"command": "/usr/bin/env",
"args": [
"PYTHONPATH=/Users/macbook/projets/MCP/mysql/src",
"/Users/macbook/projets/MCP/mysql/.venv/bin/python",
"-m",
"mysql_mcp"
],
"cwd": "/Users/macbook/projets/MCP/mysql",
"env": {
"MYSQL_USER": "your_user",
"MYSQL_PASSWORD": "your_password",
"MYSQL_HOST": "prod-db.example.com",
"MYSQL_PORT": "3306",
"MYSQL_DATABASE": "database",
"MYSQL_ALLOW_WRITE": "false",
"MYSQL_SSL_ENABLED": "true",
"MYSQL_SSL_VERIFY_CERT": "true",
"MYSQL_SSL_CA": "/absolute/path/to/ca.pem"
}
}
}
}Notes:
For
stdio, do not settransport=httpand do not provideport.If you removed the project
.env, it is still fine:MYSQL_*must be provided viaenvinmcp.json(as shown above).Recommended startup in MCP clients is setting
PYTHONPATHdirectly incommand/args(via/usr/bin/env), because some clients do not consistently applyenv.PYTHONPATH.
Option A (recommended) - using uv:
Command:
uvArgs:
run,env,PYTHONPATH=src,python,-m,mysql_mcpCwd: project directory (where
pyproject.tomllives)Env: set
MYSQL_USER,MYSQL_PASSWORD, and optionallyMYSQL_HOST,MYSQL_PORT,MYSQL_DATABASE,MYSQL_ALLOW_WRITE,MYSQL_SSL_*
Option B - using the Makefile shortcut:
Command:
makeArgs:
upCwd: project directory
Env: same values as Option A
Alternative - using the venv interpreter directly:
Command:
/usr/bin/envArgs:
PYTHONPATH=/absolute/path/to/project/src,.venv/bin/python,-m,mysql_mcp
License
MIT.
This server cannot be installed
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
- Alicense-qualityDmaintenanceA server that provides LLMs with read-only access to MySQL databases, allowing them to inspect database schemas and execute read-only queries.Last updated4213MIT
- AlicenseAqualityDmaintenanceProvides access to MySQL databases with fine-grained access control, supporting multiple databases simultaneously with configurable access modes (readonly, readwrite, full) and table-level permissions using whitelists, blacklists, wildcards, and regex patterns.Last updated11MIT
- AlicenseAqualityDmaintenanceEnables read-only MySQL database access, allowing listing databases, tables, describing schemas, and executing SELECT/SHOW/DESCRIBE/EXPLAIN queries.Last updated7424MIT
- FlicenseAqualityCmaintenanceProvides read-only access to a local MySQL database, enabling SQL queries, database and table listings, and table schema descriptions.Last updated4
Related MCP Connectors
This MCP server provides seamless access to Malaysia's government open data, including datasets, w…
Read-only MCP server for wafergraph.com's semiconductor & AI supply-chain data: 30 tools, no auth.
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
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/walternascimentobarroso/database_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server