Skip to main content
Glama
x-mahar

Email MCP Server

by x-mahar
README.md
# Email MCP Server

A minimal, production-ready MCP (Model Context Protocol) server that enables Claude Desktop to send emails via Mailjet's API over Server-Sent Events (SSE).

## 🚀 Quick Start

### 1. Deploy the Server

**Local Development:**
```bash
# Clone and setup
git clone <your-repo>
cd email-mcp-server
pip install -r requirements.txt

# Configure environment
cp .env.example .env
# Edit .env with your API tokens

# Run server
python main.py
# Server runs on http://localhost:8000
```

**Production Deploy (Railway/Render/Vercel):**
1. Fork this repository
2. Connect to your hosting platform
3. Set environment variables:
   - `VALID_API_TOKENS=your-secure-tokens-here`
   - `HOST=0.0.0.0`
   - `PORT=8000`

### 2. Get Your API Token

Visit your deployed server at `https://your-domain.com` and get a valid API token from the `VALID_API_TOKENS` environment variable.

### 3. Configure Claude Desktop

Add this to your Claude Desktop MCP configuration file:

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

```json
{
  "mcpServers": {
    "email-sender": {
      "transport": {
        "type": "sse",
        "url": "https://your-domain.com/sse?api_token=your-api-token"
      }
    }
  }
}
```

### 4. Get Mailjet Credentials

1. Sign up at [Mailjet.com](https://mailjet.com) (free tier available)
2. Go to Account Settings → API Keys
3. Copy your API Key and Secret Key

### 5. Send Emails with Claude

Now you can ask Claude to send emails:

> "Send an email to john@example.com with the subject 'Meeting Follow-up' saying 'Thanks for the great discussion today. Let's schedule a follow-up for next week.'"

Claude will ask for your Mailjet credentials the first time.

## 🛡️ Security Features

- **API Token Authentication**: Each request requires a valid token
- **User-Provided Credentials**: Server never stores user email credentials
- **Input Validation**: Email format validation and error handling
- **CORS Protection**: Configurable origin restrictions

## 📡 API Endpoints

- `GET /` - Server status and information
- `GET /sse?api_token=TOKEN` - SSE endpoint for MCP protocol
- `POST /mcp?api_token=TOKEN` - Direct MCP message handling (debugging)

## 🔧 Environment Variables

```bash
HOST=0.0.0.0                    # Server host
PORT=8000                       # Server port
VALID_API_TOKENS=token1,token2  # Comma-separated valid tokens
```

## 📝 Usage Examples

**Basic Email:**
```
Send email to user@domain.com saying "Hello World"
```

**With HTML:**
```
Send a professional email to client@company.com with subject "Proposal" including both plain text and HTML formatting
```

**Multiple Recipients (coming soon):**
Currently supports single emails only. Bulk email functionality planned for v2.

## 🚨 Troubleshooting

**Common Issues:**

1. **"Invalid API token"** - Check your token in the SSE URL
2. **"Invalid Mailjet credentials"** - Verify your API key and secret
3. **"Invalid email format"** - Ensure email addresses are properly formatted
4. **Connection timeouts** - Check your server deployment status

## 🏗️ Architecture

- **FastAPI** - Modern Python web framework
- **SSE Transport** - Real-time MCP protocol communication
- **Mailjet API** - Reliable email delivery service
- **In-Memory Auth** - Simple token validation (no database required)

## 📄 License

MIT License - feel free to use in your own projects!

## 🤝 Contributing

1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Submit a pull request

For major changes, please open an issue first to discuss the proposed changes.