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. |
| folder_statusA | Message counts plus UIDNEXT and UIDVALIDITY for a folder. UIDs are only valid within one UIDVALIDITY generation, so check this 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. |
| ack_folderA | Commit a checkpoint returned by poll_folder with advance=false. Repeating it 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. Set include_locations to also report which labels and folders each message carries. |
| search_all_mailA | Search every mailbox at once and collapse duplicates by Message-ID, reporting where each message lives. Use when you do not know which folder something is in. |
| 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 | Extract an attachment's TEXT inline — PDFs via pypdf, plus text/csv/json/ics/eml. Use for invoices, decks, reports. Binary/image types must use save_attachment instead. |
| view_attachmentA | Look at an image attachment. Returns it as a viewable image, which is the only way to see a photo or a scan when the client cannot read local files. Images only, use read_attachment for text and PDFs. |
| 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. |
| bulk_markA | Mark many messages read/unread/starred in one pass. Far cheaper than one call per message. |
| bulk_apply_labelA | Apply one existing label to many messages. Messages stay where they are. |
| bulk_moveA | File or Trash many messages at once. GATED: preview with dry_run=true, show the user, then call with confirmed=true. |
| replyA | Reply to one message with correct threading. Replies to the Reply-To address when there is one, so alias mail stays masked. Pass draft=true to save it for review, or confirmed=true to send. |
| reply_allA | Reply to everyone on a message, with your own addresses removed from Cc and duplicates dropped. Same draft and confirmation rules as reply. |
| 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 a message read/unread or star/unstar. |
| apply_labelA | Tag a message with an existing label. The message stays where it is. |
| remove_labelA | Take a label off a message. The message itself stays where it is. GATED: removing a label ends in an expunge against the label mailbox, so confirm it or preview with dry_run=true first. |
| bulk_remove_labelA | Take one label off many messages at once. The messages stay where they are. GATED, like remove_label. |
| move_to_folderA | File a message: move it into another folder (e.g. 'Folders/', 'Archive', 'Trash'). |
| 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. |
| 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. GATED. |
| bulk_delete_labelsA | Delete several labels in one pass. Messages keep their place and lose the tags. Labels only, 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 | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ConsidusOld/proton-bridge-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server