proton-bridge-mcp
This server provides read-only access to your Proton Mail account via Proton Mail Bridge using IMAP.
list_mailboxes — Retrieve all available mail folders/mailboxes (e.g., INBOX, Sent, Archive).
list_messages — List recent messages in a specified mailbox (defaults to INBOX), newest first, with a configurable limit (1–100, default 20).
search_messages — Search within a mailbox (defaults to INBOX) by sender, subject, or body text, with a configurable result limit (1–100, default 20).
get_message — Fetch the full parsed content (text/html body) of a single email by its UID from a specified mailbox (defaults to INBOX).
Provides tools for reading and searching Proton Mail messages through the Proton Mail Bridge.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@proton-bridge-mcplist my unread emails from today"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
proton-bridge-mcp (Python wrapper)
A pip/uvx-installable wrapper around proton-bridge-mcp, an MCP server for reading and searching Proton Mail via Proton Mail Bridge.
This package contains no Python implementation. It's a thin shim that execs into the real Node.js implementation via npx. It exists so Python-oriented MCP tooling (uvx, pipx, pip install) can install and run it without needing to know it's Node underneath.
Unofficial, community project. Not affiliated with or endorsed by Proton AG.
Requirements
Node.js 18+ must be installed and on
PATH(specificallynpx). This wrapper cannot function without it — there is no pure-Python fallback.A Proton Mail plan that supports Bridge, with Proton Mail Bridge running
Related MCP server: proton-mail-mcp
Install
pip install proton-bridge-mcp
# or
uvx proton-bridge-mcpSetup
Run the interactive setup wizard once (fetches and pins Bridge's TLS certificate, verifies login, writes credentials to ~/.config/proton-bridge-mcp/, chmod 600):
proton-bridge-mcp-setupRegister with an MCP client
Claude Code:
claude mcp add proton-mail -s user -- proton-bridge-mcpClaude Desktop / other MCP clients:
{
"mcpServers": {
"proton-mail": {
"command": "proton-bridge-mcp"
}
}
}Codex CLI:
Tested end-to-end against Codex CLI 0.146.0 via uvx, with a real Bridge connection and real tool calls. MCP support is behind an under-development feature flag as of 0.146.0 — enable it once:
codex features enable mcp_2026_07_28Then register the server:
codex mcp add proton-mail -- uvx proton-bridge-mcpuvx resolves and caches per exact version, so (unlike a bare npx invocation of the underlying npm package) it isn't at risk of silently picking up a stale global install — no version pinning needed here. All four tools are read-only IMAP calls and carry readOnlyHint annotations, so they run in both interactive codex and non-interactive codex exec without an approval prompt.
Note this wrapper always execs into whatever npm tag is latest for the underlying @alpharomercoma/proton-bridge-mcp package — see that repo's README for the one caveat that does apply if you've separately run npm install -g on the same machine.
Why does this exist separately from the npm package?
The actual server (list_mailboxes, list_messages, search_messages, get_message tools; TLS certificate pinning instead of disabled verification; the setup wizard) lives entirely in the Node.js project: https://github.com/alpharomercoma/proton-bridge-mcp. That's the canonical implementation, source of truth for behavior, and where issues/PRs about actual functionality belong. This repo only exists to make it reachable from pip/uvx workflows.
License
MIT — see LICENSE.
Available Tools
4 toolsget_messageGet message contentB
Fetch the full parsed content (text/html body) of a single message by UID.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| mailbox | No | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. 'Fetch' implies a read operation, but the description does not address potential side effects (e.g., marking the message as read), authentication requirements, rate limits, or error behavior. This is a significant gap for a tool that accesses message content.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, tightly-worded sentence that conveys the core purpose without any filler. It is front-loaded with the verb and resource, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and no annotations, the description leaves important gaps: it doesn't describe the return format beyond 'parsed content', doesn't clarify the mailbox parameter, and offers no usage context. The simplicity of the tool raises the bar for clarity, and this description falls short of being fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It mentions 'by UID', which references the uid parameter, but does not explain the mailbox parameter (default INBOX) or clarify the format/scope of UID. The description adds minimal semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Fetch') and resource ('single message'), clearly distinguishing the tool from siblings that list or search messages. The qualifiers 'full parsed content' and 'by UID' make the function unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is provided about when to use this tool versus alternatives like list_messages or search_messages. The description implies that a UID is needed, but it doesn't state that users should first list or search to obtain a UID, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_mailboxesList mailboxesA
List all mail folders/mailboxes available on the Proton Mail account via Bridge.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the operation is to list all mailboxes, which is inherently read-only, but it does not disclose any additional behavioral details such as return format or whether system folders are included. This is acceptable for a simple listing tool but lacks extra context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no filler. It is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (zero parameters, no output schema), the description is complete enough to convey its purpose. It slightly lacks detail on what exactly is returned, but for a list operation this is not a critical gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the baseline for zero parameters is 4. The description adds no parameter details, but none are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action ('List') on a specific resource ('mail folders/mailboxes') with a defined scope ('available on the Proton Mail account via Bridge'). This clearly distinguishes it from sibling tools that operate on messages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool (to enumerate mail folders) and the resource is distinct from message-related siblings. However, it does not explicitly mention alternatives or exclusions, though the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_messagesList recent messagesA
List the most recent messages in a mailbox (default INBOX), newest first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| mailbox | No | Mailbox path, e.g. INBOX, Archive, Sent | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description provides some behavioral context (default mailbox, newest-first order) but does not disclose other traits such as pagination, return format, or whether messages are marked as read. The 'list' verb implies read-only, but that is not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the core purpose with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with two optional parameters and no output schema. The description covers the core purpose but omits details about the return structure and pagination behavior. It is minimally complete but not rich.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes the mailbox parameter but not limit. The description repeats the INBOX default but does not explain the limit parameter's semantics (e.g., maximum number of items). Since schema coverage is 50%, the description fails to compensate for the missing limit documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists recent messages in a mailbox, defaulting to INBOX, sorted newest first. It distinctly differentiates from sibling tools like list_mailboxes and get_message.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when recent messages are needed, but does not explicitly mention alternatives or when not to use (e.g., search_messages for queries). No exclusion guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_messagesSearch messagesA
Search a mailbox by sender, subject, or body text.
| Name | Required | Description | Default |
|---|---|---|---|
| from | No | Filter by sender address/name substring | |
| text | No | Filter by full text (body) substring | |
| limit | No | ||
| mailbox | No | INBOX | |
| subject | No | Filter by subject substring |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of disclosing behavior. It states the searchable fields but does not disclose how matching works (e.g., substring vs exact, case sensitivity), whether filters combine with AND/OR, pagination behavior, ordering, or any other runtime characteristics. This is a significant gap for a search tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that is front-loaded with the verb 'search' and clearly states the key attributes. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has moderate complexity with 5 parameters and no output schema or annotations. The description covers the basic search intent but omits details on return format, filter combination logic, and default behavior of limit and mailbox. It is adequate for basic use but lacks important contextual details for an agent to fully anticipate behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for from, text, and subject, covering 60% of parameters. The description adds marginal value by grouping these into 'sender, subject, or body text', but it does not explain semantics for limit or mailbox, which have defaults but no descriptions in the schema. The description does not compensate for the incomplete parameter coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'search' with a clear resource 'a mailbox' and names the searchable attributes (sender, subject, body text). It clearly distinguishes the tool from sibling tools like list_messages and get_message, which list or fetch messages rather than filter by arbitrary fields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used for searching a mailbox, which provides clear context. However, it does not explicitly state when to use this tool versus alternatives like list_messages or get_message, nor does it mention exclusions or prerequisites. Usage guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v1.0.0- First observed
get_message - First observed
list_mailboxes - First observed
list_messages - First observed
search_messages
TDQS
Scored across 4 tools
Each tool has a clearly distinct role: listing mailboxes, listing messages, searching messages, and fetching a single message. No overlap or ambiguity between them.
All tool names follow a consistent verb_noun pattern (list_mailboxes, list_messages, search_messages, get_message) with uniform snake_case style.
Four tools is well-scoped for a read-only email client, covering the core needs without unnecessary bloat or unclear additions.
The tool set covers the primary read operations (list, search, get) but lacks write operations like send, delete, or mark as read, which are expected in a full email workflow.
Maintenance
Related MCP Connectors
Your mailbox for MCP clients: search, read, draft, send, rules and notes. Sending is off by default.
MCP server for MailTempo's public free temporary email inboxes.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
A MCP server for Gmail that lets you search, read, and draft emails and replies.
Related MCP Servers
- AlicenseAqualityDmaintenanceA read-only MCP server that connects to Proton Mail via Proton Bridge, enabling AI assistants to search, list, and read emails securely without leaving your machine.423 npm1MIT
- AlicenseAqualityCmaintenanceUnofficial MCP server for Proton Mail (not affiliated with Proton AG) — send, read, search & organize email over SMTP/IMAP3158 npm6MIT
- AlicenseAqualityCmaintenanceMCP server for reading, searching, and sending ProtonMail emails via the ProtonMail Bridge.162GPL 3.0
- AlicenseAqualityBmaintenanceAn MCP server that enables AI assistants to read and search Proton Mail messages through a locally running Proton Mail Bridge. It provides tools like list_folders, list_messages, search_messages, get_message, and get_attachment.611 npmMIT