# Mailoo MCP server

> Connect AI assistants to multiple email accounts via IMAP and SMTP to search, read, draft, and schedule messages.

- Repository: https://github.com/Bitfloo/mailoo
- Page: https://hostedmcp.org/servers/bitfloo/mailoo
- Transport: stdio
- Stars: 0
- License: LGPL-3.0
- Latest version: 0.3.5

## Install

### Claude Code

```sh
claude mcp add --env 'MCP_EMAIL_ADDRESS=<MCP_EMAIL_ADDRESS>' --env 'MCP_EMAIL_IMAP_HOST=<MCP_EMAIL_IMAP_HOST>' --env 'MCP_EMAIL_SMTP_HOST=<MCP_EMAIL_SMTP_HOST>' --env 'MCP_EMAIL_ALERT_WEBHOOK_URL=<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>' --env 'MCP_EMAIL_HTTP_TOKEN=<YOUR_MCP_EMAIL_HTTP_TOKEN>' --env 'MCP_EMAIL_OAUTH2_CLIENT_SECRET=<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>' --env 'MCP_EMAIL_OAUTH2_REFRESH_TOKEN=<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>' --env 'MCP_EMAIL_PASSWORD=<YOUR_MCP_EMAIL_PASSWORD>' mailoo -- npx -y @bitfloo/mailoo
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "mailoo": {
      "command": "npx",
      "args": [
        "-y",
        "@bitfloo/mailoo"
      ],
      "env": {
        "MCP_EMAIL_ADDRESS": "<MCP_EMAIL_ADDRESS>",
        "MCP_EMAIL_IMAP_HOST": "<MCP_EMAIL_IMAP_HOST>",
        "MCP_EMAIL_SMTP_HOST": "<MCP_EMAIL_SMTP_HOST>",
        "MCP_EMAIL_ALERT_WEBHOOK_URL": "<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>",
        "MCP_EMAIL_HTTP_TOKEN": "<YOUR_MCP_EMAIL_HTTP_TOKEN>",
        "MCP_EMAIL_OAUTH2_CLIENT_SECRET": "<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>",
        "MCP_EMAIL_OAUTH2_REFRESH_TOKEN": "<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>",
        "MCP_EMAIL_PASSWORD": "<YOUR_MCP_EMAIL_PASSWORD>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "mailoo": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@bitfloo/mailoo"
      ],
      "env": {
        "MCP_EMAIL_ADDRESS": "<MCP_EMAIL_ADDRESS>",
        "MCP_EMAIL_IMAP_HOST": "<MCP_EMAIL_IMAP_HOST>",
        "MCP_EMAIL_SMTP_HOST": "<MCP_EMAIL_SMTP_HOST>",
        "MCP_EMAIL_ALERT_WEBHOOK_URL": "<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>",
        "MCP_EMAIL_HTTP_TOKEN": "<YOUR_MCP_EMAIL_HTTP_TOKEN>",
        "MCP_EMAIL_OAUTH2_CLIENT_SECRET": "<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>",
        "MCP_EMAIL_OAUTH2_REFRESH_TOKEN": "<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>",
        "MCP_EMAIL_PASSWORD": "<YOUR_MCP_EMAIL_PASSWORD>"
      }
    }
  }
}
```

### VS Code CLI

```sh
code --add-mcp '{"name":"mailoo","type":"stdio","command":"npx","args":["-y","@bitfloo/mailoo"],"env":{"MCP_EMAIL_ADDRESS":"<MCP_EMAIL_ADDRESS>","MCP_EMAIL_IMAP_HOST":"<MCP_EMAIL_IMAP_HOST>","MCP_EMAIL_SMTP_HOST":"<MCP_EMAIL_SMTP_HOST>","MCP_EMAIL_ALERT_WEBHOOK_URL":"<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>","MCP_EMAIL_HTTP_TOKEN":"<YOUR_MCP_EMAIL_HTTP_TOKEN>","MCP_EMAIL_OAUTH2_CLIENT_SECRET":"<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>","MCP_EMAIL_OAUTH2_REFRESH_TOKEN":"<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>","MCP_EMAIL_PASSWORD":"<YOUR_MCP_EMAIL_PASSWORD>"}}'
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "mailoo": {
      "command": "npx",
      "args": [
        "-y",
        "@bitfloo/mailoo"
      ],
      "env": {
        "MCP_EMAIL_ADDRESS": "<MCP_EMAIL_ADDRESS>",
        "MCP_EMAIL_IMAP_HOST": "<MCP_EMAIL_IMAP_HOST>",
        "MCP_EMAIL_SMTP_HOST": "<MCP_EMAIL_SMTP_HOST>",
        "MCP_EMAIL_ALERT_WEBHOOK_URL": "<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>",
        "MCP_EMAIL_HTTP_TOKEN": "<YOUR_MCP_EMAIL_HTTP_TOKEN>",
        "MCP_EMAIL_OAUTH2_CLIENT_SECRET": "<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>",
        "MCP_EMAIL_OAUTH2_REFRESH_TOKEN": "<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>",
        "MCP_EMAIL_PASSWORD": "<YOUR_MCP_EMAIL_PASSWORD>"
      }
    }
  }
}
```

