Community Gmail server with auto-auth: search, read and send email via MCP.
Proton Mail Bridge Client is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Proton Mail Bridge Client — full-featured CLI and Claude Desktop MCP for Proton Mail via Proton Bridge. Read, search, send, draft, archive, manage folders, and more.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --env 'PROTONMAIL_USERNAME=${PROTONMAIL_USERNAME}' --env 'PROTONMAIL_PASSWORD=${PROTONMAIL_PASSWORD}' --transport stdio proton-mail-bridge-client-mcp '--' npx -y proton-mail-bridge-client
# 2 — ask your agent for something these tools do
# send_email, cancel_send, list_scheduled_sends and 96 more
It needs PROTONMAIL_USERNAME, PROTONMAIL_PASSWORD: this reads them from your environment, so export them first.
Proton Mail Bridge Client costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Proton Mail Bridge Client as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. Claude Code reads PROTONMAIL_USERNAME (Your Proton Mail address), PROTONMAIL_PASSWORD (Proton Bridge password (Bridge app -> account -> Mailbox details) — not your Proton account password) from your environment each time it starts the server, so the value stays out of its config: export them in your shell profile (macOS, Linux), or run setx PROTONMAIL_USERNAME …, setx PROTONMAIL_PASSWORD … and open a new terminal (Windows). The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user --env 'PROTONMAIL_USERNAME=${PROTONMAIL_USERNAME}' --env 'PROTONMAIL_PASSWORD=${PROTONMAIL_PASSWORD}' --transport stdio proton-mail-bridge-client-mcp '--' npx -y proton-mail-bridge-clientReconnect, or start a new session, and the tools appear in the model’s tool list.
It reaches a system of yours, so it needs your own credential rather than the publisher’s: PROTONMAIL_USERNAME — Your Proton Mail address; PROTONMAIL_PASSWORD — Proton Bridge password (Bridge app -> account -> Mailbox details) — not your Proton account password. You set them in your own client’s config, on your machine — this marketplace never holds it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
99 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Compose and send a new outbound email through Proton Bridge SMTP. Use for one-shot messages that need no review. Prefer create_draft when you want to save and review before sending, or reply_to_email when responding to an existing message. Fails if PROTONMAIL_ALLOW_SEND is false or if Bridge SMTP…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| to | string | yes | Recipient email addresses, comma-separated. |
| cc | string | no | CC recipient email addresses, comma-separated. |
| bcc | string | no | BCC recipient email addresses, comma-separated. |
| subject | string | yes | Email subject. |
| body | string | no | Email body content (plain text). Required unless markdownBody is provided. |
| markdownBody | string | no | Email body in Markdown. When provided, rendered to HTML with body as plain-text fallback; takes precedence over body+isHtml. |
| isHtml | boolean | no | Whether body should be sent as HTML (ignored when markdownBody is provided). |
| priority | string | no | SMTP priority header. |
| fromName | string | no | Optional display name for the From header (e.g. 'Alice'). Does not change the sending address. |
| from | string | no | Send as this address instead of the Bridge login's default (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; an address not on the a |
| sanitizeHtml | boolean | no | Strip scripts, event handlers, and remote image beacons from HTML before delivery. Defaults to true when body is HTML. |
| replyTo | string | no | Optional reply-to email address. |
| requestReadReceipt | boolean | no | Request a read receipt (MDN) via a Disposition-Notification-To header. Most mail clients ask the recipient before honoring it — this is a request, not a guarantee. |
| appendSignature | boolean | no | Append PROTONMAIL_SIGNATURE (if configured) to the body. Set false to send without it for this one message. |
| attachments | array | no | Attachments with base64 encoded content. |
| confirmed | boolean | no | Set to true to confirm this irreversible send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview the full recipient set and validate without sending. |
| undoWindowSeconds | number | no | Override PROTONMAIL_SEND_DELAY_SECONDS for this one send: queue it for this many seconds (cancelable via cancel_send) instead of the server's configured default. 0 sends immediately even if the server |
Cancel a send_email call that was queued because PROTONMAIL_SEND_DELAY_SECONDS is set. Only works while the item is still pending — once it has actually sent, this returns canceled: false. No effect (throws) if PROTONMAIL_SEND_DELAY_SECONDS is 0, since nothing is ever queued in that case.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The id returned by a queued send_email call. |
List items in the local undo-send / scheduled-send queue (from send_email with PROTONMAIL_SEND_DELAY_SECONDS set, or schedule_draft), newest first, 50 per page (returns total/hasMore; page with offset, raise limit for more), including id, status, and sendAt — use this to rediscover the id needed…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| status | string | no | Filter to one status. Omit to list everything. |
| limit | number | no | Records per page, newest first. Default 50. |
| offset | number | no | Skip this many records (paging). Check hasMore for more. |
Read the List-Unsubscribe header of a message and report how to unsubscribe from it — a mailto address, an https link, or both. Does not take any action. Use before unsubscribe_sender to see what's available, or to hand an https link to the user/agent to open manually (this server never…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id from previous tool output. |
Execute the mailto: variant of a message's List-Unsubscribe header by sending a minimal unsubscribe email through Proton Bridge SMTP. Only works when the header includes a mailto address — if it only has an https link, this throws and returns that link for you to open manually instead (this server…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id from previous tool output. |
| confirmed | boolean | no | Set to true to confirm this send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Send a minimal diagnostic email to confirm Proton Bridge SMTP credentials and connectivity. Use before relying on send_email in a new environment. Prefer get_connection_status for a connectivity check that does not actually send mail. Returns transport debug info and delivery status. Requires…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| to | string | yes | Recipient email address. |
| customMessage | string | no | Optional custom test body. |
| from | string | no | Send as this address instead of the Bridge login's default (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; an address not on the a |
| confirmed | boolean | no | Set to true to confirm this send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Remind yourself to follow up if nobody answers a message by a date. Usually used on a message you sent: it is kept as a local note, and get_inbox_digest and list_reply_reminders show it as due once the date has passed and nobody but you has written in the thread. A reply cancels the wait by…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | The message to be answered (typically one from Sent). |
| afterDays | number | no | Remind after this many days (1-365). Default 3. Give this or remindAt. |
| remindAt | string | no | Remind at this date and time (ISO 8601, in the future). Give this or afterDays. |
| note | string | no | Optional note shown with the reminder (up to 500 characters). |
List your reply reminders with their state: waiting (the date has not come), due (the date has passed and nobody has answered) or answered (someone other than you wrote in the thread after the reminder was set). By default only waiting and due ones are listed, due first. The state is worked out…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| status | string | no | open = waiting and due (default). |
| limit | number | no | Maximum reminders to return. |
Delete a reply reminder by the id set_reply_reminder or list_reply_reminders gave.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | Reminder id. |
Answer a calendar invitation in a message: accept, decline or tentatively accept. Reads the invitation (the text/calendar attachment of emailId), then sends the organizer a standard calendar reply (iTIP METHOD:REPLY) from the address the invitation was sent to, so their calendar updates your…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | The message that holds the invitation. |
| response | string | yes | Your answer. |
| comment | string | no | Optional note to the organizer (up to 1000 characters). |
| dryRun | boolean | no | Show who would be answered and what the reply says, without sending. |
| undoWindowSeconds | number | no | Override PROTONMAIL_SEND_DELAY_SECONDS for this one send: queue it for this many seconds (cancelable via cancel_send). 0 sends immediately. |
| confirmed | boolean | no | Set to true to confirm this irreversible send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Immediately send a reply to an existing email, threading it correctly via In-Reply-To and References headers. Use when you have an emailId and want to send the reply right away. Prefer create_reply_draft to save the reply for review first, or create_thread_reply_draft when replying from a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Original email id. |
| undoWindowSeconds | number | no | Override PROTONMAIL_SEND_DELAY_SECONDS for this one send: queue it for this many seconds (cancelable via cancel_send) instead of the server's configured default. 0 sends immediately even if the server |
| body | string | no | Reply body to prepend (plain text). Required unless markdownBody is provided. |
| markdownBody | string | no | Reply body in Markdown. Rendered to HTML with body as plain-text fallback; takes precedence over body+isHtml. |
| replyAll | boolean | no | Reply to all original recipients. |
| isHtml | boolean | no | Send body as HTML (ignored when markdownBody is provided). |
| cc | string | no | Additional CC recipients, comma-separated. |
| bcc | string | no | Additional BCC recipients, comma-separated. |
| fromName | string | no | Optional display name for the From header. |
| from | string | no | Send as this address instead of the Bridge login's default (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; an address not on the a |
| sanitizeHtml | boolean | no | Strip scripts and remote image beacons from HTML before delivery. Defaults to true. |
| attachments | array | no | Attachments with base64 encoded content. |
| confirmed | boolean | no | Set to true to confirm this irreversible send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview recipient set and threading headers without sending. |
| includeQuote | boolean | no | Append the quoted original message to the reply body. |
| appendSignature | boolean | no | Append PROTONMAIL_SIGNATURE (if configured) after your reply text and before the quoted original. Set false to send without it for this one message. |
Immediately reply to all original recipients (sender + all To/CC addresses) of an existing email. Identical to reply_to_email with replyAll enabled. Use when the conversation involves multiple parties and all should receive the reply. Threading headers (In-Reply-To, References) are preserved.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Original email id. |
| undoWindowSeconds | number | no | Override PROTONMAIL_SEND_DELAY_SECONDS for this one send: queue it for this many seconds (cancelable via cancel_send) instead of the server's configured default. 0 sends immediately even if the server |
| body | string | no | Reply body to prepend (plain text). Required unless markdownBody is provided. |
| markdownBody | string | no | Reply body in Markdown. Rendered to HTML with body as plain-text fallback; takes precedence over body+isHtml. |
| isHtml | boolean | no | Send body as HTML (ignored when markdownBody is provided). |
| cc | string | no | Additional CC recipients, comma-separated. |
| bcc | string | no | Additional BCC recipients, comma-separated. |
| fromName | string | no | Optional display name for the From header. |
| from | string | no | Send as this address instead of the Bridge login's default (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; an address not on the a |
| sanitizeHtml | boolean | no | Strip scripts and remote image beacons from HTML before delivery. Defaults to true. |
| attachments | array | no | Attachments with base64 encoded content. |
| confirmed | boolean | no | Set to true to confirm this irreversible send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview full reply-all fan-out without sending. |
| includeQuote | boolean | no | Append the quoted original message to the reply body. |
| appendSignature | boolean | no | Append PROTONMAIL_SIGNATURE (if configured) after your reply text and before the quoted original. Set false to send without it for this one message. |
Immediately forward an existing email to new recipients, preserving original attachments and prepending an optional note. Use when you have an emailId and want to re-route the message without review. Prefer create_forward_draft to stage a forward for review first. Requires PROTONMAIL_ALLOW_SEND.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Original email id. |
| undoWindowSeconds | number | no | Override PROTONMAIL_SEND_DELAY_SECONDS for this one send: queue it for this many seconds (cancelable via cancel_send) instead of the server's configured default. 0 sends immediately even if the server |
| to | string | yes | Forward recipient list, comma-separated. |
| body | string | no | Optional message before the forwarded content (plain text). |
| markdownBody | string | no | Optional introductory note in Markdown. Rendered to HTML with body as plain-text fallback; takes precedence over body+isHtml. |
| isHtml | boolean | no | Send body as HTML (ignored when markdownBody is provided). |
| cc | string | no | CC recipients, comma-separated. |
| bcc | string | no | BCC recipients, comma-separated. |
| fromName | string | no | Optional display name for the From header. |
| from | string | no | Send as this address instead of the Bridge login's default (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; an address not on the a |
| sanitizeHtml | boolean | no | Strip scripts and remote image beacons from HTML before delivery. Defaults to true. |
| attachments | array | no | Attachments with base64 encoded content. |
| confirmed | boolean | no | Set to true to confirm this irreversible send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview recipients without sending. |
| includeAttachments | boolean | no | Include original attachments in the forward. |
| attachmentParts | array | no | Forward only specific MIME part numbers, e.g. ["2", "3.1"]. Mutually exclusive with includeAttachments:false. |
| appendSignature | boolean | no | Append PROTONMAIL_SIGNATURE (if configured) after your note and before the forwarded content. Set false to send without it for this one message. |
Save a new outbound message as a local draft in SQLite, optionally syncing it to the Proton Drafts IMAP folder. Use to compose and review before sending. Prefer create_reply_draft when replying to a specific emailId, or create_forward_draft when forwarding. Returns a draftId for later update,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| to | string | no | Recipient email addresses, comma-separated. |
| cc | string | no | CC recipient email addresses, comma-separated. |
| bcc | string | no | BCC recipient email addresses, comma-separated. |
| subject | string | yes | Draft subject. |
| body | string | yes | Draft body. |
| isHtml | boolean | no | Whether the body should be HTML. |
| priority | string | no | — |
| replyTo | string | no | Optional reply-to email address. |
| from | string | no | Send as this address instead of the Bridge login's default when the draft is sent (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; |
| notes | string | no | Optional local note for the draft. |
| syncToRemote | boolean | no | Whether to sync the draft to the Proton Drafts mailbox when IMAP is available. |
| attachments | array | no | Attachments with base64 encoded content. |
Create a reply draft for a specific email, pre-filling To, Subject, and quoted body from the original message. Use when you have an emailId and want to stage the reply for review before sending. Prefer create_thread_reply_draft when you only have a threadId. Prefer reply_to_email to send…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Original email id. |
| body | string | yes | Reply body to prepend. |
| replyAll | boolean | no | Reply to all original recipients. |
| isHtml | boolean | no | Store body as HTML. |
| cc | string | no | Additional CC recipients, comma-separated. |
| bcc | string | no | Additional BCC recipients, comma-separated. |
| notes | string | no | Optional local note for the draft. |
| from | string | no | Store this draft under this address instead of the Bridge login's default (e.g. an additional configured account address). Falls back to the primary account if the address isn't a configured account. |
| syncToRemote | boolean | no | Whether to sync the draft to the Proton Drafts mailbox when IMAP is available. |
| attachments | array | no | Attachments with base64 encoded content. |
Create a forward draft for an existing email, pre-filling the original message as quoted body and preserving its attachments. Use when you have an emailId and want to stage a forward for review before sending. Prefer forward_email to send immediately without saving. Returns a draftId for later…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Original email id. |
| to | string | yes | Forward recipient list, comma-separated. |
| body | string | no | Optional message before the forwarded content. |
| isHtml | boolean | no | Store body as HTML. |
| cc | string | no | CC recipients, comma-separated. |
| bcc | string | no | BCC recipients, comma-separated. |
| notes | string | no | Optional local note for the draft. |
| from | string | no | Store this draft under this address instead of the Bridge login's default (e.g. an additional configured account address). Falls back to the primary account if the address isn't a configured account. |
| syncToRemote | boolean | no | Whether to sync the draft to the Proton Drafts mailbox when IMAP is available. |
| includeAttachments | boolean | no | Include the original email's attachments in the draft. |
| attachments | array | no | Attachments with base64 encoded content. |
List all locally saved drafts with their status, subject, and timestamps. Does NOT list drafts stored only on the Proton server — use list_remote_drafts for those. Prefer get_draft when you already have a draftId and need the full content. Attachment content is omitted here (filename/type/size…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| includeSent | boolean | no | Include drafts already sent. |
| limit | number | no | Maximum drafts to return. Defaults to 20; check hasMore and page with offset for more. |
| offset | number | no | Number of drafts to skip, newest-updated first. |
List draft messages currently stored in the Proton Drafts IMAP folder on the server. Use to see drafts created via Proton webmail or mobile app that have not been synced locally. Prefer list_drafts to see drafts managed by this server. Requires an active IMAP connection.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| limit | number | no | Maximum drafts to return. |
| offset | number | no | Pagination offset. |
Fetch the full content of a single locally saved draft by its draftId. Use to read or verify a draft before sending or updating. Prefer list_drafts to discover draftIds first. Does NOT fetch drafts from the Proton server — use list_remote_drafts for those. Attachments are metadata only…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | Draft id returned by create_draft, list_drafts, or a create_*_draft call. |
| includeAttachmentContent | boolean | no | Return each attachment's full base64 content instead of just its metadata. Off by default — see the tool description. |
Update an existing locally saved draft's recipients, subject, body, or other fields. Use to edit a draft before sending. Only provided fields are updated — omitted fields retain their current values. After updating, call send_draft to send or sync_draft_to_remote to push to Proton Drafts. The…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | Draft id returned by create_draft, list_drafts, or a create_*_draft call. |
| to | string | no | Recipient email addresses, comma-separated. |
| cc | string | no | CC recipient email addresses, comma-separated. |
| bcc | string | no | BCC recipient email addresses, comma-separated. |
| subject | string | no | Draft subject. |
| body | string | no | Draft body. Replaces the WHOLE body — for a change to part of a long draft use bodyEdits instead, which costs a fraction of the tokens. |
| bodyEdits | array | no | Change parts of the existing body without resending it: find/replace edits applied in order (use instead of body; not both). Each find must appear exactly once in the body (add surrounding text to mak |
| isHtml | boolean | no | Whether the body should be HTML. |
| priority | string | no | — |
| replyTo | string | no | Optional reply-to email address. |
| from | string | no | Send as this address instead of the Bridge login's default when the draft is sent (e.g. an alias or additional address on the same Proton account). Proton accepts any address verified on the account; |
| notes | string | no | Optional local note for the draft. |
| syncToRemote | boolean | no | Whether to sync the updated draft to the Proton Drafts mailbox when IMAP is available. |
| attachments | array | no | Attachments with base64 encoded content. |
Force-push a locally saved draft to the Proton Drafts IMAP folder and return the remote UID. Use when a draft was created with syncToRemote:false or when the automatic sync failed. Do NOT use this if PROTONMAIL_ALLOW_REMOTE_DRAFT_SYNC is false — the call will be rejected.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | Draft id returned by create_draft, list_drafts, or a create_*_draft call. |
Send a previously saved local draft through Proton Bridge SMTP. Use as the final step in a draft-review-send workflow after create_draft and optional update_draft. Marks the draft as sent in the local store but does not delete it. Refuses if this draft has a still-pending scheduled send (from…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | Draft id returned by create_draft, list_drafts, or a create_*_draft call. |
| confirmed | boolean | no | Set to true to confirm this irreversible send when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview recipients and draft content without sending. Returns what would be sent. |
Queue a saved draft to send at a future time instead of immediately. IMPORTANT: this only fires while this MCP server process stays running (it's a stdio server that exits when its client disconnects) — if the app is closed before sendAt, the send fires on next server startup instead of the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | Draft id returned by create_draft, list_drafts, or a create_*_draft call. |
| sendAt | string | yes | ISO 8601 timestamp of when to send, e.g. 2026-01-15T09:00:00.000Z. Must be in the future. |
| confirmed | boolean | no | Set to true to confirm when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Permanently delete a locally saved draft from SQLite. Use to discard a draft you no longer need. Does NOT remove a matching draft from the Proton Drafts IMAP folder — that requires a separate mailbox action. Irreversible; requires confirmed:true when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| draftId | string | yes | Draft id returned by create_draft, list_drafts, or a create_*_draft call. |
| confirmed | boolean | no | Pass true to confirm permanent deletion of the draft. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Fetch emails from a mailbox folder via live IMAP, defaults to newest first; set sortByUid to asc for oldest first. Use to browse or paginate recent messages in a specific folder. Prefer search_emails to filter by sender, subject, or date. Prefer search_indexed_emails for fast repeated queries when…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| folder | string | no | Folder name. |
| limit | number | no | Number of emails to return (1-250; larger values are capped at 250, use hasMore and offset/beforeUid to page). |
| offset | number | no | Pagination offset from newest first. |
| includeSnippet | boolean | no | Fetch a short plain-text preview of each email body. Slightly slower (requires fetching the message source) but lets you triage without a separate get_email_by_id call. Warning: snippet content is fro |
| beforeUid | number | no | Return only messages with UID less than this value. Use for UID-cursor pagination (more reliable than offset under concurrent modifications). |
| sortByUid | string | no | Sort direction by UID. Default is desc (newest first). |
| fields | no | Trim each returned email to just these field names (e.g. ["subject","from","date"]) to save tokens on large result sets. id is always included. Accepts either an array or a comma-separated string. Omi |
Fetch the full content of a single email using a composite emailId. Use after get_emails or search_emails to read a specific message in full. The emailId format is FOLDER::UID — always use the id returned by a prior tool call; do not construct it manually. Response includes a security block…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id from previous tool output. |
| preferHtml | boolean | no | Return raw HTML body instead of plain-text stripped version. |
| maxBodyLength | number | no | Truncate body at this many characters (1–500000). |
| showHeaders | boolean | no | Include the full raw header map (from/to/content-type/dkim-signature/list/received/...) in the response. Off by default to avoid token bloat — turn on only when you need a specific header not already |
Fetch full content for multiple emails by composite id in one call (max 25). Use to read a batch of specific messages from a prior get_emails/search_emails/search_indexed_emails result without one get_email_by_id round trip per message. One failed id does not fail the whole batch — check each…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailIds | yes | Composite email ids as an array or a comma-separated string. Max 25 per call. | |
| preferHtml | boolean | no | Return raw HTML body instead of plain-text stripped version. |
| maxBodyLength | number | no | Truncate each body at this many characters (1–500000). |
Search emails via live IMAP filters, across ALL configured accounts by default (accounts are queried one at a time; pass account = address or slug to search only one; non-primary ids are prefixed '<slug>::'), with optional local post-processing for attachments and labels. Use when you need…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Account address or slug to search (see list_accounts). Omit to search ALL configured accounts; non-primary ids come back prefixed '<slug>::'. |
| query | string | no | Free-text query across headers and body. |
| folder | string | no | Folder to search. Defaults to all folders. |
| label | string | no | Label name (Proton: 'Newsletters' = the Labels/Newsletters folder; a folder path such as 'Labels/Newsletters' or 'INBOX' also works). Searches just that label's folder, which is much faster than scann |
| threadId | string | no | Thread id filter applied locally after IMAP fetch. |
| from | string | no | Sender filter. |
| to | string | no | Recipient filter. |
| subject | string | no | Subject filter. |
| hasAttachment | boolean | no | Whether the message should have attachments. |
| attachmentName | string | no | Attachment filename filter applied locally. |
| isRead | boolean | no | Read status filter. |
| isStarred | boolean | no | Starred status filter. |
| dateFrom | string | no | Inclusive start date/time in ISO format. |
| dateTo | string | no | Inclusive end date/time in ISO format. |
| sizeLarger | number | no | Only return messages larger than this size in bytes. |
| sizeSmaller | number | no | Only return messages smaller than this size in bytes. |
| listId | string | no | Filter by List-ID header value (mailing list filter). |
| senderDomain | string | no | Filter by sender domain, e.g. example.com. Applied locally after IMAP fetch. |
| mailboxRole | string | no | Normalized mailbox role: Inbox, Sent, Archive, Trash. Applied locally. |
| messageId | string | no | RFC 5322 Message-ID header value to match exactly. |
Return all mailbox folders with message counts and unseen counts from the live IMAP session. Use to discover available folder names before targeting get_emails, move_email, or create_folder. Prefer sync_folders to force a fresh fetch when the folder list appears stale. Folders with noselect:true…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — |
Refresh the in-memory folder list from the IMAP server and return the updated list. Use when folders have been created, renamed, or deleted externally (e.g. via Proton webmail) and get_folders is returning stale data. Prefer get_folders for a read-only view that does not force a refresh.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Account address or slug to act on. Defaults to the primary account. |
Create a new mailbox folder via IMAP. Use 'Folders/' prefix for user folders and 'Labels/' for labels in Proton Bridge (e.g. 'Folders/Receipts'). Do NOT attempt to create system folders such as INBOX, Sent, Trash, Archive, or Spam. Returns the created path on success.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | Full mailbox path. In Proton Bridge, user folders live under 'Folders/' and labels under 'Labels/'. |
| account | string | no | Account address or slug to act on. A '<slug>::' prefix on the path (as get_folders shows it) does the same. Defaults to the primary account. |
Rename or move a mailbox folder to a new IMAP path. Existing messages are preserved in place. Do NOT rename system folders (INBOX, Sent, Trash, Archive, Spam). Refreshes the local folder cache after the operation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | Existing folder path. |
| newPath | string | yes | New folder path. |
| account | string | no | Account address or slug to act on. A '<slug>::' prefix on the path (as get_folders shows it) does the same. Defaults to the primary account. |
Delete an empty mailbox folder via IMAP. The folder must contain no messages — move or trash all messages first. Do NOT delete system folders (INBOX, Sent, Trash, Archive, Spam). Irreversible; messages already removed cannot be recovered this way.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| path | string | yes | Folder path to delete. |
| account | string | no | Account address or slug to act on. A '<slug>::' prefix on the path (as get_folders shows it) does the same. Defaults to the primary account. |
| confirmed | boolean | no | Pass true to confirm permanent deletion of the folder and all its messages. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Mark a single email as read or unread by setting the IMAP Seen flag. Use for individual triage or to reset read state. Prefer batch_email_action with action 'mark_read' or 'mark_unread' when updating multiple emails at once.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| isRead | boolean | no | — |
Star or unstar a single email using the IMAP Flagged flag. Use to bookmark an important message for later follow-up. Prefer batch_email_action with action 'star' or 'unstar' when flagging multiple emails at once.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| isStarred | boolean | no | — |
Move a single email to any specified mailbox folder. Use when routing a message to a custom folder. Prefer archive_email to move to the standard Archive folder, or trash_email to move to Trash. Use get_folders first to confirm the target folder path.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| targetFolder | string | yes | — |
Move a single email to the standard Archive folder. Use for messages that are resolved but worth keeping long-term. Prefer trash_email when the message is no longer needed. Prefer move_email to route to a custom folder. Prefer batch_email_action for archiving multiple emails at once.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
Move a single email to the Trash folder. Messages in Trash can be recovered with restore_email. Use instead of delete_email when you may want to recover the message later. Prefer batch_email_action with action 'trash' for multiple emails at once.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
Move an email from Trash back to INBOX or to a specified folder. Use to undo a trash_email operation. Does not work on permanently deleted messages — only messages currently in Trash can be restored.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| targetFolder | string | no | Optional restore destination. Defaults to INBOX. |
Move an email out of sight into Folders/MCP-Snoozed and bring it back to its original folder at wakeAt. IMPORTANT: like scheduled sends, wake only fires while this MCP server process stays running — if the app is closed before wakeAt, the email wakes on next server startup instead of at the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format. |
| wakeAt | string | yes | ISO 8601 timestamp of when to bring it back, e.g. 2026-01-15T09:00:00.000Z. Must be in the future. |
Wake a snoozed email immediately, moving it back to its original folder before wakeAt. No effect (throws) if the snooze has already woken or was already canceled.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The id returned by snooze_email. |
List every snoozed email, including its id, status, and wakeAt — use this to rediscover the id needed for cancel_snooze if it was lost with the conversation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| status | string | no | Filter to one status. Omit to list everything (waking = being moved back right now). |
Save a reusable email template. Subject and body may contain {{variable}} placeholders (e.g. {{firstName}}), auto-detected and stored on the template. Fails if a template with the same name already exists — delete it first to replace it.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Unique template name. |
| subject | string | yes | Subject line, may contain {{variable}} placeholders. |
| body | string | yes | Body text, may contain {{variable}} placeholders. |
| isHtml | boolean | no | Whether body is HTML. |
List all saved email templates.
No parameter schema on file.
Get a single saved email template by id.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The template id, as returned by create_template or list_templates. |
Delete a saved email template. Irreversible; requires confirmed:true when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The template id. |
| confirmed | boolean | no | Pass true to confirm permanent deletion of the template. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Render a saved template's subject and body, substituting {{variable}} placeholders with the given values. Placeholders left unfilled stay literal (e.g. {{firstName}}) and are listed in missingVariables — check that field is empty before passing the rendered subject/body to send_email, or the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | The template id. |
| variables | object | no | Map of variable name to replacement value, e.g. { "firstName": "Alex" }. |
Add or remove Proton labels on a single message without moving it. Prefer bulk_update_labels to apply label changes across multiple messages. Labels live under the Labels/ namespace (e.g. 'Labels/Work'). Use for one message at a time. Create missing labels first with create_folder using a…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format. |
| labelsToAdd | array | no | Label paths to add, e.g. ["Labels/Work", "Labels/Receipts"]. The 'Labels/' prefix is optional and will be prepended if missing. |
| labelsToRemove | array | no | Label paths to remove. Idempotent — silently ignored if the label is not applied. |
Add or remove arbitrary IMAP flags on a single message, then verify the server applied them. Prefer bulk_update_flags to update flags across multiple messages at once. Returns notApplied[] listing flags the server silently dropped. Use for custom IMAP flags (e.g. \\Answered) or when…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format. |
| flagsToAdd | array | no | IMAP flags to set, e.g. ["\\Seen", "\\Flagged", "\\Answered"]. |
| flagsToRemove | array | no | IMAP flags to clear. |
| confirmed | boolean | no | Pass true to confirm setting \\Deleted. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Count messages matching search criteria. Plain IMAP criteria are answered by the server without fetching messages; non-ASCII values (accented letters, ł, ß) and local-only filters (hasAttachment, senderDomain, threadId, attachmentName, mailboxRole) are checked locally, and the result carries…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| folder | string | no | Folder to count in. Defaults to INBOX. |
| query | string | no | Free-text filter. |
| from | string | no | Sender filter. |
| to | string | no | Filter by recipient address. |
| subject | string | no | Subject filter. |
| hasAttachment | boolean | no | Filter by attachment presence. |
| label | string | no | Filter by folder label applied locally. |
| threadId | string | no | Filter by thread id, applied locally. |
| senderDomain | string | no | Filter by sender domain, applied locally. |
| isRead | boolean | no | Read status filter. |
| isStarred | boolean | no | Starred status filter. |
| dateFrom | string | no | Inclusive start date in ISO format. |
| dateTo | string | no | Inclusive end date in ISO format. |
| sizeLarger | number | no | Only count messages larger than this size in bytes. |
| sizeSmaller | number | no | Only count messages smaller than this size in bytes. |
Return live message count, unseen count, uidNext, and uidValidity for a single mailbox folder. Use to check unread counts or folder health without fetching messages. Prefer count_messages when you need to apply filters (sender, subject, date). Prefer get_email_stats for an aggregate summary across…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| folder | string | no | Folder path. Defaults to INBOX. |
Permanently delete ALL messages in a folder at once. Prefer bulk_delete when removing a subset of messages rather than everything in the folder. Use only when the goal is to clear an entire folder (e.g. emptying Trash or Spam). Only available when PROTONMAIL_ALLOW_EMPTY_FOLDER=true. Irreversible.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| folder | string | yes | Folder path to empty (e.g. 'Trash', 'Spam'). |
| account | string | no | Account address or slug to act on. A '<slug>::' prefix on the path (as get_folders shows it) does the same. Defaults to the primary account. |
| confirmed | boolean | no | Must be true to execute. Call with confirmed:false first to see a preview of what would be deleted. |
Move multiple emails to a target folder in one IMAP pass. Accepts either explicit emailIds[] or a match criteria object (XOR). Supports dryRun to preview. For single-message moves use move_email.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailIds | array | no | Explicit email IDs (FOLDER::UID format). XOR with match. |
| match | object | no | Search criteria to select messages. XOR with emailIds. |
| folder | string | no | Source folder (required when using match). |
| targetFolder | string | yes | Destination folder. |
| dryRun | boolean | no | Preview without moving. |
| maxBatchSize | number | no | Maximum number of messages to process. Defaults to 500. Use to prevent runaway operations. |
Delete multiple emails by explicit ID list or by search criteria (from/subject/date/flags). Prefer empty_folder to clear an entire folder. Prefer delete_email for a single message. Prefer batch_email_action when the same set of IDs needs a mix of actions, not just deletion. Use when you have…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailIds | array | no | Explicit email IDs. XOR with match. |
| match | object | no | Search criteria. XOR with emailIds. |
| folder | string | no | Source folder (required with match). |
| permanent | boolean | no | Permanently expunge (irreversible). False = move to Trash. |
| dryRun | boolean | no | — |
| confirmed | boolean | no | Required when permanent:true and PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| maxBatchSize | number | no | Maximum number of messages to process. Defaults to 500. Use to prevent runaway operations. |
Add or remove IMAP flags on multiple messages simultaneously. Prefer update_message_flags for a single message when you need per-flag server verification. Use when the same flag change (e.g. \\Seen, \\Flagged) should apply to several messages. Accepts emailIds[] OR match+folder (XOR). Returns…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailIds | array | no | Explicit email IDs. XOR with match. |
| match | object | no | Search criteria. XOR with emailIds. |
| folder | string | no | Source folder (required with match). |
| flagsToAdd | array | no | IMAP flags to set, e.g. ["\\Seen", "\\Flagged"]. |
| flagsToRemove | array | no | IMAP flags to clear. |
| dryRun | boolean | no | — |
| maxBatchSize | number | no | Maximum number of messages to process. Defaults to 500. Use to prevent runaway operations. |
| confirmed | boolean | no | Pass true to confirm setting \\Deleted. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Add or remove Proton labels on multiple messages simultaneously. Use when the same label change should apply to several messages. Labels are IMAP folders under Labels/ namespace. Accepts emailIds[] OR match+folder (XOR).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailIds | array | no | Explicit email IDs. XOR with match. |
| match | object | no | Search criteria. XOR with emailIds. |
| folder | string | no | Source folder (required with match). |
| labelsToAdd | array | no | Labels to add, e.g. ["Labels/Work"]. |
| labelsToRemove | array | no | Labels to remove. |
| dryRun | boolean | no | — |
| maxBatchSize | number | no | Maximum number of messages to process. Defaults to 500. Use to prevent runaway operations. |
Return a frequency table of the top senders in a folder over a date range. Keyed on the sender address, not the display name, so display-name spoofing does not conflate different senders. Use for inbox analytics, unsubscribe triage, and contact discovery.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| folder | string | no | Folder to analyse. Defaults to INBOX. |
| since | string | no | ISO date lower bound. |
| before | string | no | ISO date upper bound. |
| limit | number | no | Max senders to return. |
| scanLimit | number | no | Max messages to scan. |
| excludeSelf | boolean | no | Exclude messages sent by your own address. |
Move all messages in a thread to a destination folder, identified by its RFC 5322 Message-ID header. Use when you have the raw Message-ID (e.g. from email headers) and want to move the full conversation. Prefer apply_thread_action with action 'move' when you have a local threadId from get_threads…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| messageId | string | yes | RFC 5322 Message-ID, e.g. <abc@mail.example.com>. |
| destination | string | yes | Destination folder. |
| acrossFolders | boolean | no | Also search Sent and All Mail. |
| dryRun | boolean | no | — |
Delete all messages in a thread, identified by RFC 5322 Message-ID header. permanent:true permanently expunges; false moves to Trash. Use when you have the raw Message-ID. Prefer apply_thread_action with action 'trash' or 'delete' when you have a local threadId from get_threads or…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| messageId | string | yes | RFC 5322 Message-ID. |
| permanent | boolean | no | — |
| acrossFolders | boolean | no | — |
| dryRun | boolean | no | — |
| confirmed | boolean | no | — |
Add or remove IMAP flags across all messages in a thread, identified by RFC 5322 Message-ID header. Use when you have the raw Message-ID and want to flag an entire conversation at once. Prefer apply_thread_action with action 'mark_read', 'mark_unread', 'star', or 'unstar' when you have a local…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| messageId | string | yes | RFC 5322 Message-ID. |
| flagsToAdd | array | no | — |
| flagsToRemove | array | no | — |
| acrossFolders | boolean | no | — |
| dryRun | boolean | no | — |
| confirmed | boolean | no | Pass true to confirm setting \\Deleted. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Create a Proton label (IMAP folder under Labels/ namespace). Idempotent — safe to call if the label may already exist. For folder creation use create_folder with a Folders/ prefix.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Label name. The Labels/ prefix is optional and will be added automatically. |
Rename a Proton label (IMAP folder under Labels/ namespace). Messages keep the label, just under the new name. For renaming a folder use rename_folder with a Folders/ prefix.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Existing label name. The Labels/ prefix is optional and will be added automatically. |
| newName | string | yes | New label name. The Labels/ prefix is optional and will be added automatically. |
Delete a Proton label (IMAP folder under Labels/ namespace). Deletes the label itself, not the messages — they remain in their other folders/labels. Irreversible. For deleting a folder use delete_folder with a Folders/ prefix.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Label name to delete. The Labels/ prefix is optional and will be added automatically. |
| confirmed | boolean | no | Pass true to confirm permanent deletion of the label. Required when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
Apply one action to a known list of email IDs in a single IMAP pass. Prefer bulk_delete when selecting messages by search criteria (from/subject/date) rather than by ID. Prefer apply_thread_action when acting on a thread by threadId. Prefer empty_folder to clear an entire folder. Use when you…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailIds | yes | Composite email ids as an array or a comma-separated string. | |
| action | string | yes | — |
| targetFolder | string | no | Destination folder. Required when action is 'move'; optional for 'restore' (defaults to INBOX). |
| continueOnError | boolean | no | Continue applying the action after an individual failure. |
| confirmed | boolean | no | Set to true to confirm a permanent delete (action "delete") when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview the impact without mutating the mailbox. |
| maxBatchSize | number | no | Maximum number of messages to process. Defaults to 500. Use to prevent runaway operations. |
Apply a reversible mailbox action to every message in a normalized thread at once. Use when you want to act on a full thread identified by threadId (e.g. archive or mark-read an entire conversation). Supports dryRun, unreadOnly to scope impact, and syncBefore to refresh the index first. Prefer…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| threadId | string | yes | Thread id from get_threads or get_actionable_threads. |
| action | string | yes | — |
| targetFolder | string | no | Required when action is move. |
| unreadOnly | boolean | no | Only apply the action to unread messages in the thread. |
| continueOnError | boolean | no | Continue applying the action after an individual failure. |
| confirmed | boolean | no | Set to true to confirm a permanent delete (action "delete") when PROTONMAIL_CONFIRM_DESTRUCTIVE is enabled. |
| dryRun | boolean | no | Preview the impact without mutating the mailbox. |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before resolving the thread. |
| maxBatchSize | number | no | Maximum number of messages to process. Defaults to 500. Use to prevent runaway operations. |
Return aggregate mailbox statistics: folder message counts, total unread counts, and a brief analytics sample. Use for a quick mailbox health overview. Prefer get_email_analytics for richer breakdowns such as top senders and hourly patterns. Prefer get_volume_trends for time-series daily volume…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| days | number | no | Trailing days window. |
| limit | number | no | Maximum messages to sample. |
Generate sampled mailbox analytics including top senders, busiest hours of day, and volume breakdown by folder. Use for productivity insights and communication pattern analysis. Prefer get_email_stats for a fast aggregate count summary. Prefer get_volume_trends for per-day message volume history.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| days | number | no | Trailing days window. |
| limit | number | no | Maximum messages to sample. |
Return the most frequently contacted email addresses ranked by interaction volume within the analytics sample window. Use to identify key correspondents or to pre-populate recipient lists. Reads from the local index (auto-refreshed if stale or empty) — reflects the last sync. Note: results are…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| limit | number | no | Maximum contacts to return. |
Return daily inbound and outbound message counts for a trailing window. Use to spot volume spikes, identify quiet periods, or track communication trends over time. Prefer get_email_analytics for sender-level breakdowns and hourly patterns. Reads from the local index (auto-refreshed if stale or…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| days | number | no | Number of trailing days to include. |
Check whether Proton Bridge SMTP and IMAP are reachable and return authentication status for each. Use to diagnose connectivity before sending or syncing, or when tools return connection errors. Returns individual pass/fail for each protocol, plus this server's own version and entrypoint path —…
No parameter schema on file.
Return the server's current runtime state: policy flags (read-only, allow-send, allowed actions), background sync schedule and last-run time, IMAP IDLE watch state, draft store statistics, and local index freshness. Use to understand how the server is configured and whether sync is actively…
No parameter schema on file.
List every configured Proton address (the primary Bridge login plus any additional addresses from PROTONMAIL_ACCOUNTS_JSON), each with its own IMAP/SMTP connection status and local index freshness. Use to see which accounts this server is managing, and each account's slug — prefix an…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| checkConnections | boolean | no | Verify IMAP/SMTP connectivity for every account (adds a real connection attempt per account). |
Run a comprehensive production health check covering SMTP auth, IMAP auth, optional IMAP IDLE probe, SQLite index integrity, sync-failed drafts, runtime policy validation, and what this server can/cannot do (capabilities). Also reports this server's own version and entrypoint path — worth checking…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| includeSmtp | boolean | no | Verify SMTP connectivity. |
| includeImap | boolean | no | Verify IMAP connectivity. |
| includeIdleProbe | boolean | no | Run a short IMAP IDLE wait to confirm the watch path is operational. |
| idleTimeoutSeconds | number | no | IDLE probe timeout in seconds when includeIdleProbe is true. |
Immediately trigger the configured background mailbox sync cycle outside its normal schedule and return its updated status. Use to force a sync when the index may be stale. Does nothing useful if PROTONMAIL_AUTO_SYNC is disabled. Prefer sync_emails for an on-demand, configurable sync with folder…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Account address or slug to act on. Defaults to the primary account. |
Open an IMAP IDLE session and block until a mailbox change event arrives or the timeout expires. Use to detect real-time inbox activity without polling. Returns whether a change was observed. Always returns within timeoutSeconds plus a few seconds' grace, even if the underlying IDLE session gets…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Account address or slug to act on. Defaults to the primary account. |
| folder | string | no | Mailbox to watch during IDLE. |
| timeoutSeconds | number | no | Maximum watch duration in seconds. |
Incrementally sync email metadata from IMAP into the local SQLite index, using stored checkpoints to avoid re-fetching already-indexed messages. Use before calling search_indexed_emails or get_threads when the index may be stale. The default incremental sync only ever adds/updates recent messages…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Account address or slug to act on. Defaults to the primary account. |
| folder | string | no | Folder to sync. Defaults to all folders. |
| timeBudgetSeconds | number | no | Wall-clock budget for a per-call sync (default 45, max 300). Each folder is committed to the index as soon as it is fetched; when the budget is reached no further folder is started and the response re |
| full | boolean | no | Fetch a larger per-folder sample, and detect/prune messages no longer present in this folder (moved, archived, trashed, or deleted by any client) that the default incremental sync would otherwise leav |
| limitPerFolder | number | no | Override the per-folder fetch limit. |
| includeAttachmentText | boolean | no | Extract searchable text from text-like attachments while syncing. |
Return metadata about the local SQLite email index: row count, last sync timestamp, index schema version, and per-folder coverage. Use to verify the index is fresh and complete before querying it with search_indexed_emails or get_threads. If the index is empty or stale, call sync_emails first.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — |
Search the local SQLite mailbox index (of ALL configured accounts by default; pass account = address or slug to search only one; non-primary ids are prefixed '<slug>::') without making any IMAP connection. Supports free-text and field shortcuts inline: from:alice@example.com, to:bob,…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | string | no | Account address or slug to search (see list_accounts). Omit to search ALL configured accounts; non-primary ids come back prefixed '<slug>::'. |
| query | string | no | Free-text query across indexed metadata. |
| folder | string | no | Folder filter. |
| label | string | no | Folder or label filter. |
| threadId | string | no | Thread id filter. |
| from | string | no | Sender filter. |
| to | string | no | Recipient filter. |
| senderDomain | string | no | Sender domain filter such as example.com. |
| subject | string | no | Subject filter. |
| hasAttachment | boolean | no | Attachment filter. |
| attachmentName | string | no | Attachment filename filter. |
| isRead | boolean | no | Read status filter. |
| isStarred | boolean | no | Starred status filter. |
| mailboxRole | string | no | Normalized mailbox role like Inbox, Sent, Archive, or Trash. |
| dateFrom | string | no | Inclusive start date/time in ISO format. |
| dateTo | string | no | Inclusive end date/time in ISO format. |
| limit | number | no | Maximum results. |
| fields | no | Trim each returned email to just these field names (e.g. ["subject","from","date"]) to save tokens on large result sets. id is always included. Accepts either an array or a comma-separated string. Omi |
Return normalized Proton folders and labels from the local mailbox index, including message counts per label. Use to enumerate available labels before filtering with search_indexed_emails or get_threads. Prefer get_folders for live IMAP folder counts when the index may be stale.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| limit | number | no | Maximum labels to return. Capped at 250; use get_folders for the complete live folder list. |
Return normalized email threads from the local mailbox index, grouping individual messages into conversations by subject and participants. Use to view mail as threads rather than individual messages. Note: searches subject and participants only — use search_indexed_emails to search body content.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| query | string | no | Free-text filter across subject, participants, and labels. |
| label | string | no | Require a normalized label on the thread. |
| folder | string | no | Only threads with a message in this folder, by its exact path as get_folders lists it (e.g. INBOX, Archive, Trash, Folders/Receipts). With several accounts it applies to each. |
| limit | number | no | Maximum threads to return. |
| offset | number | no | Skip this many threads (use nextOffset from the previous response to page). |
Return mailbox threads ranked by reply urgency, filtered to those requiring action. Use for daily triage to surface what needs a response from you. Supports pendingOn filter to distinguish threads waiting on you vs. them. Prefer get_inbox_digest for a broader summary including stale items. Prefer…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| query | string | no | Free-text filter across subject, latest preview, senders, and labels. |
| label | string | no | Require a normalized label on the thread. |
| pendingOn | string | no | Filter by who the thread is currently waiting on. |
| unreadOnly | boolean | no | Prefer threads with unread messages only. |
| limit | number | no | Maximum threads to return. |
| offset | number | no | Skip this many threads (use nextOffset from the previous response to page). |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before ranking threads. |
Return a structured inbox summary: unread counts, top actionable threads, and overdue threads where a reply is pending from you. Use as the starting point for an inbox review session to get an at-a-glance picture. Prefer get_actionable_threads for a deeper, filterable list of threads needing action.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| limit | number | no | Maximum threads per digest section. |
| offset | number | no | Skip this many threads in each section (use paging.<section>.nextOffset from the previous response to continue). |
| minAgeHours | number | no | How old a thread must be before it is considered stale waiting on you. |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before building the digest. |
Return threads that appear overdue for follow-up based on age and pending-on state. Use when looking for outbound messages you sent that haven't received a reply, or to surface stale inbound threads. Prefer get_actionable_threads for threads where someone is currently waiting on you.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| limit | number | no | Maximum candidate threads to return. |
| offset | number | no | Skip this many candidates (use nextOffset from the previous response to page). |
| minAgeHours | number | no | Minimum thread age in hours. |
| pendingOn | string | no | Which side the candidate thread should be waiting on. |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before selecting candidates. |
Find email threads likely containing important document attachments such as invoices, contracts, travel confirmations, or calendar invites. Use to locate attachment-heavy threads by category without knowing the exact sender or subject. Prefer search_indexed_emails with hasAttachment:true for…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| category | string | no | Document category to prioritize. |
| query | string | no | Optional filter across thread subjects and attachment names. |
| limit | number | no | Maximum threads to return. |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before searching document threads. |
Fetch recent threads and communication history for a person or company domain to prepare for a meeting or call. Use before a scheduled meeting to surface relevant recent correspondence. Provide at least one of person (name or email fragment) or domain. Returns matched threads sorted by recency.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| account | no | — | |
| person | string | no | Person name or email fragment to match. |
| domain | string | no | Domain to match, such as example.com. |
| limit | number | no | Maximum threads to include. |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before building the meeting prep. |
Return a summarized view of a single thread: latest inbound message preview, latest outbound preview, attachment list, and a recommended next action. Use for a quick status check on a specific thread without reading every message. Prefer get_thread_by_id when you need the full raw thread data and…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| threadId | string | yes | Thread id from get_threads or get_actionable_threads. |
Fetch the complete normalized thread record from the local index, including all messages, participants, labels, and full metadata. Use when you need all messages in a thread. Prefer get_thread_brief for a summarized quick view that avoids returning the full message list.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| threadId | string | yes | Thread id from get_threads. |
| folders | array | no | Optional folders to scope thread search. Searches all folders when omitted. |
Create a reply draft from a threadId, automatically selecting the latest inbound message to reply to. Use when you have a threadId from get_threads or get_actionable_threads and want to stage a reply for review. Prefer create_reply_draft when you already have a specific emailId. Returns a draftId…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| threadId | string | yes | Thread id from get_threads or get_actionable_threads. |
| body | string | yes | Reply body to prepend. |
| replyAll | boolean | no | Reply to all original recipients. |
| preferLatestInbound | boolean | no | Prefer replying to the latest inbound message in the thread. |
| isHtml | boolean | no | Store body as HTML. |
| cc | string | no | Additional CC recipients, comma-separated. |
| bcc | string | no | Additional BCC recipients, comma-separated. |
| notes | string | no | Optional local note for the draft. |
| from | string | no | Store this draft under this address instead of the Bridge login's default (e.g. an additional configured account address). Falls back to the primary account if the address isn't a configured account. |
| syncBefore | boolean | no | Refresh the local mailbox index from IMAP before resolving the thread. |
| syncToRemote | boolean | no | Whether to sync the draft to the Proton Drafts mailbox when IMAP is available. |
| attachments | array | no | Attachments with base64 encoded content. |
List all attachments on a specific email with stable attachmentIds, filenames, content types, and sizes. Use before calling get_attachment_content or save_attachment to discover what attachments are available and get their IDs. Prefer save_attachments when you want to download all attachments at…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| includeInline | boolean | no | Include inline attachments. |
| filenameContains | string | no | Optional filename substring filter. |
| contentType | string | no | Optional exact content type filter. |
Fetch metadata for a specific email attachment and optionally return its base64-encoded content inline. Use when you need to read or process attachment data in-memory. Set includeBase64:false (default) to retrieve metadata only without loading the full payload. Prefer save_attachment to write the…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| attachmentId | string | yes | Stable attachment id returned by list_attachments. |
| includeBase64 | boolean | no | Include base64 payload in the response. |
| saveTo | string | no | Relative path within PROTONMAIL_ALLOW_FILE_DOWNLOAD_DIR to save attachment to disk. Returns file path and size instead of inline base64. Requires env var to be set. Set PROTONMAIL_MAX_INLINE_BYTES (in |
Extract plain text from a text-like attachment (text/plain, text/csv, text/markdown, application/json, application/xml, text/html stripped of markup, text/calendar summarized) without dealing with base64 encoding. Not gated by the smaller inline-base64 size limit that get_attachment_content uses —…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| attachmentId | string | yes | Stable attachment id returned by list_attachments. |
Save all qualifying attachments from an email to a directory on disk, with optional filename substring or content-type filters. Use to batch-download attachments from a single email. Returns the list of written file paths. Prefer save_attachment when you need to save one specific attachment by its…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| outputPath | string | no | Optional target directory or file path. |
| includeInline | boolean | no | Include inline attachments. |
| filenameContains | string | no | Optional filename substring filter. |
| contentType | string | no | Optional exact content type filter. |
Save a single email attachment to disk by its attachmentId and return the written file path. Use when you have a specific attachmentId from list_attachments and want to write that file. Prefer save_attachments to save all or filtered attachments from an email without needing individual attachment…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format, as returned by get_emails or search_emails. |
| attachmentId | string | yes | Stable attachment id returned by list_attachments. |
| outputPath | string | no | Optional file or directory path to write to. |
| saveTo | string | no | Relative path within PROTONMAIL_ALLOW_FILE_DOWNLOAD_DIR to save attachment to disk. Returns file path and size instead of inline base64. Requires env var to be set. Set PROTONMAIL_MAX_INLINE_BYTES (in |
Save a message's full raw source (RFC822/.eml) to disk. Use for backup or migrating a message elsewhere. Requires PROTONMAIL_ALLOW_FILE_DOWNLOAD_DIR to be configured, same as save_attachment.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| emailId | string | yes | Composite email id in FOLDER::UID format. |
| outputPath | string | no | Optional file or directory path to write the .eml to. |
Import a raw RFC822 message (.eml content) into a folder via IMAP APPEND. Use to restore a backed-up message or migrate mail from another provider's export. Does not send anything — this only inserts a message directly into the mailbox. Many real .eml exports use a legacy 8-bit charset…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| raw | string | no | Full raw RFC822 message source (the .eml file content) as a UTF-8 string. Use rawBase64 instead for non-UTF-8 content. Exactly one of raw/rawBase64 is required. |
| rawBase64 | string | no | Full raw RFC822 message source (the .eml file content), base64-encoded, for byte-exact import of non-UTF-8 content. Exactly one of raw/rawBase64 is required. |
| targetFolder | string | no | Destination folder. Defaults to INBOX. |
| markAsRead | boolean | no | Set the \Seen flag on import. |
Evict all in-memory caches: folder list, message metadata, and analytics data. Use when cached data appears stale after external mailbox changes (e.g. folders modified via Proton webmail). Does NOT affect the persistent SQLite index — use clear_index for that.
No parameter schema on file.
Delete the entire persistent SQLite mailbox index from disk. Use only to reset a corrupted or schema-incompatible index. After clearing, call sync_emails to rebuild. Irreversible — all indexed metadata and search history is lost. Does NOT clear in-memory caches — use clear_cache for that.
No parameter schema on file.
Return recent in-memory server log entries, filterable by level (debug, info, warn, error). Use to diagnose unexpected tool behavior or connection errors during the current session. Logs are ephemeral and not persisted across server restarts — use get_audit_logs for a persistent audit trail of…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| level | string | no | — |
| limit | number | no | — |
| offset | number | no | Number of records to skip for pagination. |
Return recent entries from the persistent on-disk audit log of all write operations performed by this server. Use to review what mutations (sends, moves, deletes, draft operations) were executed across sessions. Prefer get_logs for debugging in-session behavior and transient connection errors.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | no | — |
| offset | number | no | Number of records to skip for pagination. |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Proton Mail Bridge Client or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | high | capability blast radius (high) — client exposure if the model is manipulated | −6 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. high is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 2.8.6. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Proton Mail Bridge Client can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.