A Model Context Protocol (MCP) server that enables secure interaction with MySQL databases. This server allows AI assistants to list tables, read data, and execute SQL queries through a controlled interface, making database exploration and analysis safer and more structured.
Project description
MySQL MCP Server Pro Plus
A robust, secure, and feature-rich Model Context Protocol (MCP) server for MySQL databases. This server provides a standardized interface for AI assistants to interact with MySQL databases through tools and resources.
๐ Features
Core Features
- Secure Database Operations: Input validation, SQL injection protection, and query sanitization
- Connection Pooling: Efficient connection management with configurable pool settings
- Type Safety: Full type annotations and Pydantic models for configuration validation
- Comprehensive Error Handling: Detailed error messages and proper exception handling
- Async/Await Support: Modern async patterns for better performance
- Resource Management: Proper cleanup of database connections and cursors
- Test Data Generation: Comprehensive e-commerce database simulation with 10M+ rows and bad practices for MCP agent testing
Tools Available
execute_sql: Execute custom SQL queries with result formattinglist_tables: List all tables in the databasedescribe_table: Get detailed table structure information
Resources
- Table Data: Access table contents as CSV-formatted resources
- Automatic Discovery: Dynamic table listing and resource creation
๐ Requirements
- Python 3.8+
- MySQL 5.7+ or MariaDB 10.2+
- mysql-connector-python
๐ ๏ธ Installation
-
Clone the repository:
git clone <repository-url> cd mysql_mcp_server_pro_plus
-
Install dependencies:
pip install -r requirements.txt
-
Set up environment variables:
cp env.example .env # Edit .env with your MySQL configuration
โ๏ธ Configuration
Environment Variables
| Variable | Description | Default | Required |
|---|---|---|---|
MYSQL_URL |
MySQL connection URL (preferred) | - | No* |
MYSQL_HOST |
MySQL server host | localhost |
No |
MYSQL_PORT |
MySQL server port | 3306 |
No |
MYSQL_USER |
MySQL username | - | Yes |
MYSQL_PASSWORD |
MySQL password | - | Yes |
MYSQL_DATABASE |
MySQL database name | - | Yes |
MYSQL_CHARSET |
Character set | utf8mb4 |
No |
MYSQL_COLLATION |
Collation | utf8mb4_unicode_ci |
No |
MYSQL_AUTOCOMMIT |
Auto-commit mode | true |
No |
MYSQL_SQL_MODE |
SQL mode | TRADITIONAL |
No |
MYSQL_CONNECTION_TIMEOUT |
Connection timeout (seconds) | 10 |
No |
MYSQL_POOL_SIZE |
Connection pool size | 5 |
No |
MYSQL_POOL_RESET_SESSION |
Reset session on return | true |
No |
Note: Either MYSQL_URL or the individual MYSQL_USER, MYSQL_PASSWORD, and MYSQL_DATABASE variables are required. If MYSQL_URL is provided, it takes precedence over individual variables.
Example Configuration
# .env file
# Option 1: Using MySQL URL (Recommended)
MYSQL_URL=mysql://myuser:mypassword@localhost:3306/mydatabase?charset=utf8mb4&collation=utf8mb4_unicode_ci&sql_mode=TRADITIONAL
# Option 2: Using individual variables
# MYSQL_HOST=localhost
# MYSQL_PORT=3306
# MYSQL_USER=myuser
# MYSQL_PASSWORD=mypassword
# MYSQL_DATABASE=mydatabase
# MYSQL_CHARSET=utf8mb4
# MYSQL_COLLATION=utf8mb4_unicode_ci
# MYSQL_AUTOCOMMIT=true
# MYSQL_SQL_MODE=TRADITIONAL
# MYSQL_CONNECTION_TIMEOUT=10
# MYSQL_POOL_SIZE=5
# MYSQL_POOL_RESET_SESSION=true
๐ Performance
Optimizations
- Connection Pooling: Reuses database connections for better performance
- Async Operations: Non-blocking database operations
- Efficient Query Execution: Optimized query handling and result processing
- Memory Management: Proper cleanup prevents memory leaks
Monitoring
- Comprehensive Logging: Detailed logs for debugging and monitoring
- Error Tracking: Structured error reporting with context
- Performance Metrics: Connection and query performance tracking
๐ง Development
Project Structure
mysql_mcp_server_pro_plus/
โโโ src/
โ โโโ mysql_mcp_server_pro_plus/
โ โโโ __init__.py
โ โโโ server.py # Main server implementation
โโโ tests/
โ โโโ conftest.py # Test configuration
โ โโโ test_server.py # Server tests
โโโ scripts/
โ โโโ generate_test_data.py # Test data generator (10M+ rows)
โโโ init-scripts/
โ โโโ 01-init.sql # Database initialization with bad practices
โโโ docker-compose.yml # Docker Compose configuration
โโโ Dockerfile # Docker image definition
โโโ pyproject.toml # Project configuration
โโโ requirements.txt # Python dependencies
โโโ README.md # This file
โโโ README-TEST-DATA.md # Test data generation documentation
Test Data Generation
For comprehensive MCP agent testing, the project includes a sophisticated test data generation system:
- Complex E-commerce Database: 8 interconnected tables with realistic relationships
- 10+ Million Rows: Distributed across users, products, orders, reviews, and payments
- 1 Million Transactions: Mixed SELECT, INSERT, UPDATE, and DELETE operations
- Intentional Bad Practices: Security vulnerabilities, performance issues, and design flaws for MCP agent detection
See README-TEST-DATA.md for detailed documentation.
Quick Start:
# Start the database
make up
# Generate test data (Docker)
make generate-test-data-docker
# Or generate locally
make generate-test-data
# Verify bad practices
make verify-bad-practices-docker
Code Quality
The project follows strict code quality standards:
- Type Annotations: Full type hints for better IDE support and error detection
- Pydantic Models: Data validation and serialization
- Async/Await: Modern Python async patterns
- Error Handling: Comprehensive exception handling
- Documentation: Detailed docstrings and comments
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite
- Submit a pull request
๐ Troubleshooting
Common Issues
Connection Errors
Error: Missing required database configuration
Solution: Ensure all required environment variables are set. Either provide MYSQL_URL or the individual variables (MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE).
Permission Errors
Error: Access denied for user
Solution: Check MySQL user permissions and ensure the user has access to the specified database.
Character Set Issues
Error: Unknown collation
Solution: Update MYSQL_CHARSET and MYSQL_COLLATION to values supported by your MySQL version.
๐ License
This project is licensed under the MIT License - see the LICENSE file for details.
๐ค Support
For support and questions:
- Check the troubleshooting section
- Review the test files for usage examples
- Open an issue on GitHub
- Check the CHANGELOG.md for recent updates
๐ Changelog
See CHANGELOG.md for a detailed history of changes and improvements.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mysql_mcp_server_pro_plus-0.2.7.tar.gz.
File metadata
- Download URL: mysql_mcp_server_pro_plus-0.2.7.tar.gz
- Upload date:
- Size: 70.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aee32375613617a5578e9f3c00bfbaf1da2b4bfd17da964b60577988e99b4b1c
|
|
| MD5 |
c5710819d4df8f4b8e6a972236ea8c7b
|
|
| BLAKE2b-256 |
b6a8b078632b637da5a3184de65b0debccff43e5c5ef189ba2691b322139be3d
|
File details
Details for the file mysql_mcp_server_pro_plus-0.2.7-py3-none-any.whl.
File metadata
- Download URL: mysql_mcp_server_pro_plus-0.2.7-py3-none-any.whl
- Upload date:
- Size: 50.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bb0a574f7b85fe3c315b4a339d5ceba5ccc797ed12be84b22c8c47594af58a0e
|
|
| MD5 |
8fc4f1f658fb21d320970362d83b6bab
|
|
| BLAKE2b-256 |
68b610b33eacb288fac62d3e447564b926f97e1a7d0adc9c1e7534c114c2467b
|