Full-featured CLI and Claude Desktop MCP for Proton Mail via Proton Bridge. Read, search, send, draft, archive, manage folders, and more.
Strong tool definitions with complete schemas and detailed descriptions. All 5 tools have clear action verbs, comprehensive parameter documentation, and structured output. Key strengths: tool annotations present (destructiveHint), explicit irreversibility marking, and well-documented parameter constraints. Weaknesses: missing output schema documentation, some parameter descriptions lack detailed constraint information, and several tools lack explicit error recovery guidance. The descriptions are appropriately detailed (150-300 chars), well above the 10-char minimum. Parameter types are fully specified with enums where appropriate. However, return structures are not formally documented, and some parameter interdependencies (e.g., how markdownBody interacts with body/isHtml) require implicit understanding.
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.
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 auto-fetches unsubscribe URLs).
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 for cancel_send if it was lost with the conversation. Message bodies are shortened and HTML/attachments omitted.
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 is unreachable. If PROTONMAIL_SEND_DELAY_SECONDS is set, this queues the send instead of sending immediately and returns a cancelable id — call cancel_send within the window to abort. Otherwise returns delivery confirmation immediately.
Missing output schema documentation for all tools. While input schemas are complete and well-typed, return structures are not formally documented. LLMs must infer response formats from descriptions rather than having explicit schemas. This makes it harder for agents to plan downstream actions and extract required fields for tool chaining.
Limited error recovery guidance. Tool descriptions identify failure modes (e.g., 'Fails if PROTONMAIL_ALLOW_SEND is false') but do not guide the agent on recovery steps. Missing actionable error messages like 'If Bridge SMTP is unreachable, check that the Proton Bridge daemon is running and accessible at the configured address.'
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2025-06-18+ | v2 |
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 never auto-fetches unsubscribe URLs, to avoid firing an unreviewed request from mail).
Parameter interdependencies not fully documented. In send_email, the interaction between body, markdownBody, and isHtml is described but the precedence rules require careful reading. Similarly, the relationship between PROTONMAIL_SEND_DELAY_SECONDS (server config) and undoWindowSeconds (per-call override) is implicit. These should be explicitly stated as 'markdownBody takes precedence; if provided, body and isHtml are ignored.'
Dry-run and confirmation patterns present but not fully leveraged. send_email supports dryRun and confirmed flags, which is excellent for destructive operations. However, unsubscribe_sender lacks a dry-run option, making it harder for agents to preview unsubscribe actions before executing them.
Parameter constraint descriptions could be more machine-readable. While constraints are documented in descriptions (e.g., 'newest first, 50 per page'), formalizing these as JSON Schema constraints (minimum, maximum, pattern, enum) would make them parseable by validation tools and reduce parsing ambiguity for LLMs.