# FastMail MCP Server
A Model Context Protocol (MCP) server for integrating with FastMail's JMAP API. This server provides tools for reading emails, searching, managing folders, and sending emails through FastMail.
## š Features
- **š Mailbox Management**: List and find mailboxes/folders
- **š§ Email Reading**: Get emails from specific folders with previews
- **š Advanced Search**: Search by keyword, sender, subject, date range, attachments
- **š¤ Email Sending**: Send emails with CC/BCC support
- **šÆ Folder Targeting**: Search within specific folders
- **ā” Fast Performance**: Uses FastMail's modern JMAP protocol
## š Prerequisites
- Python 3.8+
- FastMail account with API access
- API token from FastMail (Settings ā Privacy & Security ā Integrations)
## š Installation
1. **Clone the repository:**
```bash
git clone <your-repo-url>
cd fastmail-mcp-server
```
2. **Install dependencies:**
```bash
pip install -r requirements.txt
```
3. **Get your FastMail API token:**
- Log into FastMail
- Go to Settings ā Privacy & Security ā Integrations
- Create a new API token
- Copy the token (starts with `fmu1-`)
## š Usage
### Running the Server
```bash
python fastmail_mcp_server.py
```
The server will start and listen for MCP commands via stdio.
### Configuration
First, configure your FastMail credentials:
```json
{
"tool": "configure_fastmail",
"arguments": {
"apiToken": "fmu1-your-token-here"
}
}
```
### Available Tools
#### š **configure_fastmail**
Set up your FastMail API credentials.
#### š **list_mailboxes**
List all mailboxes with their names, roles, and email counts.
```json
{
"tool": "list_mailboxes",
"arguments": {
"role": "inbox" // Optional: filter by role
}
}
```
#### š **find_mailbox**
Find a specific mailbox by name or role.
```json
{
"tool": "find_mailbox",
"arguments": {
"name": "Work", // Partial matching supported
"role": "sent" // Or search by role
}
}
```
#### š§ **get_emails**
Get emails from a specific mailbox.
```json
{
"tool": "get_emails",
"arguments": {
"mailboxId": "mailbox-id-here", // From list_mailboxes
"mailboxName": "Inbox", // Alternative to mailboxId
"limit": 20, // Max emails to fetch
"includeBody": false // Include full email body
}
}
```
#### š **search_emails**
Search emails with advanced filtering.
```json
{
"tool": "search_emails",
"arguments": {
"keyword": "project update", // Text search
"from_email": "boss@company.com", // From specific sender
"subject": "meeting", // Subject contains
"mailboxId": "inbox-id", // Search within folder
"hasAttachment": true, // Has attachments
"after": "2024-01-01", // Date range
"before": "2024-12-31",
"limit": 50,
"includeBody": false
}
}
```
#### š **get_email_body**
Get the full body content of a specific email.
```json
{
"tool": "get_email_body",
"arguments": {
"emailId": "email-id-here",
"format": "text" // "text", "html", or "both"
}
}
```
#### š¤ **send_email**
Send an email through FastMail.
```json
{
"tool": "send_email",
"arguments": {
"to": ["recipient@example.com"],
"cc": ["cc@example.com"], // Optional
"bcc": ["bcc@example.com"], // Optional
"subject": "Hello from MCP!",
"body": "This is the email body.",
"isHtml": false // Set to true for HTML emails
}
}
```
## š§ Integration with MCP Clients
### Claude Desktop
Add to your Claude Desktop config:
```json
{
"mcpServers": {
"fastmail": {
"command": "python",
"args": ["/path/to/fastmail_mcp_server.py"]
}
}
}
```
### Other MCP Clients
This server follows the standard MCP protocol and should work with any MCP-compatible client.
## š Project Structure
```
fastmail-mcp-server/
āāā fastmail_mcp_server.py # Main server implementation
āāā requirements.txt # Python dependencies
āāā pyproject.toml # Package configuration
āāā README.md # This file
āāā examples/ # Example usage scripts
āāā test_server.py # Test script
```
## š Security Notes
- **API Token Security**: Never commit your API token to version control
- **Permissions**: The API token has access to your entire FastMail account
- **Network**: All communication uses HTTPS with FastMail's secure APIs
## š Troubleshooting
### Common Issues
1. **Authentication Error**: Verify your API token is correct and has proper permissions
2. **Connection Error**: Check your internet connection and FastMail service status
3. **Missing Emails**: Ensure you're searching in the correct mailbox
### Debug Mode
Enable debug logging by setting environment variable:
```bash
export MCP_DEBUG=1
python fastmail_mcp_server.py
```
## š¤ 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
MIT License - see LICENSE file for details.
## š Acknowledgments
- [FastMail](https://fastmail.com) for their excellent JMAP API
- [Model Context Protocol](https://github.com/anthropics/mcp) by Anthropic
- [JMAP Specification](https://jmap.io) by the IETF
## š Additional Resources
- [FastMail API Documentation](https://www.fastmail.com/dev/)
- [JMAP Specification](https://jmap.io)
- [MCP Documentation](https://github.com/anthropics/mcp)