### Codex

```sh
codex mcp add mailoo --env 'MCP_EMAIL_ADDRESS=<MCP_EMAIL_ADDRESS>' --env 'MCP_EMAIL_IMAP_HOST=<MCP_EMAIL_IMAP_HOST>' --env 'MCP_EMAIL_SMTP_HOST=<MCP_EMAIL_SMTP_HOST>' --env 'MCP_EMAIL_ALERT_WEBHOOK_URL=<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>' --env 'MCP_EMAIL_HTTP_TOKEN=<YOUR_MCP_EMAIL_HTTP_TOKEN>' --env 'MCP_EMAIL_OAUTH2_CLIENT_SECRET=<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>' --env 'MCP_EMAIL_OAUTH2_REFRESH_TOKEN=<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>' --env 'MCP_EMAIL_PASSWORD=<YOUR_MCP_EMAIL_PASSWORD>' -- npx -y @bitfloo/mailoo
```

### Codex config.toml (`~/.codex/config.toml`)

```toml
[mcp_servers.mailoo]
command = "npx"
args = ["-y", "@bitfloo/mailoo"]

[mcp_servers.mailoo.env]
MCP_EMAIL_ADDRESS = "<MCP_EMAIL_ADDRESS>"
MCP_EMAIL_IMAP_HOST = "<MCP_EMAIL_IMAP_HOST>"
MCP_EMAIL_SMTP_HOST = "<MCP_EMAIL_SMTP_HOST>"
MCP_EMAIL_ALERT_WEBHOOK_URL = "<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>"
MCP_EMAIL_HTTP_TOKEN = "<YOUR_MCP_EMAIL_HTTP_TOKEN>"
MCP_EMAIL_OAUTH2_CLIENT_SECRET = "<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>"
MCP_EMAIL_OAUTH2_REFRESH_TOKEN = "<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>"
MCP_EMAIL_PASSWORD = "<YOUR_MCP_EMAIL_PASSWORD>"
```

### Gemini CLI

```sh
gemini mcp add -s user -e 'MCP_EMAIL_ADDRESS=<MCP_EMAIL_ADDRESS>' -e 'MCP_EMAIL_IMAP_HOST=<MCP_EMAIL_IMAP_HOST>' -e 'MCP_EMAIL_SMTP_HOST=<MCP_EMAIL_SMTP_HOST>' -e 'MCP_EMAIL_ALERT_WEBHOOK_URL=<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>' -e 'MCP_EMAIL_HTTP_TOKEN=<YOUR_MCP_EMAIL_HTTP_TOKEN>' -e 'MCP_EMAIL_OAUTH2_CLIENT_SECRET=<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>' -e 'MCP_EMAIL_OAUTH2_REFRESH_TOKEN=<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>' -e 'MCP_EMAIL_PASSWORD=<YOUR_MCP_EMAIL_PASSWORD>' mailoo npx -- -y @bitfloo/mailoo
```

