Proton Bridge MCP
MCPB · PROTON-BRIDGE-MCP-1.2.2.MCPB · SCANNED AUG 22
Read, organise and carefully-gated send for Proton Mail, without your mail leaving this machine.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score →
Supply Chain Security13
- Malware scan not yet available for this package.Unverified
- Known CVEs could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
- No install/post-install scripts declared.Pass
- Dependency health could not be checked: this artifact ships no SBOM, so there is no dependency list to read. Publishing one would let us assess it.Unverified
Provenance & Transparency23
- Repository check failed: the declared repository URL redirects; it must resolve directly. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (Apache-2.0).Pass
- Actively maintained (last published 10 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability77
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 4116 tokens (~121/item across 34 items; 34 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management37
- Stability observed for 11 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage89
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 66% of tool parameters carry a description.Partial
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
mcpb · proton-bridge-mcp-1.2.2.mcpb
Download bundleEvery change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 21 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Aug 26 −2
- Source repository: pass → fail ▼ security
- Stability: unverified → 0.23 ▲ functional
- 11 Aug 26 43
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 22 Aug 2026 · Analysed mcpb/https://github.com/Considus/proton-bridge-mcp/releases/download/v1.2.2/proton-bridge-mcp-1.2.2.mcpb
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | mcpb |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
ack_folder Acknowledge poll checkpoint ~48
Commit a checkpoint returned by poll_folder with advance=false. Repeating it is harmless.
| Name | Type | Req | Description |
|---|---|---|---|
| checkpoint | string | yes | Exactly as poll_folder reported it. |
| folder | string | – | Default INBOX. |
No output schema declared.
No examples provided.
apply_label Apply a label ~123
Tag a message with an existing label. The message stays where it is.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Source folder, default INBOX. |
| label | string | yes | An existing label. On Proton the Labels/ prefix is optional; elsewhere this is an ordinary mailbox name. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
bulk_apply_label Apply a label in bulk ~120
Apply one existing label to many messages. Messages stay where they are.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview which uids would be affected, change nothing. |
| folder | string | – | Folder the uids belong to. Default INBOX. |
| label | string | yes | An existing label. On Proton the Labels/ prefix is optional; elsewhere this is an ordinary mailbox name. |
| uids | array | yes | Explicit message uids. No wildcards. |
| uidvalidity | string | – | UIDVALIDITY for that folder; refuses on mismatch. |
No output schema declared.
No examples provided.
bulk_delete_labels Delete labels in bulk ~77
Delete several labels in one pass. Messages keep their place and lose the tags. Labels only, GATED.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview each one, including how many messages carry it. Changes nothing. |
| labels | array | yes | Label names. On Proton the Labels/ prefix is optional. |
No output schema declared.
No examples provided.
bulk_mark Mark messages in bulk ~105
Mark many messages read/unread/starred in one pass. Far cheaper than one call per message.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| dry_run | boolean | – | Preview which uids would be affected, change nothing. |
| folder | string | – | Folder the uids belong to. Default INBOX. |
| uids | array | yes | Explicit message uids. No wildcards. |
| uidvalidity | string | – | UIDVALIDITY for that folder; refuses on mismatch. |
No output schema declared.
No examples provided.
bulk_move Move messages in bulk ~120
File or Trash many messages at once. GATED: preview with dry_run=true, show the user, then call with confirmed=true.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | – |
| dry_run | boolean | – | Preview which uids would be affected, change nothing. |
| folder | string | – | Folder the uids belong to. Default INBOX. |
| to_folder | string | yes | – |
| uids | array | yes | Explicit message uids. No wildcards. |
| uidvalidity | string | – | UIDVALIDITY for that folder; refuses on mismatch. |
No output schema declared.
No examples provided.
bulk_remove_label Remove a label in bulk ~130
Take one label off many messages at once. The messages stay where they are. GATED, like remove_label.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview which uids would be affected, change nothing. |
| folder | string | – | Folder the uids belong to. Default INBOX. |
| label | string | yes | The label to take off. On Proton the Labels/ prefix is optional. |
| uids | array | yes | Explicit message uids. No wildcards. |
| uidvalidity | string | – | UIDVALIDITY for that folder; refuses on mismatch. |
No output schema declared.
No examples provided.
create_draft Create a draft ~120
Write a draft into the Proton Drafts folder. Never sends. For a reply, pass in_reply_to (the original Message-ID).
| Name | Type | Req | Description |
|---|---|---|---|
| attach | array | – | Files to attach, by path. Only from the allowed source directories. |
| body | string | yes | – |
| cc | string | – | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| in_reply_to | string | – | – |
| references | string | – | – |
| subject | string | yes | – |
| to | string | yes | – |
No output schema declared.
No examples provided.
create_folder_or_label Create a folder or label ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| kind | string | yes | – |
| name | string | yes | Name only, no 'Labels/' or 'Folders/' prefix. |
No output schema declared.
No examples provided.
delete_draft Delete a draft ~89
Move a draft to Trash. GATED. Nothing here deletes permanently.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Defaults to your Drafts folder. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY of the folder; refuses on mismatch. |
No output schema declared.
No examples provided.
delete_label Delete a label ~104
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview it, including how many messages carry the label. Changes nothing, needs no confirmation. |
| label | string | yes | The label to delete. On Proton the Labels/ prefix is optional. |
No output schema declared.
No examples provided.
find_thread Find a thread ~112
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.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Folder of that uid, default INBOX. |
| subject | string | – | Alternatively match on a subject directly. |
| uid | string | – | A message in the thread (its subject is used). |
No output schema declared.
No examples provided.
folder_status Folder status ~54
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.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Default INBOX. |
No output schema declared.
No examples provided.
forward Forward ~156
Forward an existing message to someone on demand. GATED like send: confirm recipient with the user, then call with confirmed=true.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | yes | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Default INBOX. |
| from_address | string | – | Override the From address (use your alias-owner address when forwarding via an alias reverse-address). |
| note | string | – | Optional note added above the forwarded content. |
| to | string | yes | – |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
get_headers Get message headers ~85
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.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Default INBOX. |
| raw | boolean | – | Return the full raw header block instead. |
| uid | string | yes | – |
| uidvalidity | string | – | – |
No output schema declared.
No examples provided.
list_attachments List attachments ~119
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.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Default INBOX. |
| include_inline | boolean | – | Also list inline images / PGP keys. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
list_folders List folders and labels ~35
List all Proton folders and labels available over the Bridge. Call this first to learn exact folder/label names for filing and tagging.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
mark Mark a message ~95
Mark a message read/unread or star/unstar.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Default INBOX. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
move_to_folder Move to folder ~114
File a message: move it into another folder (e.g. 'Folders/<name>', 'Archive', 'Trash').
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Source folder, default INBOX. |
| to_folder | string | yes | – |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
poll_folder Poll for new mail ~98
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.
| Name | Type | Req | Description |
|---|---|---|---|
| advance | boolean | – | Default true. Set false to look without committing, then confirm with ack_folder. |
| folder | string | – | Default INBOX. |
| limit | integer | – | Most per call, 1 to 100 (default 20). |
No output schema declared.
No examples provided.
purge_attachments Delete saved attachments ~49
Immediately delete all ephemeral saved attachments. Call after reading a saved file so nothing lingers on disk.
| Name | Type | Req | Description |
|---|---|---|---|
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
No output schema declared.
No examples provided.
read_attachment Read an attachment ~118
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.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | Which attachment (partial match OK). Optional if there is only one. |
| folder | string | – | Default INBOX. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
read_message Read a message ~74
Read the full headers and body text of one message by uid within a folder.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Default INBOX. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
remove_label Remove a label ~154
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Folder the message lives in, default INBOX. |
| label | string | yes | The label to take off. On Proton the Labels/ prefix is optional. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
reply Reply ~245
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.
| Name | Type | Req | Description |
|---|---|---|---|
| attach | array | – | Files to attach, by path. Only from the allowed source directories. |
| body | string | yes | Your reply text. The original is quoted beneath unless quote=false. |
| confirmed | boolean | – | Required to actually send. Not needed when draft=true. |
| draft | boolean | – | Save to Drafts instead of sending. Needs no confirmation because nothing goes out. |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Folder holding the message. Default INBOX. |
| from_address | string | – | Must be on the sender allowlist. Left unset, alias mail automatically uses the alias-owner address. |
| quote | boolean | – | Quote the original beneath your reply. Default true. |
| subject | string | – | Override the auto 'Re: ...' subject. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY for that folder; refuses on mismatch. |
No output schema declared.
No examples provided.
reply_all Reply to all ~233
Reply to everyone on a message, with your own addresses removed from Cc and duplicates dropped. Same draft and confirmation rules as reply.
| Name | Type | Req | Description |
|---|---|---|---|
| attach | array | – | Files to attach, by path. Only from the allowed source directories. |
| body | string | yes | Your reply text. The original is quoted beneath unless quote=false. |
| confirmed | boolean | – | Required to actually send. Not needed when draft=true. |
| draft | boolean | – | Save to Drafts instead of sending. Needs no confirmation because nothing goes out. |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Folder holding the message. Default INBOX. |
| from_address | string | – | Must be on the sender allowlist. Left unset, alias mail automatically uses the alias-owner address. |
| quote | boolean | – | Quote the original beneath your reply. Default true. |
| subject | string | – | Override the auto 'Re: ...' subject. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY for that folder; refuses on mismatch. |
No output schema declared.
No examples provided.
save_attachment Save an attachment ~194
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.
| Name | Type | Req | Description |
|---|---|---|---|
| dest_dir | string | – | Sub-path under the attachments dir. Writes outside it are refused. |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| filename | string | – | Partial match; omit to save all documents. |
| folder | string | – | Default INBOX. |
| include_inline | boolean | – | – |
| persist | boolean | – | Keep the file permanently. Default false = auto-deleted after the TTL so nothing lingers for the user to open by accident. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
No output schema declared.
No examples provided.
search_all_mail Search all mail ~122
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.
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | DD-Mon-YYYY. Combine with since for a date range. |
| flagged_only | boolean | – | – |
| from | string | – | – |
| limit | integer | – | Most recent N (default 25). |
| since | string | – | DD-Mon-YYYY. |
| subject | string | – | – |
| text | string | – | – |
| unread_only | boolean | – | – |
No output schema declared.
No examples provided.
search_mail Search a folder ~252
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.
| Name | Type | Req | Description |
|---|---|---|---|
| before | string | – | DD-Mon-YYYY. Combine with since for a date range. |
| flagged_only | boolean | – | – |
| folder | string | – | Folder to search, e.g. INBOX, 'All Mail', 'Folders/<name>'. Default INBOX. |
| from | string | – | – |
| include_locations | boolean | – | Report every other mailbox each message appears in, so you can tell what it is already labelled or filed as without a second search. Costs one search per mailbox. |
| limit | integer | – | Max results (default 15). |
| since | string | – | DD-Mon-YYYY, e.g. 01-Jul-2026 |
| subject | string | – | – |
| text | string | – | – |
| uidvalidity | string | – | UIDVALIDITY reported alongside the uid. Pass it back so a mailbox resync cannot make this act on the wrong message. |
| unread_only | boolean | – | – |
No output schema declared.
No examples provided.
send Send mail ~198
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.
| Name | Type | Req | Description |
|---|---|---|---|
| attach | array | – | Files to attach, by path. Only from the allowed source directories. |
| body | string | yes | – |
| cc | string | – | – |
| confirmed | boolean | yes | Must be true; set only after the user approves this exact message. |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| from_address | string | – | Override the From address. For replies to a SimpleLogin alias, set this to your alias-owner address (PROTON_ALIAS_FROM) and send 'to' the reverse-alias from the message's Reply-To header. |
| in_reply_to | string | – | – |
| references | string | – | – |
| subject | string | yes | – |
| to | string | yes | – |
No output schema declared.
No examples provided.
send_draft Send a draft ~101
Send a saved draft as written, then move it to Trash. GATED. Sender and recipient checks run again at send time.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Defaults to your Drafts folder. |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY of the folder; refuses on mismatch. |
No output schema declared.
No examples provided.
unsubscribe Unsubscribe ~112
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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmed | boolean | – | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Default INBOX. |
| send | boolean | – | Actually send the mailto: unsubscribe. Requires confirmed. |
| uid | string | yes | – |
| uidvalidity | string | – | – |
No output schema declared.
No examples provided.
update_draft Update a draft ~169
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.
| Name | Type | Req | Description |
|---|---|---|---|
| attach | array | – | Files to attach, by path. Only from the allowed source directories. |
| body | string | – | – |
| cc | string | – | – |
| dry_run | boolean | – | Preview exactly what would happen and change nothing. Needs no confirmation. |
| folder | string | – | Defaults to your Drafts folder. |
| from_address | string | – | Must be on the sender allowlist. |
| subject | string | – | – |
| to | string | – | – |
| uid | string | yes | – |
| uidvalidity | string | – | UIDVALIDITY of the folder; refuses on mismatch. |
No output schema declared.
No examples provided.
view_attachment View an image attachment ~93
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.
| Name | Type | Req | Description |
|---|---|---|---|
| filename | string | – | Which image; partial match is fine. |
| folder | string | – | Default INBOX. |
| uid | string | yes | – |
| uidvalidity | string | – | – |
No output schema declared.
No examples provided.