email-mcp-postale
by ssk1noscai
README.md
# Email MCP Server for Postale.io
An MCP server that gives Claude Desktop / Cowork access to your Postale.io email mailboxes.
Supports **multiple accounts**, reading, searching, replying, drafts, deleting, and batch operations.
## Features
| Tool | Description |
|------|-------------|
| `list_accounts` | Show all configured email accounts |
| `list_folders` | Show folder structure of an account |
| `get_unread_emails` | Fetch unread emails |
| `get_recent_emails` | Fetch recent emails from the last X days |
| `read_email` | Read a single email in full |
| `search_emails` | Search emails (subject, sender, body) |
| `send_email` | Send an email (with reply threading) |
| `save_draft` | Save a draft (visible in Spark) |
| `move_email` | Move an email to another folder |
| `delete_email` | Move an email to trash |
| `batch_delete_emails` | Delete multiple emails at once |
| `mark_as_read` | Mark as read |
| `mark_as_unread` | Mark as unread |
| `get_mailbox_stats` | Stats: unread per folder |
| `get_all_unread_summary` | Across ALL accounts: summarize unread |
## Setup
### 1. Clone and install dependencies
```bash
git clone https://github.com/ssk-machines/email-mcp-postale.git
cd email-mcp-postale
pip install -r requirements.txt
# or with uv:
uv pip install -r requirements.txt
```
### 2. Create configuration
```bash
cp config.json.example config.json
```
Then edit `config.json` — add an account entry for **each** mailbox:
```json
{
"accounts": [
{
"name": "My Account",
"email": "me@example.com",
"imap_host": "mail.postale.io",
"imap_port": 993,
"smtp_host": "mail.postale.io",
"smtp_port": 465,
"username": "me@example.com",
"password": "your-password"
},
{
"name": "Support",
"email": "support@example.com",
...
}
]
}
```
**Tip:** On Postale.io, the username is always the full email address.
### 3. Test
```bash
python server.py
```
If no errors appear, the server is running correctly in stdio mode.
### 4. Add to Claude Desktop
Open `~/Library/Application Support/Claude/claude_desktop_config.json` and add:
**With uv:**
```json
{
"mcpServers": {
"email": {
"command": "uv",
"args": [
"--directory", "/path/to/email-mcp-postale",
"run", "server.py"
]
}
}
}
```
**Or with Python directly:**
```json
{
"mcpServers": {
"email": {
"command": "python3",
"args": ["/path/to/email-mcp-postale/server.py"],
"env": {
"EMAIL_MCP_CONFIG": "/path/to/email-mcp-postale/config.json"
}
}
}
}
```
> Replace `/path/to/email-mcp-postale` with the actual path where you cloned the repo.
### 5. Restart Claude Desktop
After saving the config, fully quit and reopen Claude Desktop.
The email connector should appear as active under "Connectors".
## Scheduled Tasks (Cowork)
### Morning Briefing (daily, 7:00 AM)
```
Every morning at 7:00 AM:
1. Call get_all_unread_summary to fetch all unread emails across all accounts.
2. Categorize each email as:
- 🔴 URGENT: Needs immediate reply (customers, partners, investors)
- 🟡 REPLY NEEDED: Needs a reply, but not time-critical
- 🟢 FYI: Just read, no action needed
- ⚪ UNIMPORTANT: Newsletters, marketing, spam
3. Draft a reply for each 🔴 and 🟡 email using save_draft.
4. Mark ⚪ emails as read with mark_as_read.
5. Create a clear summary as a briefing.
```
### Cleanup Task (weekly, Friday 5:00 PM)
```
Every Friday at 5:00 PM:
1. Search all accounts for newsletter and marketing emails from the past week.
2. Create a list for batch deletion.
3. Show me the list for confirmation before deleting.
```
## Security Notes
- Passwords are stored in plaintext in `config.json` — protect the file with `chmod 600 config.json`
- Alternatively: use Postale.io app passwords (if supported)
- **Do NOT commit config.json to git**
## License
MIT
This server cannot be deployed
Maintenance
ActivityInactive
ResponsivenessNo issues