mysql-mcp
mysql-mcp is a read-only MySQL MCP server that can be used by Codex, Claude Code, and other Model Context Protocol clients.
It exposes two tools:
query_mysql: execute a read-only SQL query against a configured datasourcelist_datasources: list the available datasource names from the config file
Features
- Read-only query workflow through MCP stdio transport
- Multiple datasource definitions in one YAML config file
- Simple installation from PyPI once published
- Works with Codex and Claude Code global MCP configuration
Installation
From PyPI
pipx install mysql-mcp
Or with uv:
uv tool install mysql-mcp
Local development
python3 -m pip install -e ".[dev]"
Configuration
Create a YAML config file. You can start from config.example.yaml:
datasources:
dev:
host: "127.0.0.1"
port: 3306
user: "mysql"
password: "${MYSQL_PASSWORD}"
database: "app_dev"
pool_size: 5
pool_name: "dev_pool"
query:
default_timeout: 30
max_rows: 10000
The MCP process must receive any referenced environment variables such as MYSQL_PASSWORD.
Running the server
cp config.example.yaml config.yaml
mysql-mcp /absolute/path/to/config.yaml
Codex setup
Add it as a global MCP server:
codex mcp add mysql-mcp \
--env MYSQL_PASSWORD=your-password \
-- mysql-mcp /absolute/path/to/config.yaml
If you prefer not to preinstall the package, you can also run it through uvx:
codex mcp add mysql-mcp \
--env MYSQL_PASSWORD=your-password \
-- uvx mysql-mcp /absolute/path/to/config.yaml
Claude Code setup
Add this to ~/.claude/settings.json:
{
"mcpServers": {
"mysql-mcp": {
"type": "stdio",
"command": "mysql-mcp",
"args": ["/absolute/path/to/config.yaml"],
"env": {
"MYSQL_PASSWORD": "your-password"
}
}
}
}
Or use uvx:
{
"mcpServers": {
"mysql-mcp": {
"type": "stdio",
"command": "uvx",
"args": ["mysql-mcp", "/absolute/path/to/config.yaml"],
"env": {
"MYSQL_PASSWORD": "your-password"
}
}
}
}
Publish to PyPI
- Update the version in
pyproject.toml. - Build the package:
python3 -m build
- Upload to TestPyPI first:
python3 -m twine upload --repository testpypi dist/*
- Upload to PyPI:
python3 -m twine upload dist/*
Development
Run tests:
pytest -q
Build artifacts:
python3 -m build
Metadata
Release files for mysql-mcp 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| mysql_mcp-0.1.0.tar.gz | 8.6 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| mysql_mcp-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 16.5 kB
Release files / mysql_mcp-0.1.0.tar.gz
| Download URL | mysql_mcp-0.1.0.tar.gz |
|---|---|
| Size | 8.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5ef78eddfc7aaaa8963a1ab9d98bcd84f49c1acc9ae7cb206101c2cde96dbf87
|
|
BLAKE2b-256 checksum How to use checksums |
0f583258f3b3a779c627b92ace9df93a85a7e4949bb04ee75108c93759de359a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Release files / mysql_mcp-0.1.0-py3-none-any.whl
| Download URL | mysql_mcp-0.1.0-py3-none-any.whl |
|---|---|
| Size | 7.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
bf34b99f296047e50fd5fc57f7b7863ba00604792cdd872d922525050d026daf
|
|
BLAKE2b-256 checksum How to use checksums |
a55530a84ea52237f18f01285801433655bab67c0227f8deaf25ee7e405b42ed
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.12
|
Security for mysql-mcp 0.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.