MCP server that gives AI assistants full access to your ProtonMail account via Proton Bridge. Read, send, search, and manage email through any MCP-compatible client.
- Proton Bridge running locally and signed in
- Node.js 18+
npm install -g @darkroomhq/protonmail-mcpOr use without installing:
npx @darkroomhq/protonmail-mcpAdd to your MCP client config (e.g. claude_desktop_config.json):
{
"mcpServers": {
"protonmail": {
"command": "protonmail-mcp",
"env": {
"PROTONMAIL_USERNAME": "your@protonmail.com",
"PROTONMAIL_PASSWORD": "bridge-app-password"
}
}
}
}With npx (no global install needed):
{
"mcpServers": {
"protonmail": {
"command": "npx",
"args": ["-y", "@darkroomhq/protonmail-mcp"],
"env": {
"PROTONMAIL_USERNAME": "your@protonmail.com",
"PROTONMAIL_PASSWORD": "bridge-app-password"
}
}
}
}Note:
PROTONMAIL_PASSWORDis the Bridge app password shown in Proton Bridge, not your ProtonMail account password.
| Variable | Required | Default | Description |
|---|---|---|---|
PROTONMAIL_USERNAME |
Yes | — | Your ProtonMail email address |
PROTONMAIL_PASSWORD |
Yes | — | Proton Bridge app password |
SMTP_HOST |
No | 127.0.0.1 |
Bridge SMTP host |
SMTP_PORT |
No | 1025 |
Bridge SMTP port |
IMAP_HOST |
No | 127.0.0.1 |
Bridge IMAP host |
IMAP_PORT |
No | 1143 |
Bridge IMAP port |
DEBUG |
No | false |
Enable debug logging |
| Tool | Description |
|---|---|
sendEmail |
Send an email with optional CC, BCC, HTML body, attachments, and priority |
replyEmail |
Reply to an existing email by UID |
listFolders |
List all mailboxes and folders |
listEmails |
List emails with pagination (page-based or stable cursor via beforeUid) |
readEmail |
Read email by UID (supports headersOnly and maxBodyLength for efficiency) |
searchEmails |
Search by sender, subject, body, date range, read/flagged status (with cursor pagination) |
bulkAction |
Bulk delete, move, mark read/unread, flag/unflag by criteria or UIDs (dry run by default) |
markRead |
Mark an email as read |
markUnread |
Mark an email as unread |
flagEmail |
Star/flag an email |
unflagEmail |
Remove star/flag from an email |
moveEmail |
Move an email to another folder |
deleteEmail |
Move an email to Trash |
createFolder |
Create a new mail folder |
deleteFolder |
Delete a mail folder |
renameFolder |
Rename a mail folder |
createLabel |
Create a new mail label |
deleteLabel |
Delete a mail label |
renameLabel |
Rename a mail label |
connectionStatus |
Check SMTP and IMAP connection health |
- "Summarize my unread emails from this week."
- "Read the latest email from alice and tell me what she's asking for."
- "Find all emails about the Q2 report from the last 30 days."
- "Search for any flagged emails in my Sent folder."
- "Send an email to bob letting him know the meeting is moved to Thursday at 3pm."
- "Reply to the last email from the design team and ask for the updated mockups."
- "Delete all emails from IGN in my inbox."
- "Mark all unread newsletters as read."
- "Move all emails from noreply@github.com to the GitHub folder."
- "How many flagged emails do I have from the last month?" (uses dry run)
- "Move all newsletters from my inbox to the Newsletters folder."
- "Flag the three most recent emails from my manager."
- "Delete all emails in the Spam folder."
- "Create a folder called 'Receipts' and move all purchase confirmations there."
- "Create a label called 'Urgent' for emails that need immediate attention."
- "Rename the 'Old Projects' folder to 'Archive'."
- "Check if Proton Bridge is connected."
- Cursor pagination: Use
beforeUid(returned asnextCursor) instead ofpagefor stable pagination that isn't affected by new emails arriving between requests. - Headers only: Use
headersOnly: trueonreadEmailto skip downloading the full message body — useful when you only need metadata. - Body truncation: Use
maxBodyLengthonreadEmailto cap body size (e.g.2000chars) and avoid large responses from email-heavy messages. - Bulk actions: Use
bulkActionwith searchcriteriainstead of looping over individual emails. It runs a single IMAP SEARCH + a single bulk command, regardless of how many emails match. - Dry run:
bulkActiondefaults todryRun: true— preview affected emails before committing destructive operations.
npm install
npm run build # compile TypeScript
npm run dev # watch mode