Skip to main content
Glama
vedantparmar12

Cloudflare MySQL MCP Server

README.md
# MySQL MCP Server Documentation

## Overview

This is a production-ready MySQL MCP (Model Context Protocol) server that provides secure database access through MCP tools. The server includes authentication, monitoring, and comprehensive database operations.

![Alt text](mcp-sql.png)

## Quick Start

### Prerequisites

- Python 3.8+
- MySQL database server
- Claude Desktop application
- Git

### Installation

1. Clone and navigate to the project:
```bash
cd C:\Users\MCP-Procuction_MySQL
```

2. Install dependencies:
```bash
pip install -r requirements.txt
```

3. Set up environment variables (create `.env` file):
```env
# Database Configuration
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=your_username
MYSQL_PASSWORD=your_password
MYSQL_DATABASE=your_database

# Security
SECRET_KEY=your-secret-key-here
ALLOWED_OPERATIONS=SELECT,INSERT,UPDATE,DELETE

# Optional: GitHub OAuth
GITHUB_CLIENT_ID=your_github_client_id
GITHUB_CLIENT_SECRET=your_github_client_secret

# Optional: Monitoring
SENTRY_DSN=your_sentry_dsn
```

### Running the Server

**Primary method:**
```bash
python -m src.main
```

**Alternative methods:**
```bash
# Using run script
python run_server.py

# Standalone mode
python mcp_standalone.py
```

## Claude Desktop Integration

### MCP Configuration for Claude Desktop

Add this configuration to your Claude Desktop MCP settings file. The configuration file is typically located at:

**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**Linux:** `~/.config/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mysql-mcp": {
      "command": "python",
      "args": ["src/server.py"],
      "cwd": "/path/to/your/MYSQL-Production"
    }
  }
}
```

### Setup Steps for Claude Desktop

1. **Install the MCP server** (follow installation steps above)
2. **Locate your Claude Desktop config file** using the paths above
3. **Add the MCP configuration** to the config file
4. **Update the `cwd` path** to match your actual installation directory
5. **Set up environment variables** in a `.env` file in your project directory
6. **Restart Claude Desktop** to load the new MCP server
7. **Verify connection** by asking Claude to list database tables

### Configuration Notes

- Replace `your_username`, `your_password`, etc. with your actual database credentials
- Update the `cwd` path to match your actual installation directory
- Ensure Python is available in your system PATH
- The server will be available as "mysql-mcp" in Claude Desktop

### Testing Claude Integration

Once configured, you can test the integration by asking Claude:
- "List all tables in my database"
- "Show me the structure of the users table"
- "Query the first 5 rows from my products table"

## Project Structure

```
MYSQL-Production/
├── src/
│   ├── main.py              # Main MCP server entry point
│   ├── server.py            # Core MCP server implementation
│   ├── config.py            # Configuration management
│   ├── models.py            # Data models
│   ├── auth/                # Authentication modules
│   │   ├── github_oauth.py  # GitHub OAuth integration
│   │   └── session.py       # Session management
│   ├── database/            # Database modules
│   │   ├── connection.py    # Database connection handling
│   │   ├── security.py      # Security and validation
│   │   └── utils.py         # Database utilities
│   ├── tools/               # MCP tools implementation
│   │   ├── basic_tools.py   # Basic database operations
│   │   ├── advanced_tools.py# Advanced database features
│   │   ├── write_tools.py   # Write operations
│   │   └── transaction_tools.py # Transaction management
│   └── monitoring/          # Monitoring and logging
│       └── sentry.py        # Sentry integration
├── tests/                   # Test suite
├── requirements.txt         # Python dependencies
├── pyproject.toml          # Project configuration
├── docker-compose.yml      # Docker setup
└── README.md               # Basic documentation
```

## Available MCP Tools

### Basic Operations
- `mysql-mcp:query_database` - Execute SELECT queries
- `mysql-mcp:list_tables` - List all database tables
- `mysql-mcp:describe_table` - Get table schema information

