Skip to main content
Glama
VRUSHIL1

Database MCP Server

by VRUSHIL1
README.md
# Database MCP Server

A Model Context Protocol (MCP) server that provides database operations through a standardized interface. This server enables AI assistants and other MCP clients to interact with your MySQL database using natural language commands.

## Features

- **Database Introspection**: List tables, describe schemas, and get table statistics
- **CRUD Operations**: Create, read, update, and delete operations for Users, Products, and Orders
- **Safe SQL Execution**: Execute SELECT queries with built-in safety checks
- **Health Monitoring**: Database connectivity testing
- **Pagination Support**: Handle large datasets efficiently
- **Search Capabilities**: Fuzzy search across user data

## Quick Start

### Prerequisites

- Python 3.8+
- MySQL database server
- MCP-compatible client (Claude Desktop, etc.)

### Installation

1. **Clone the repository**
   ```bash
   git clone <repository-url>
   cd database-mcp
   ```

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

3. **Configure database connection**
   
   Create a `.env` file in the project root:
   ```env
   DB_USER=your_username
   DB_PASSWORD=your_password
   DB_HOST=127.0.0.1
   DB_PORT=3306
   DB_NAME=your_database_name
   ```

4. **Initialize database tables**
   
   The server automatically creates tables on startup using SQLAlchemy models.

### Running the Server

```bash
python main.py
```

The server will start and listen for MCP connections.

## Database Schema

The server manages the following tables:

### Users (`user`)
- `id` (Primary Key)
- `name` (String, 50 chars)
- `email` (String, 50 chars, unique)
- `password` (String, 100 chars)

### Products (`product`)
- `id` (Primary Key)
- `name` (String, 100 chars)
- `price` (Float)
- `stock` (Integer)

### Orders (`order_list`)
- `id` (Primary Key)
- `user_id` (Foreign Key → user.id)
- `product_id` (Foreign Key → product.id)
- `quantity` (Integer)

### Additional Tables
- `chat_history` - Conversation logging
- `chat_summary` - Session summaries
- `chat_user` - Chat session users
- `reminders` - User reminders
- `recommendations` - System recommendations

## Available Tools

### Database Introspection
- `health_check()` - Test database connectivity
- `list_tables()` - Get all table names
- `describe_table(table)` - Get table schema details
- `table_count(table)` - Count rows in a table
- `sample_rows(table, limit=5)` - Get sample data

### SQL Execution
- `run_sql_select(sql, max_rows=1000)` - Execute SELECT queries safely

### User Management
- `user_create(name, email, password)` - Create new user
- `user_get(id=None, email=None)` - Get user by ID or email
- `user_list(limit=100, offset=0, q=None)` - List users with search
- `user_exists(email)` - Check if user exists
- `user_update(id, updates)` - Update user fields
- `user_delete(id)` - Delete user

### Product Management
- `product_create(name, price, stock)` - Create new product
- `product_get(id)` - Get product by ID
- `product_list(limit=100, offset=0, q=None)` - List products with search
- `product_update(id, updates)` - Update product fields
- `product_delete(id)` - Delete product

### Order Management
- `order_create(user_id, product_id, quantity)` - Create new order
- `order_get(id)` - Get order by ID
- `order_list(limit=100, offset=0, user_id=None)` - List orders
- `order_update(id, updates)` - Update order
- `order_delete(id)` - Delete order

## Usage Examples

### Basic Database Operations

```python
# Check database health
health_check()
# Returns: {"ok": true}

# List all tables
list_tables()
# Returns: ["user", "product", "order_list", ...]

# Get table schema
describe_table("user")
# Returns detailed column information
```

### User Operations

```python
# Create a user
user_create("John Doe", "john@example.com", "password123")

# Find user by email
user_get(email="john@example.com")

# Search users
user_list(q="john", limit=10)

# Update user
user_update(1, {"name": "John Smith"})
```

### Product Operations

```python
# Create product
product_create("Laptop", 999.99, 50)

# List products with search
product_list(q="laptop", limit=20)

# Update stock
product_update(1, {"stock": 45})
```

### Order Operations

```python
# Create order
order_create(user_id=1, product_id=1, quantity=2)

# Get user's orders
order_list(user_id=1)
```

## MCP Client Configuration

### Claude Desktop

Add to your Claude Desktop configuration:

```json
{
  "mcpServers": {
    "database": {
      "command": "python",
      "args": ["path/to/database-mcp/main.py"],
      "env": {
        "DB_USER": "your_username",
        "DB_PASSWORD": "your_password",
        "DB_HOST": "127.0.0.1",
        "DB_PORT": "3306",
        "DB_NAME": "your_database"
      }
    }
  }
}
```

## Security Features

- **SQL Injection Protection**: Uses parameterized queries
- **Read-Only SQL**: `run_sql_select` only allows SELECT statements
- **Row Limits**: Automatic pagination and row count limits
- **Input Validation**: Type checking and bounds validation

## Error Handling

The server includes comprehensive error handling:
- Database connection failures
- Invalid SQL queries
- Missing records
- Constraint violations

All errors are logged and return user-friendly messages.

## Development

### Project Structure

```
database-mcp/
├── main.py              # MCP server implementation
├── database.py          # Database connection setup
├── models.py            # SQLAlchemy models
├── requirements.txt     # Python dependencies
├── .env                 # Environment configuration
└── schemas/             # Pydantic schemas (optional)
    ├── user_schema.py
    ├── product_schema.py
    └── order_schema.py
```

### Adding New Models

1. Define model in `models.py`
2. Add CRUD tools in `main.py`
3. Update database schema as needed

### Testing

Test database connectivity:
```bash
python -c "from main import health_check; print(health_check())"
```

## Troubleshooting

### Common Issues

**Connection Refused**
- Check MySQL server is running
- Verify connection credentials in `.env`
- Ensure database exists

**Import Errors**
- Install all requirements: `pip install -r requirements.txt`
- Check Python version compatibility

**Permission Denied**
- Verify database user has necessary privileges
- Check firewall settings

### Logging

The server logs errors to help with debugging. Check console output for detailed error messages.

## Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests if applicable
5. Submit a pull request

## License

This project is licensed under the MIT License - see the LICENSE file for details.

## Support

For issues and questions:
- Check the troubleshooting section
- Review server logs for error details
- Open an issue on GitHub

---

**Note**: This MCP server is designed for development and testing. For production use, implement additional security measures, authentication, and monitoring.