Mysql Mcp Server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Mysql Mcp Server (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
<!-- mcp-name: io.github.musaddiq-dev/mysql-mcp-server -->
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:
uvx mdev-mysql-mcp-serverFor local development from source:
git clone https://github.com/musaddiq-dev/mysql-mcp-server.git
cd mysql-mcp-server
python -m venv .venv
source .venv/bin/activate
pip install -e .Copy the example environment file and update it with your database connection details.
cp .env.example .env| 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:
CREATE USER 'mcp_readonly'@'localhost' IDENTIFIED BY 'change-me';
GRANT SELECT ON your_database.* TO 'mcp_readonly'@'localhost';
FLUSH PRIVILEGES;mdev-mysql-mcp-serverFrom a local checkout before PyPI publication, run:
python -m mysql_mcp_server.serverFor 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:
{
"mcpServers": {
"mysql": {
"command": "uvx",
"args": ["mdev-mysql-mcp-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "change-me",
"MYSQL_DATABASE": "your_database"
}
}
}
}For local development from this repository, use the installed console script path instead:
{
"mcpServers": {
"mysql": {
"command": "/absolute/path/to/mysql-mcp-server/.venv/bin/mdev-mysql-mcp-server",
"args": [],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "change-me",
"MYSQL_DATABASE": "your_database"
}
}
}
}claude mcp add mysql \
--env MYSQL_HOST=localhost \
--env MYSQL_PORT=3306 \
--env MYSQL_USER=mcp_readonly \
--env MYSQL_PASSWORD=change-me \
--env MYSQL_DATABASE=your_database \
-- uvx mdev-mysql-mcp-serverVS Code uses the same command/args/env model in its MCP configuration:
{
"servers": {
"mysql": {
"type": "stdio",
"command": "uvx",
"args": ["mdev-mysql-mcp-server"],
"env": {
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_USER": "mcp_readonly",
"MYSQL_PASSWORD": "change-me",
"MYSQL_DATABASE": "your_database"
}
}
}
}| 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:
python -m py_compile src/mysql_mcp_server/server.pyWith 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
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.