MySQL MCP Server
This server connects to MySQL databases, enabling listing databases and tables, describing table schemas, and executing read-only SQL queries with optional write support and SSL security.
README
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)
Installation
Requires uv. In the project directory:
cd /Users/macbook/projets/MCP/mysql
uv sync
This creates the virtual environment (.venv) and installs dependencies.
No pip step is required.
To validate locally:
uv run env PYTHONPATH=src python -m mysql_mcp
Configuration
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 |
|---|---|---|---|
MYSQL_USER |
Yes | MySQL username | - |
MYSQL_PASSWORD |
Yes | Password | - |
MYSQL_HOST |
No | Host | 127.0.0.1 |
MYSQL_PORT |
No | Port | 3306 |
MYSQL_DATABASE |
No | Default database | - |
MYSQL_POOL_SIZE |
No | Connection pool size | 5 |
MYSQL_ALLOW_WRITE |
No | Allow INSERT/UPDATE/DELETE | false |
MYSQL_SSL_ENABLED |
No | Enable TLS/SSL for MySQL connection | false |
MYSQL_SSL_VERIFY_CERT |
No | Validate server certificate chain | true |
MYSQL_SSL_CA |
No | Path to CA bundle (recommended in prod) | - |
MYSQL_SSL_CERT |
No | Client certificate path (for mTLS) | - |
MYSQL_SSL_KEY |
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=false
Production 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.pem
If 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=false
This 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.pem
Cursor 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_mcp
Alternative:
uv run env PYTHONPATH=src python -m mysql_mcp
HTTP (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 8000
MCP 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:
uv - Args:
run,env,PYTHONPATH=src,python,-m,mysql_mcp - Cwd: 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:
make - Args:
up - Cwd: project directory
- Env: same values as Option A
Alternative - using the venv interpreter directly:
- Command:
/usr/bin/env - Args:
PYTHONPATH=/absolute/path/to/project/src,.venv/bin/python,-m,mysql_mcp
License
MIT.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.