Proton Bridge MCP

Proton Bridge MCP

Enables sending correctly threaded email replies through Proton Mail Bridge using SMTP with proper In-Reply-To and References headers, avoiding IMAP draft pitfalls.

Category
Visit Server

README

Proton Bridge MCP

CLI and MCP server for sending correctly threaded replies through Proton Mail Bridge.

The main lesson encoded here is simple:

  • Use Proton Bridge SMTP with explicit In-Reply-To and References for agent-sent replies.
  • Do not create same-thread reply drafts by IMAP APPEND; Proton Bridge may rewrite those draft headers and the sent email can leave the original conversation.
  • Proton web/app reply composer is also safe because it creates the reply from the existing conversation.

Features

  • Search message headers through Proton Bridge IMAP.
  • Find a thread anchor by sender and subject.
  • Send a threaded reply through Proton Bridge SMTP.
  • Verify sent-message headers.
  • Expose the same operations as MCP tools for coding agents.
  • Sending tools are dry-run by default unless confirm_send is set.

Requirements

  • Python 3.10+
  • Proton Mail Bridge running locally
  • Bridge IMAP enabled, usually 127.0.0.1:1143
  • Bridge SMTP enabled, usually 127.0.0.1:1025

No third-party Python dependencies are required.

Configuration

Set the Bridge account and Bridge mailbox password:

export PROTON_BRIDGE_ACCOUNT="you@example.com"
export PROTON_BRIDGE_PASSWORD="your-bridge-mailbox-password"

PROTON_PW is also accepted for the password if you already use that name.

These are Proton Bridge credentials, not necessarily your Proton web password.

CLI Usage

From the repo root:

python3 -m krantiutils_proton.cli search \
  --from-addr collaborator@example.com \
  --subject-contains "Paper draft" \
  --limit 3

Dry-run a threaded reply to the latest matching incoming message:

python3 -m krantiutils_proton.cli reply-latest \
  --thread-from collaborator@example.com \
  --subject-contains "Paper draft" \
  --to collaborator@example.com \
  --body-file /tmp/reply.txt \
  --attach /tmp/paper.pdf

Actually send only after checking the dry-run output:

python3 -m krantiutils_proton.cli reply-latest \
  --thread-from collaborator@example.com \
  --subject-contains "Paper draft" \
  --to collaborator@example.com \
  --body-file /tmp/reply.txt \
  --attach /tmp/paper.pdf \
  --confirm-send

Verify sent headers:

python3 -m krantiutils_proton.cli verify-sent \
  --to-addr collaborator@example.com \
  --subject-contains "Paper draft" \
  --limit 5

Send a controlled threading test to yourself:

python3 -m krantiutils_proton.cli thread-test \
  --to you+thread-test@example.com \
  --count 3 \
  --confirm-send

MCP Server

Run:

./proton-bridge-mcp

Codex-style config:

[mcp_servers.proton_bridge]
command = "/absolute/path/to/proton-bridge-mcp/proton-bridge-mcp"
env = { PROTON_BRIDGE_ACCOUNT = "you@example.com" }

Set PROTON_BRIDGE_PASSWORD in the environment available to the MCP process.

Available tools:

  • proton_search_headers
  • proton_latest_thread_anchor
  • proton_send_email
  • proton_reply_to_latest
  • proton_verify_sent
  • proton_send_thread_test

Agent Workflow

For a thread-safe reply:

  1. Use proton_latest_thread_anchor to find the latest incoming message in the target thread.
  2. Inspect the returned message_id, in_reply_to, references, sender, and subject.
  3. Dry-run proton_reply_to_latest without confirm_send.
  4. Check recipient, subject, attachment paths, and the generated In-Reply-To/References.
  5. Send only after explicit user approval with confirm_send: true.
  6. Use proton_verify_sent to confirm the sent copy kept thread headers.

Never claim an IMAP-created draft is definitely on the original thread unless the stored draft has the expected In-Reply-To and References headers.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured