Skip to main content
Glama
mukul975

mysql-mcp-server

by mukul975

MCP MySQL Server

Python 3.10+ FastAPI License: MIT Docker Tests

A production-ready Model Context Protocol (MCP) server for MySQL database operations. Provides secure HTTP endpoints for executing read-only queries, analyzing database performance, and monitoring MySQL server status.

๐Ÿš€ Quick Start (1 minute)

# Clone and start with Docker Compose
git clone <repository-url>
cd mcp-mysql-server
cp .env.example .env
docker-compose up -d

# Test the server
curl http://localhost:3000/health

Option 2: Local Installation

# Install and run locally
pip install -e .
python server.py

# Test the server
curl http://localhost:3000/health

Related MCP server: mysql-mcp

๐Ÿ“‹ Features

๐Ÿ”ง Core Tools

Tool

Description

Input

Output

ping

Health check utility

echo: string

{ok, echo, timestamp}

mysql_query

Execute read-only SQL queries

query: string

{columns, rows, row_count}

mysql_status

Get MySQL server status

None

{status_variables}

mysql_innodb_metrics

Analyze InnoDB performance

None

{metrics, analysis}

๐Ÿ›ก๏ธ Security Features

  • Authentication: Bearer token, API key, or no auth

  • Rate limiting: Configurable per-IP limits

  • Input validation: Pydantic schema validation

  • Read-only queries: Prevents data modification

  • Request size limits: Configurable payload limits

  • CORS support: Configurable cross-origin requests

๐Ÿ“Š Observability

  • Structured logging: JSON format with request tracing

  • Health monitoring: /health endpoint with metrics

  • Error tracking: Comprehensive error handling

  • Performance metrics: Request duration and counts

๐Ÿ”ง Configuration

Environment Variables

# Server Configuration
PORT=3000                    # Server port
HOST=0.0.0.0                # Server host
AUTH_MODE=none              # none, bearer, api_key
AUTH_TOKEN=your-token       # Authentication token

# MySQL Configuration
MYSQL_HOST=localhost        # MySQL server host
MYSQL_PORT=3306            # MySQL server port
MYSQL_USER=root            # MySQL username
MYSQL_PASSWORD=password    # MySQL password
MYSQL_DATABASE=test        # Default database

# Rate Limiting
RATE_LIMIT_REQUESTS_PER_MINUTE=60  # Requests per minute per IP
RATE_LIMIT_BURST=10               # Burst allowance

# Security
REQUEST_TIMEOUT_SECONDS=30        # Request timeout
MAX_REQUEST_SIZE_MB=10           # Max request size

๐Ÿ“ก API Endpoints

Health Check

GET /health
{
  "status": "ok",
  "version": "0.1.0",
  "uptime_seconds": 3600,
  "tools": ["ping", "mysql_query", "mysql_status", "mysql_innodb_metrics"],
  "metrics": {
    "total_requests": 150,
    "total_errors": 2,
    "recent_errors": []
  }
}

List Tools

GET /tools
{
  "ping": {
    "description": "Health/ping utility returning timestamp and echo text",
    "input_schema": {...},
    "output_schema": {...}
  }
}

Invoke Tool

POST /invoke
Content-Type: application/json
Authorization: Bearer your-token  # If auth enabled

{
  "tool": "mysql_query",
  "args": {
    "query": "SELECT COUNT(*) as user_count FROM users"
  }
}
{
  "columns": ["user_count"],
  "rows": [[42]],
  "row_count": 1,
  "execution_time_ms": 15
}

๐Ÿณ Docker Deployment

Development

docker-compose up -d

Production

# Build production image
docker build -t mcp-mysql-server .

# Run with custom configuration
docker run -d \
  -p 3000:3000 \
  -e AUTH_MODE=bearer \
  -e AUTH_TOKEN=your-secure-token \
  -e MYSQL_HOST=your-mysql-host \
  mcp-mysql-server

๐Ÿงช Testing

# Install development dependencies
pip install -e ".[dev]"

# Run tests
pytest

# Run with coverage
pytest --cov=. --cov-report=html

# Run specific test categories
pytest tests/test_ping.py -v
pytest tests/test_http.py -v
pytest tests/test_auth.py -v

Installation

Install required packages:

pip install -r requirements.txt

Or install key dependencies separately:

pip install "mcp[cli]"
pip install mysql-connector-python

Configuration

Configure via environment variables:

Variable

Description

Default

MYSQL_HOST

MySQL server host

localhost

MYSQL_PORT

MySQL server port

3306

MYSQL_USER

MySQL username

root

MYSQL_PASSWORD

MySQL password

