mysql_mcp_server
designcomputer · designcomputer/mysql_mcp_server
This MCP server allows AI agents to securely interact with MySQL databases, list tables, read contents, and execute SQL queries.
A Model Context Protocol (MCP) server that enables secure interaction with MySQL databases
Preview
What you can do with it
- Let an AI agent query a MySQL database to fetch user data for a web application.
- Build an agent that analyzes database schema and suggests optimization improvements.
- Develop a script for an agent to safely update records in a production database.
Safety check
No risky patterns found in the files we scanned.
Automated scan of the repo files. Always review code you run.
From the README
MySQL MCP Server
A Model Context Protocol (MCP) implementation that enables secure interaction with MySQL databases. This server component facilitates communication between AI applications (hosts/clients) and MySQL databases, making database exploration and analysis safer and more structured through a controlled interface.
Note: MySQL MCP Server supports both standard input/output (STDIO) and Streamable HTTP (SSE) transport modes. The SSE mode is recommended for remote/self-hosted deployments.
Deployment options
- Hosted — Fronteir AI runs the server for you; no local setup required.
- Local — Smithery installs and runs the server on your own machine.
Features
- List available MySQL tables as resources
- Read table contents
- Execute SQL queries with proper error handling
- Multi-database mode (Optional
MYSQL_DATABASE) - SSE/HTTP transport support (
MCP_TRANSPORT=sse) - SSH Tunneling support
- Comprehensive schema information
- Table data sampling
- Secure database access through environment variables
- Comprehensive logging
Installation
Manual Installation
pip install mysql-mcp-server
Installing via Smithery
To install MySQL MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install designcomputer/mysql-mcp-server --client claude
Installing via Claude Code CLI
claude mcp add --transport stdio designcomputer-mysql_mcp_server uvx mysql_mcp_server
Installing via Autohand Code CLI
autohand mcp add mysql env MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_USER=your_username MYSQL_PASSWORD=your_password MYSQL_DATABASE=your_database uvx mysql_mcp_server
Add --scope project after mcp add to keep the registration in the current workspace. See Autohand Code for current CLI details.
Configuration
Set the following environment variables:
MYSQL_HOST=localhost # Database host
MYSQL_PORT=3306 # Optional: Database port (defaults to 3306 if not specified)
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database # Optional: Omit for multi-database mode
# Advanced Configuration
MYSQL_SSL_MODE=DISABLED # DISABLED, REQUIRED, VERIFY_CA, VERIFY_IDENTITY
MYSQL_CONNECT_TIMEOUT=10 # Timeout in seconds
# Connection behaviour (Optional)
MYSQL_SQL_MODE=TRADITIONAL # SQL mode applied to the connection (default: TRADITIONAL)
# Compatibility (Optional)
MYSQL_CHARSET=utf8mb4
MYSQL_COLLATION=utf8mb4_unicode_ci
MYSQL_AUTH_PLUGIN= # e.g., mysql_native_password for older MySQL versions
MYSQL_USE_PURE=false # Force the pure-Python connector (default: false)
MYSQL_RAISE_ON_WARNINGS=false # Raise on SQL warnings (default: false)
# SSE Transport (Optional)
MCP_TRANSPORT=stdio # stdio or sse
MCP_SSE_HOST=0.0.0.0 # Listen on all interfaces (required for Docker/hosting)
PORT=8000 # HTTP port (fallback for MCP_SSE_PORT)
MCP_SSE_ALLOWED_HOSTS= # Comma-separated allowed Host headers (default: localhost:{port},127.0.0.1:{port})
# SSH Tunneling (Optional)
MYSQL_SSH_ENABLE=false # Set to true to enable
MYSQL_SSH_HOST= # SSH jump host
MYSQL_SSH_PORT=22 # SSH port
MYSQL_SSH_USER= # SSH username
MYSQL_SSH_KEY_PATH= # Path to SSH private key
MYSQL_SSH_REMOTE_HOST=localhost # Host from the perspective of the jump host
MYSQL_SSH_REMOTE_PORT=3306
MYSQL_LOCAL_PORT=3330
.env file loading
On startup the server automatically loads a .env file via python-dotenv, so for local use you can simply:
cp .env.example .env # then edit with your credentials
The file is read from the process working directory (and parent directories), which works when you run the server yourself from the project folder.
⚠️ Claude Code / Claude Desktop: these hosts launch the server from their own working directory, so the project's
.envwill not be found and you'll seeMissing required database configuration. Put yourMYSQL_*values in theenvblock of the MCP config (shown in the Usage section below) rather than relying on.env.
Multi-Database Mode
When MYSQL_DATABASE is not set, the server operates in multi-database mode:
list_resourcesreturns all user databases (system databases are filtered out)- Use fully qualified table names like
mydb.mytablein SQL queries - Note: Only single SQL statements are supported. Multi-statement queries (e.g.,
USE db; SELECT ...) are not supported.
Available Tools
execute_sql
Executes any standard SQL query.
- Arguments:
query(string) - Features: Supports
SELECT,SHOW,DESCRIBE, and DML (INSERT,UPDATE,DELETE). DML operations are marked with a destructive hint. - Limitation: Single statements only. Multi-statement queries are not supported.
- Cross-database: Use
database.tablenotation to query any database regardless of theMYSQL_DATABASEsetting.
get_schema_info
Provides detailed metadata about database structures.
- Arguments:
table_name(optional string) - Output: Column names, types, nullability, default values, and comments.
- Cross-database: Pass
database.tableto query a table outsideMYSQL_DATABASE; bare names use the configured database. - Identifier rules: Names must contain only alphanumeric characters, underscores, and
$(dots are allowed as a separator between database and table names).
get_table_sample
Fetches a representative sample of data.
- Arguments:
table_name(string),limit(optional integer, max 20) - Use Case: Quickly understand data formats and content without fetching large result sets.
- Cross-database: Pass
database.tableto sampl