### Gemini settings.json (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "mailoo": {
      "command": "npx",
      "args": [
        "-y",
        "@bitfloo/mailoo"
      ],
      "env": {
        "MCP_EMAIL_ADDRESS": "<MCP_EMAIL_ADDRESS>",
        "MCP_EMAIL_IMAP_HOST": "<MCP_EMAIL_IMAP_HOST>",
        "MCP_EMAIL_SMTP_HOST": "<MCP_EMAIL_SMTP_HOST>",
        "MCP_EMAIL_ALERT_WEBHOOK_URL": "<YOUR_MCP_EMAIL_ALERT_WEBHOOK_URL>",
        "MCP_EMAIL_HTTP_TOKEN": "<YOUR_MCP_EMAIL_HTTP_TOKEN>",
        "MCP_EMAIL_OAUTH2_CLIENT_SECRET": "<YOUR_MCP_EMAIL_OAUTH2_CLIENT_SECRET>",
        "MCP_EMAIL_OAUTH2_REFRESH_TOKEN": "<YOUR_MCP_EMAIL_OAUTH2_REFRESH_TOKEN>",
        "MCP_EMAIL_PASSWORD": "<YOUR_MCP_EMAIL_PASSWORD>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `MCP_EMAIL_ADDRESS` | yes | no | Email address. Required for the environment-variable account. |
| `MCP_EMAIL_IMAP_HOST` | yes | no | IMAP server hostname. |
| `MCP_EMAIL_SMTP_HOST` | yes | no | SMTP server hostname. |
| `MCP_EMAIL_ALERT_WEBHOOK_URL` | no | yes | HTTP or HTTPS URL that receives alert POSTs. |
| `MCP_EMAIL_HTTP_TOKEN` | no | yes | Bearer token. Required when the HTTP listen address is not loopback or MCP_EMAIL_HTTP_ALLOWED_HOSTS lists a non-loopback name. |
| `MCP_EMAIL_OAUTH2_CLIENT_SECRET` | no | yes | OAuth2 client secret. |
| `MCP_EMAIL_OAUTH2_REFRESH_TOKEN` | no | yes | OAuth2 refresh token. |
| `MCP_EMAIL_PASSWORD` | no | yes | Password or app password. Required unless MCP_EMAIL_OAUTH2_PROVIDER is set. |
| `MAILOO_INSTALL_COUNTER` | no | no |  |
| `MCP_EMAIL_ACCOUNT_NAME` | no | no | Account name. Defaults to default. |
| `MCP_EMAIL_ALERT_DESKTOP` | no | no | Set to true for desktop notifications. |
| `MCP_EMAIL_ALERT_SOUND` | no | no | Set to true to play a sound with desktop notifications. |
| `MCP_EMAIL_ALERT_URGENCY_THRESHOLD` | no | no | Minimum urgency for an alert: urgent, high, normal, or low. |
| `MCP_EMAIL_ALERT_WEBHOOK_ALLOW_PRIVATE` | no | no | Set to true to allow webhook targets on a LAN, VPN, or tailnet. |
| `MCP_EMAIL_DEFAULT_ACCOUNT` | no | no | Default account name or email address when the account parameter is omitted. |
| `MCP_EMAIL_FULL_NAME` | no | no | Display name on sent mail. |
| `MCP_EMAIL_HOOK_AUTO_CALENDAR` | no | no | Set to true to create calendar events from hook triage. |
| `MCP_EMAIL_HOOK_AUTO_FLAG` | no | no | Set to true to flag mail from hook triage. |
| `MCP_EMAIL_HOOK_AUTO_LABEL` | no | no | Set to true to apply labels from hook triage. |
| `MCP_EMAIL_HOOK_BATCH_DELAY` | no | no | Seconds to batch arrivals before hooks run. Defaults to 5. |
| `MCP_EMAIL_HOOK_CALENDAR_ALARM_MINUTES` | no | no | Minutes before an automatic event to alarm. Defaults to 15. |
| `MCP_EMAIL_HOOK_CALENDAR_CONFIRM` | no | no | Set to false to skip confirming automatic calendar events. Defaults to true. |
| `MCP_EMAIL_HOOK_CALENDAR_NAME` | no | no | Calendar name for automatic events. |
| `MCP_EMAIL_HOOK_CUSTOM_INSTRUCTIONS` | no | no | Extra instructions appended to the hook preset. |
| `MCP_EMAIL_HOOK_ON_NEW_EMAIL` | no | no | What to do on arrival: triage, notify, or none. |
| `MCP_EMAIL_HOOK_PRESET` | no | no | Hook preset: inbox-zero, gtd, priority-focus, notification-only, or custom. |
| `MCP_EMAIL_HTTP_ALLOWED_HOSTS` | no | no | Comma-separated Host names. Required for 0.0.0.0 and ::. |
| `MCP_EMAIL_HTTP_HOST` | no | no | HTTP listen address. Defaults to loopback. The host argument wins. |
| `MCP_EMAIL_IMAP_DISABLE_IMAP4REV2` | no | no | Set to true to force IMAP4rev1 SEARCH. |
| `MCP_EMAIL_IMAP_PORT` | no | no | IMAP port. Defaults to 993. |
| `MCP_EMAIL_IMAP_STARTTLS` | no | no | Set to true to upgrade IMAP with STARTTLS. Defaults to false. |
| `MCP_EMAIL_IMAP_TLS` | no | no | Set to false to turn off implicit IMAP TLS. Defaults to true. |
| `MCP_EMAIL_IMAP_VERIFY_SSL` | no | no | Set to false to skip IMAP certificate verification. Defaults to true. |
| `MCP_EMAIL_OAUTH2_CLIENT_ID` | no | no | OAuth2 client id. |
| `MCP_EMAIL_OAUTH2_PROVIDER` | no | no | OAuth2 provider: google, microsoft, or custom. Configure custom in the config file: an account in the environment replaces the config file, so custom set here has no token_url or auth_url. |
| `MCP_EMAIL_RATE_LIMIT` | no | no | Maximum sends per minute. Defaults to 10. |
| `MCP_EMAIL_READ_ONLY` | no | no | Set to true to omit write tools and mailbox writers. |
| `MCP_EMAIL_SAVE_TO_SENT` | no | no | Set to false to skip the IMAP Sent copy after SMTP. Defaults to true. |
| `MCP_EMAIL_SIEVE_HOST` | no | no | ManageSieve hostname. Defaults to the IMAP host. |
| `MCP_EMAIL_SIEVE_PORT` | no | no | ManageSieve port. Defaults to 4190. |
| `MCP_EMAIL_SMTP_POOL_ENABLED` | no | no | Set to false to disable SMTP connection pooling. Defaults to true. |
| `MCP_EMAIL_SMTP_POOL_MAX_CONNECTIONS` | no | no | Maximum pooled SMTP connections. Defaults to 1. |
| `MCP_EMAIL_SMTP_POOL_MAX_MESSAGES` | no | no | Maximum messages per pooled SMTP connection. Defaults to 100. |
| `MCP_EMAIL_SMTP_PORT` | no | no | SMTP port. Defaults to 465. |
| `MCP_EMAIL_SMTP_STARTTLS` | no | no | Set to true to upgrade SMTP with STARTTLS. Defaults to false. |
| `MCP_EMAIL_SMTP_TLS` | no | no | Set to false to turn off implicit SMTP TLS. Defaults to true. |
| `MCP_EMAIL_SMTP_VERIFY_SSL` | no | no | Set to false to skip SMTP certificate verification. Defaults to true. |
| `MCP_EMAIL_SYSTEM_ONE_ENABLED` | no | no | Set to true to classify residue mail with System One. Off by default. |
| `MCP_EMAIL_TOOLSET` | no | no | Toolset profile to register: full, core, or minimal. Defaults to full. |
| `MCP_EMAIL_USERNAME` | no | no | Login username. Defaults to the email address. |
| `MCP_EMAIL_WATCHER_ENABLED` | no | no | Set to true to start the IMAP IDLE watcher. |
| `MCP_EMAIL_WATCHER_FOLDERS` | no | no | Comma-separated folders to watch. Defaults to INBOX. |
| `MCP_EMAIL_WATCHER_IDLE_TIMEOUT` | no | no | IMAP IDLE timeout in seconds. Defaults to 1740. |

## Tools (57)

- `list_accounts`
- `list_mailboxes`
- `list_emails`
- `get_email`
- `get_emails`
- `get_email_status`
- `search_emails`
- `download_attachment`
- `export_email`
- `find_email_folder`
- `extract_contacts`
- `get_thread`
- `list_templates`
- `get_email_stats`
- `check_health`
- `get_email_security`
- `sieve_status`
- `sieve_list_scripts`
- `sieve_get_script`
- `send_email`
- `reply_email`
- `forward_email`
- `save_draft`
- `send_draft`
- `apply_template`
- `schedule_email`
- `list_scheduled`
- `cancel_scheduled`
- `sieve_put_script`
- `sieve_delete_script`
- `sieve_activate_script`
- `move_email`
- `delete_email`
- `mark_email`
- `bulk_action`
- `create_mailbox`
- `rename_mailbox`
- `delete_mailbox`
- `list_labels`
- `add_label`
- `remove_label`
- `create_label`
- `delete_label`
- `get_watcher_status`
- `list_presets`
- `get_hooks_config`
- `configure_alerts`
- `check_notification_setup`
- `test_notification`
- `extract_calendar`
- `analyze_email_for_scheduling`
- `add_to_calendar`
- `create_reminder`
- `list_calendars`
- `list_events`
- `list_reminders`
- `check_calendar_permissions`

## FAQ

### Can I restrict the AI to only read my emails without sending any?

Yes, you can enable a read-only mode that disables all write operations, background watchers, hooks, and schedulers.
