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
Security & Reliability
- Secure Database Operations: Input validation, SQL injection protection, and query sanitization
- Enterprise Security: Advanced security validation with configurable security levels
- Connection Pooling: Efficient connection management with configurable pool settings
- Comprehensive Error Handling: Detailed error messages and proper exception handling
- Resource Management: Proper cleanup of database connections and cursors
Performance & Monitoring
- Async/Await Support: Modern async patterns for better performance
- Enterprise Monitoring: Database health analysis, performance metrics, and alerting
- Query Performance Analysis: EXPLAIN plan analysis and optimization recommendations
- Lock Contention Analysis: Blocking queries detection and resolution guidance
- Schema Visualization: ER diagrams and relationship mapping
Development & Testing
- Type Safety: Full type annotations and Pydantic models for configuration validation
- Comprehensive Testing: Unit tests, security tests, and integration tests
- Test Data Generation: Comprehensive e-commerce database simulation with 10M+ rows and bad practices for MCP agent testing
- Interactive Exploration: Advanced data exploration with drill-down capabilities
- CI/CD Integration: Pre-commit hooks, security scanning, and automated testing
Tools Available
Core Database Tools
execute_sql: Execute custom SQL queries with result formatting, security validation, and SQL injection protectionlist_tables: List all tables in the database with basic metadatadescribe_table: Get detailed table structure information including columns, indexes, constraints, and statistics
Advanced Analysis Tools
-
analyze_db_health: Enterprise-grade database health monitoring covering:- Index health and usage statistics
- Connection pool status and limits
- Replication status and lag monitoring
- Buffer pool efficiency analysis
- Constraint integrity validation
- Auto-increment sequence analysis
- Table fragmentation assessment
- Comprehensive performance metrics
-
analyze_query_performance: Query performance analysis and optimization:- EXPLAIN plan analysis with execution strategy insights
- Performance metrics and cost estimation
- Index recommendations and optimization suggestions
- Query rewrite suggestions and JOIN optimization
- Execution analysis with runtime statistics
- Resource consumption predictions
-
get_blocking_queries: Lock contention and blocking queries analysis:- Lock wait graph visualization
- Deadlock detection and prevention
- Session termination recommendations
- Lock timeout configuration suggestions
- Historical blocking analysis
- MySQL PERFORMANCE_SCHEMA integration
Database Exploration Tools
-
explore_interactive: Interactive data exploration with multiple analysis modes:- Drill-down exploration capabilities
- Smart sampling for large datasets
- Pattern discovery and anomaly detection
- Relationship navigation and analysis
- Time-series analysis for temporal data
- Comparative analysis across tables
- Data quality assessment
-
get_database_overview: Comprehensive database overview:- Schema analysis and table relationships
- Performance and security analysis
- Statistical sampling for large datasets
- Data quality metrics and insights
- Security vulnerability assessment
-
get_schema_visualization: Schema visualization and relationship mapping:- ER diagram generation (ASCII/text-based)
- Table dependency analysis
- Foreign key relationship mapping
- Constraint visualization (primary keys, unique constraints)
- Circular reference detection
- Impact analysis for schema changes
Resources
- Table Data: Access table contents as CSV-formatted resources via
mysql://{table_name}/data - Automatic Discovery: Dynamic table listing and resource creation
- Schema Resources: Database schema information and metadata access
๐ 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 MCP server implementation
โ โโโ config.py # Configuration management
โ โโโ db_manager.py # Database connection and management
โ โโโ logger.py # Logging configuration
โ โโโ schema_mapping.py # Schema analysis utilities
โ โโโ validator.py # Security validation
โ โโโ tools/ # MCP Tools directory
โ โโโ __init__.py
โ โโโ analyze_db_health.py # Database health analysis
โ โโโ analyze_query_performance.py # Query performance analysis
โ โโโ describe_table.py # Enhanced table description
โ โโโ discover_sensitive_data.py # Sensitive data discovery (reference)
โ โโโ execute_sql.py # SQL execution tool
โ โโโ explore_interactive.py # Interactive data exploration
โ โโโ get_blocking_queries.py # Blocking queries analysis
โ โโโ get_database_overview.py # Database overview tool
โ โโโ get_schema_visualization.py # Schema visualization
โ โโโ list_tables.py # Table listing tool
โโโ tests/
โ โโโ conftest.py # Test configuration
โ โโโ test_server.py # Server unit tests
โโโ scripts/
โ โโโ generate_test_data.py # Test data generator (10M+ rows)
โ โโโ security/
โ โ โโโ bandit-docker.sh # Security scanning with Bandit
โ โ โโโ check-secrets.sh # Secret detection
โ โ โโโ verify_bad_practices.py # Bad practices verification
โโโ init-scripts/
โ โโโ 01-init.sql # Database initialization with bad practices
โโโ data/
โ โโโ mysql/ # MySQL data directory
โโโ mysql-config/
โ โโโ my.cnf # MySQL configuration
โโโ hooks/
โ โโโ post_gen_project.py # Post-generation hooks
โ โโโ pre-commit-check-dependencies.sh
โ โโโ pre-commit-check-secrets.sh
โ โโโ pre-commit-run-tests.sh
โโโ dist/ # Distribution packages
โโโ logs/ # Application logs
โโโ docker-compose.yml # Docker Compose configuration
โโโ Dockerfile # Docker image definition
โโโ pyproject.toml # Project configuration (Poetry)
โโโ uv.lock # Dependency lock file
โโโ pytest.ini # Pytest configuration
โโโ test_security.py # Security tests
โโโ Makefile # Build automation
โโโ env.example # Environment variables template
โโโ .env # Local environment (gitignored)
โโโ CHANGELOG.md # Change log
โโโ LICENSE # MIT License
โโโ README.md # This file
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
Security Features
The project includes comprehensive security features for production deployment:
Automated Security Scanning
- Bandit Integration: Automated Python security vulnerability scanning
- Secret Detection: Pre-commit hooks to prevent accidental secret commits
- Security Testing: Dedicated security test suite in
test_security.py
Security Tools
- Sensitive Data Discovery: Pattern-based detection of PII, financial data, and sensitive information
- Security Validation: Configurable security levels for different deployment environments
- SQL Injection Protection: Advanced query validation and sanitization
Security Scripts
# Run comprehensive security checks
make security-check
# Run security tests (standalone)
python -m pytest test_security.py -v
# Check for secrets in code
./scripts/security/check-secrets.sh
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
- Security Scanning: Automated security vulnerability detection with Bandit
- Pre-commit Hooks: Code quality checks and secret detection
- Comprehensive Testing: Unit tests, integration tests, and security tests
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.3.1.tar.gz.
File metadata
- Download URL: mysql_mcp_server_pro_plus-0.3.1.tar.gz
- Upload date:
- Size: 81.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca3977b896e0d577ad42f5feb761072f66db6f927333ba7b29d12a666613bf75
|
|
| MD5 |
daabc144d2dfc90a93e80c2d16470787
|
|
| BLAKE2b-256 |
f54abfab9312263ff8d6ece89ab95bdfc4430232dfeb4274890097fa4c188894
|
File details
Details for the file mysql_mcp_server_pro_plus-0.3.1-py3-none-any.whl.
File metadata
- Download URL: mysql_mcp_server_pro_plus-0.3.1-py3-none-any.whl
- Upload date:
- Size: 82.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f4f156a763a0eb67b5ceb0b633c07ebfc3b6334562eba4479e072b031ce32474
|
|
| MD5 |
9db0753dd7c2ec584aa2432ebb3d63ce
|
|
| BLAKE2b-256 |
fef10c9ecad5b2cd879b34fd6d933419bee6c2e4b4f2258c538459b645695067
|