(empty)

MYSQL_DATABASE

Default database name

(empty)

Example (Linux/macOS):

export MYSQL_HOST=localhost
export MYSQL_PORT=3306
export MYSQL_USER=myuser
export MYSQL_PASSWORD=mypassword
export MYSQL_DATABASE=mydatabase

Example (Windows PowerShell):

$env:MYSQL_HOST = "localhost"
$env:MYSQL_PORT = "3306"
$env:MYSQL_USER = "myuser"
$env:MYSQL_PASSWORD = "mypassword"
$env:MYSQL_DATABASE = "mydatabase"

Usage

Run the server:

  • Default stdio transport:

python mysql_server.py
  • SSE transport (for web clients):

python mysql_server.py --transport sse

Get help:

python mysql_server.py --help

Integration

To integrate with Claude Desktop, update your config file (%APPDATA%/Claude/claude_desktop_config.json on Windows or ~/Library/Application Support/Claude/claude_desktop_config.json on macOS):

{
  "mcpServers": {
    "mysql": {
      "command": "python",
      "args": ["path/to/mysql_server.py"],
      "env": {
        "MYSQL_HOST": "localhost",
        "MYSQL_PORT": "3306",
        "MYSQL_USER": "your_username",
        "MYSQL_PASSWORD": "your_password",
        "MYSQL_DATABASE": "your_database"
      }
    }
  }
}

Example Workflows

  • List all tables: use list_tables tool or access mysql://tables resource.

  • Inspect table schema: use describe_table tool or mysql://schema/{table_name}.

  • Execute queries: use execute_sql for select or data modification queries.

  • Analyze slow queries and deadlocks.

  • Audit user privileges and monitor SSL/TLS connections.

  • Monitor replication lag and binary logs for health.

Included Tools

The server includes a rich set of tools such as:

  • mysql_query, list_mysql_tables, mysql_table_schema, mysql_table_data

  • mysql_table_indexes, mysql_table_size, mysql_table_status

  • mysql_fragmentation_analysis, mysql_index_optimization_suggestions, mysql_slow_query_analysis

  • mysql_deadlock_detection, mysql_buffer_pool_cache_diagnostics

  • mysql_user_privileges, mysql_create_user, mysql_drop_user, mysql_change_user_password

  • mysql_backup_health_check, mysql_replication_lag_monitoring, mysql_ssl_tls_configuration_audit

  • mysql_server_health_dashboard, mysql_performance_recommendations

  • mysql_event_scheduler, mysql_partition_management_recommendations

  • And many more diagnostic, operational, and security tools.

Security Considerations

  • Use secure connections when possible.

  • Store credentials in environment variables.

  • Only use the server in trusted environments or behind network security.

  • All queries are validated for safety, but always review for injection risks.

  • The server includes comprehensive privilege auditing tools.

Error Handling

  • Robust error reporting for connection, syntax, permission, and network errors.

  • Structured error response format for easy automated handling.

Development

Project structure:

mcp-mysql-server/
โ”œโ”€โ”€ mysql_server.py      # Core server code with tools and protocols
โ”œโ”€โ”€ requirements.txt     # Python dependencies
โ”œโ”€โ”€ README.md            # This documentation
โ””โ”€โ”€ pyproject.toml       # Optional project metadata

Testing

  • Ensure MySQL server running and reachable.

  • Configure environment variables.

  • Run python mysql_server.py

  • Optionally test with mcp dev mysql_server.py

Contributing

  • Fork repository

  • Create branches for features or fixes

  • Add tests and documentation

  • Submit pull requests for review

License

MIT License โ€” Open source and free to use

A
license - permissive license
-
quality - not tested
C
maintenance

Maintenance

โ€“Maintainers
โ€“Response time
โ€“Release cycle
โ€“Releases (12mo)
Commit activity

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

  • A
    license
    -
    quality
    D
    maintenance
    A lightweight MCP server providing safe, read-only access to MySQL databases. It enables users to query multiple MySQL instances securely while preventing write operations.
    724
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    A secure and efficient MCP server for MySQL database operations, enabling LLMs to execute SQL queries with read-only access by default and optional write permissions.
    3
    MIT
  • A
    license
    -
    quality
    B
    maintenance
    A MySQL MCP server for local stdio clients, enabling database queries and management with read-only/write modes, audit logging, and configurable security.
    871
    MIT

View all related MCP servers

Related MCP Connectors

  • MCP server for managing Prisma Postgres.

  • Read-only MCP server for ClassQuill, a tutoring-business-management platform.

  • A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r

View all MCP Connectors

Latest Blog Posts

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/mukul975/mysql-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server