proton-bridge-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PROTON_MODE | No | Operation mode: 'readonly', 'organise', or 'full'. Removes tools not allowed in that mode. | |
| PROTON_AUDIT | No | Set to '0' to disable audit logging. | |
| PROTON_AUDIT_LOG | No | Path to the audit log file. Overrides default location. | |
| PROTON_ATTACH_DIR | No | Directory where saved attachments are written. Overrides default location. | |
| PROTON_STATE_FILE | No | Path to the state file that stores polling cursors and rate counters. Overrides default location. | |
| PROTON_ALLOWED_SENDERS | No | Additional from addresses allowed when sending, beyond your own and alias owner address. | |
| PROTON_ALLOWED_RECIPIENTS | No | Additional recipient addresses allowed for sending, beyond those found in message headers. Useful for manually allowing addresses from untrusted content. | |
| PROTON_TLS_INSECURE_HOSTS | No | Comma-separated hostnames for which TLS certificate verification is skipped. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_foldersA | List all Proton folders and labels available over the Bridge. Call this first to learn exact folder/label names for filing and tagging. Pass folder to get that folder's message counts plus UIDNEXT and UIDVALIDITY instead: UIDs are only valid within one UIDVALIDITY generation, so check it before acting on uids noted earlier. |
| poll_folderA | Messages that have arrived since the last poll. The very first poll emits nothing and just records where the mailbox ends, so turning this on does not replay the backlog. Marks nothing as read. Pass commit to commit a checkpoint an advance=false poll returned; repeating that is harmless. |
| search_mailA | Search a folder. Combine any of: text, from, subject, since (DD-Mon-YYYY), unread_only, flagged_only. Returns uids + envelopes, newest first. With no filters it lists the newest messages in the folder. Set include_locations to also report which labels and folders each message carries. Set all_folders to search every mailbox at once when you do not know where something is: duplicates collapse by Message-ID and each row says where the message lives. |
| get_headersA | Headers plus SPF/DKIM/DMARC verdicts and Proton metadata, for judging whether a message is what it claims to be. Pass raw=true for the unparsed header block. |
| read_messageA | Read the full headers and body text of one message by uid within a folder. |
| list_attachmentsA | List a message's attachments, separating real DOCUMENTS from inline cid: images and PGP keys (hidden by default). Call before claiming a message has no attachment — read_message shows body text only and never reveals files. |
| read_attachmentA | Read an attachment inline. Text comes back as text: PDFs via pypdf, plus text/csv/json/ics/eml, for invoices, decks, reports. An image comes back as a viewable image, the only way to see a photo or a scan when the client cannot read local files. Other binary types must use save_attachment instead. |
| save_attachmentA | Write attachment(s) to disk and return the path(s). Use for images, scanned PDFs, or anything not text-extractable. EPHEMERAL by default — files self-delete after the TTL. |
| purge_attachmentsA | Immediately delete all ephemeral saved attachments. Call after reading a saved file so nothing lingers on disk. |
| find_threadA | Pull every message of a conversation from All Mail, showing which ones carry documents. ESSENTIAL: Proton's UI groups conversations but IMAP exposes single messages, so an inbox 'Re:' can look attachment-free while the thread's original holds the PDFs. Run this before concluding what a thread needs. |
| replyA | Reply to one message with correct threading. Replies to the Reply-To address when there is one, so alias mail stays masked. Pass all=true to reply to everyone, with your own addresses removed from Cc and duplicates dropped. Pass draft=true to save it for review, or confirmed=true to send. |
| create_draftA | Write a draft into the Proton Drafts folder. Never sends. For a reply, pass in_reply_to (the original Message-ID). |
| update_draftA | Replace a draft's contents. Threading headers are carried over, the new version is saved before the old one is binned. Omit a field to keep what the draft already had. |
| delete_draftA | Move a draft to Trash. GATED. Nothing here deletes permanently. |
| send_draftA | Send a saved draft as written, then move it to Trash. GATED. Sender and recipient checks run again at send time. |
| unsubscribeA | Report how to unsubscribe from a message using its List-Unsubscribe header, and optionally send the email form. Reports only unless send=true. Web links are never fetched for you. |
| markA | Mark one message (uid) or many in one pass (uids) read/unread or star/unstar. |
| apply_labelA | Tag one message (uid) or many (uids) with an existing label. Messages stay where they are. |
| remove_labelA | Take a label off one message (uid) or many (uids). The messages stay where they are. GATED: removing a label ends in an expunge against the label mailbox, so confirm it or preview with dry_run=true first. |
| move_to_folderA | File one message (uid) or many (uids): move it into another folder (e.g. 'Folders/', 'Archive', 'Trash'). Many at once is GATED: preview with dry_run=true, show the user, then call with confirmed=true. |
| create_folder_or_labelA | Create a new label or folder. GATED: it changes your folder and label structure, so confirm the exact name and type with the user, then call with confirmed=true. |
| rename_folder_or_labelA | Rename a folder or label where it stands: a label stays a label and a folder keeps its parent. INBOX and the special mailboxes (Sent, Drafts, Trash, Spam, Archive, All Mail) are refused. GATED: confirm the old and new names with the user, then call with confirmed=true. |
| delete_labelA | Delete a label outright. Every message that carried it stays exactly where it is and simply loses the tag — no mail is deleted. Labels only; folders are where messages live and are not deletable here. Pass label for one or labels for several. GATED. |
| sendA | Send a new email. GATED: the agent must show the user the exact To/Subject/Body, get an explicit yes, then call with confirmed=true. Never call unattended. |
| forwardA | Forward an existing message to someone on demand. GATED like send: confirm recipient with the user, then call with confirmed=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 25 tools
Most tools target a distinct resource-action pair, and the descriptions make boundaries clear (e.g., apply_label vs. remove_label vs. delete_label; read_message vs. get_headers). The few potentially confusable areas are sending pathways (send, send_draft, reply, forward) and attachment handling (list_attachments, read_attachment, save_attachment), but each has a clear stated role.
Names are consistently snake_case and mostly follow verb_noun form (list_folders, read_message, create_draft, move_to_folder). A handful use single verbs (send, forward, reply, mark, unsubscribe), which is readable and conventional but slightly less uniform than the rest.
The 25-tool surface covers a broad email client domain, but it sits at the heavy end for an MCP server and includes several operations that could plausibly be consolidated (label/folder management, attachment lifecycle). Each tool has a reason to exist, yet the set feels large rather than tightly scoped.
Coverage is strong across reading, searching, threading, labels/folders, drafts, sending, forwarding, replying, attachments, marking, and unsubscribe flows. Minor gaps remain, notably no folder deletion and no permanent message deletion or empty-trash operation, only moves to Trash.