### Write Operations
- `mysql-mcp:execute_sql` - Execute INSERT, UPDATE, DELETE operations
- `mysql-mcp:create_table` - Create new tables

### Advanced Features
- Transaction management
- Query optimization
- Performance monitoring
- Security validation

## Configuration

### Environment Variables

| Variable | Description | Required | Default |
|----------|-------------|----------|---------|
| `MYSQL_HOST` | MySQL server host | Yes | localhost |
| `MYSQL_PORT` | MySQL server port | No | 3306 |
| `MYSQL_USER` | Database username | Yes | - |
| `MYSQL_PASSWORD` | Database password | Yes | - |
| `MYSQL_DATABASE` | Database name | Yes | - |
| `SECRET_KEY` | Security secret key | Yes | - |
| `ALLOWED_OPERATIONS` | Permitted SQL operations | No | SELECT,INSERT,UPDATE,DELETE |
| `MAX_CONNECTIONS` | Connection pool size | No | 10 |
| `QUERY_TIMEOUT` | Query timeout (seconds) | No | 30 |

### Security Features

- SQL injection prevention
- Query validation and sanitization
- Operation restrictions
- Connection pooling with limits
- Session-based authentication
- Optional GitHub OAuth integration

## Usage Examples

### Basic Query
```python
# Using MCP client
result = await client.call_tool("mysql-mcp:query_database", {
    "sql": "SELECT * FROM users LIMIT 10"
})
```

### Table Operations
```python
# List tables
tables = await client.call_tool("mysql-mcp:list_tables", {})

# Describe table structure
schema = await client.call_tool("mysql-mcp:describe_table", {
    "table": "users"
})
```

### Data Modification
```python
# Insert data
result = await client.call_tool("mysql-mcp:execute_sql", {
    "sql": "INSERT INTO users (name, email) VALUES ('John', 'john@example.com')"
})
```

## Testing

Run the test suite:
```bash
# Run all tests
python -m pytest tests/

# Run specific test
python test_mcp.py
```

## Docker Deployment

Use the provided Docker setup:
```bash
# Start services
docker-compose up -d

# View logs
docker-compose logs -f
```

## Monitoring and Debugging

### Logging
The server includes structured logging with different levels:
- INFO: General operations
- WARNING: Potential issues
- ERROR: Operation failures
- DEBUG: Detailed debugging info

### Sentry Integration
Configure Sentry for error tracking:
```env
SENTRY_DSN=your_sentry_dsn
SENTRY_ENVIRONMENT=production
```

### Debug Mode
Enable debug mode in `debug_settings.py`:
```python
DEBUG = True
LOG_LEVEL = "DEBUG"
```

## Troubleshooting

### Common Issues

1. **Connection Errors**
   - Verify MySQL server is running
   - Check credentials in `.env` file
   - Ensure network connectivity

2. **Permission Errors**
   - Verify database user permissions
   - Check `ALLOWED_OPERATIONS` configuration

3. **Performance Issues**
   - Monitor connection pool usage
   - Check query execution times
   - Review database indexes

### Debug Commands
```bash
# Test database connection
python -c "from src.database.connection import test_connection; test_connection()"

# Check MCP server status
python -c "from src.main import main; main()"
```

## Development

### Code Style
The project uses:
- Black for code formatting
- Ruff for linting
- MyPy for type checking

```bash
# Format code
black src/

# Run linting
ruff check src/

# Type checking
mypy src/
```

### Adding New Tools
1. Create tool function in appropriate module
2. Register in `src/tools/register_tools.py`
3. Add tests in `tests/`
4. Update documentation

## Production Deployment

See `DEPLOYMENT.md` for detailed production deployment instructions including:
- Environment setup
- Security hardening
- Performance optimization
- Monitoring configuration

## Security Considerations

- Always use parameterized queries
- Implement proper authentication
- Regularly update dependencies
- Monitor for suspicious activity
- Use SSL/TLS for connections
- Implement rate limiting

## Support

For issues and questions:
1. Check the troubleshooting section
2. Review logs for error details
3. Consult the existing README.md and DEPLOYMENT.md files
4. Check the test files for usage examples