原型 · 预览版:收录官方注册中心里的全部服务器,每 30 分钟同步一次。评价和账户功能将在后续阶段推出。
PopNx MCP为使用 AI 的人准备的 MCP 服务器 · 用大白话讲清楚

Proton Mail (unofficial)

作者:sethbang版本 1.0.2i★ –i在你的电脑上运行
注册名称io.github.sethbang/proton-mail-mcp

安装

概览

作者提供的说明(英文原文)

Unofficial Proton Mail MCP — send, read, search & organize email over SMTP and IMAP

PopNx MCP 的三大支柱

这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。

它能帮你做什么

我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。

  • 连接方式: 在你的电脑上运行
  • 传输方式: stdio
  • 分类: 聊天与邮件
  • 你需要填写:PROTONMAIL_USERNAME, PROTONMAIL_PASSWORD, IMAP_PASSWORD

安装

选择你使用的 AI 应用,然后复制设置。

安装之前

  • 基础检查:1 项中通过 1 项
  • 在你的电脑上运行,拥有你的用户账户的权限(文件、网络、应用)。
  • 需要你自己填写: PROTONMAIL_USERNAME, PROTONMAIL_PASSWORD, PROTONMAIL_HOST, PROTONMAIL_PORT, PROTONMAIL_SECURE, IMAP_HOST, IMAP_PORT, IMAP_SECURE, IMAP_USERNAME, IMAP_PASSWORD, READONLY, RESTRICT_OUTBOUND_TO_SELF, ALLOW_FILE_DOWNLOAD_DIR, ALLOW_EMPTY_FOLDER, DEBUG

标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。

你需要

  • npm已安装 Node.js(用于 npx 命令)

你用的是哪个应用?

在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。

打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json

{
  "mcpServers": {
    "proton-mail": {
      "command": "npx",
      "args": [
        "-y",
        "proton-mail-mcp"
      ],
      "env": {
        "PROTONMAIL_USERNAME": "your-value",
        "PROTONMAIL_PASSWORD": "your-value",
        "PROTONMAIL_HOST": "your-value",
        "PROTONMAIL_PORT": "your-value",
        "PROTONMAIL_SECURE": "your-value",
        "IMAP_HOST": "your-value",
        "IMAP_PORT": "your-value",
        "IMAP_SECURE": "your-value",
        "IMAP_USERNAME": "your-value",
        "IMAP_PASSWORD": "your-value",
        "READONLY": "your-value",
        "RESTRICT_OUTBOUND_TO_SELF": "your-value",
        "ALLOW_FILE_DOWNLOAD_DIR": "your-value",
        "ALLOW_EMPTY_FOLDER": "your-value",
        "DEBUG": "your-value"
      }
    }
  }
}

在终端中运行这条命令

claude mcp add proton-mail --env PROTONMAIL_USERNAME=your-value --env PROTONMAIL_PASSWORD=your-value --env PROTONMAIL_HOST=your-value --env PROTONMAIL_PORT=your-value --env PROTONMAIL_SECURE=your-value --env IMAP_HOST=your-value --env IMAP_PORT=your-value --env IMAP_SECURE=your-value --env IMAP_USERNAME=your-value --env IMAP_PASSWORD=your-value --env READONLY=your-value --env RESTRICT_OUTBOUND_TO_SELF=your-value --env ALLOW_FILE_DOWNLOAD_DIR=your-value --env ALLOW_EMPTY_FOLDER=your-value --env DEBUG=your-value -- npx -y proton-mail-mcp

运行前请先填写空着的值。

在 Cursor 中打开

或者自己复制设置

粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json

{
  "mcpServers": {
    "proton-mail": {
      "command": "npx",
      "args": [
        "-y",
        "proton-mail-mcp"
      ],
      "env": {
        "PROTONMAIL_USERNAME": "your-value",
        "PROTONMAIL_PASSWORD": "your-value",
        "PROTONMAIL_HOST": "your-value",
        "PROTONMAIL_PORT": "your-value",
        "PROTONMAIL_SECURE": "your-value",
        "IMAP_HOST": "your-value",
        "IMAP_PORT": "your-value",
        "IMAP_SECURE": "your-value",
        "IMAP_USERNAME": "your-value",
        "IMAP_PASSWORD": "your-value",
        "READONLY": "your-value",
        "RESTRICT_OUTBOUND_TO_SELF": "your-value",
        "ALLOW_FILE_DOWNLOAD_DIR": "your-value",
        "ALLOW_EMPTY_FOLDER": "your-value",
        "DEBUG": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

在 VS Code 中打开

或者自己复制设置

粘贴到项目中的 .vscode/mcp.json

{
  "servers": {
    "proton-mail": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "proton-mail-mcp"
      ],
      "env": {
        "PROTONMAIL_USERNAME": "your-value",
        "PROTONMAIL_PASSWORD": "your-value",
        "PROTONMAIL_HOST": "your-value",
        "PROTONMAIL_PORT": "your-value",
        "PROTONMAIL_SECURE": "your-value",
        "IMAP_HOST": "your-value",
        "IMAP_PORT": "your-value",
        "IMAP_SECURE": "your-value",
        "IMAP_USERNAME": "your-value",
        "IMAP_PASSWORD": "your-value",
        "READONLY": "your-value",
        "RESTRICT_OUTBOUND_TO_SELF": "your-value",
        "ALLOW_FILE_DOWNLOAD_DIR": "your-value",
        "ALLOW_EMPTY_FOLDER": "your-value",
        "DEBUG": "your-value"
      }
    }
  }
}

浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。

这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。

你的选择通过 Cookie 保存在这台设备上,无需账户。

需要你填写的值

  • PROTONMAIL_USERNAME 必填 env
    Your Proton Mail email address
  • PROTONMAIL_PASSWORD 机密 必填 env
    Your Proton Mail SMTP password (not your login password; generate one in Proton settings)
  • PROTONMAIL_HOST env
    SMTP host
  • PROTONMAIL_PORT env
    SMTP port
  • PROTONMAIL_SECURE env
    Use TLS for SMTP (true for port 465)
  • IMAP_HOST env
    Proton Mail Bridge IMAP host (required for read/search tools)
  • IMAP_PORT env
    Proton Mail Bridge IMAP port
  • IMAP_SECURE env
    Use TLS for IMAP
  • IMAP_USERNAME env
    Proton Mail Bridge username (falls back to PROTONMAIL_USERNAME)
  • IMAP_PASSWORD 机密 env
    Proton Mail Bridge password (falls back to PROTONMAIL_PASSWORD)
  • READONLY env
    Disable all mutating tools (send, move, delete, flags, labels, bulk ops, folder/label management)
  • RESTRICT_OUTBOUND_TO_SELF env
    Refuse live sends to any recipient other than PROTONMAIL_USERNAME (for throwaway/QA accounts)
  • ALLOW_FILE_DOWNLOAD_DIR env
    Allowlist directory enabling download_attachment.saveTo; when unset, attachments return as inline base64
  • ALLOW_EMPTY_FOLDER env
    Register the empty_folder tool (not recommended)
  • DEBUG env
    Enable verbose logging to stderr

这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。

它能做什么

它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。

基础检查i

我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日

  • ✓ 通过

    作者与仓库一致

    注册名称已通过 GitHub 账户 sethbang 验证,该账户拥有此仓库

  • … 尚未检查

    仍在维护

    我们还没有从 GitHub 读取这个仓库

  • … 尚未检查

    有许可证

    我们还没有从 GitHub 读取这个仓库

  • – 不适用

    端点有响应

    它在你的电脑上运行,没有互联网端点

  • – 不适用

    使用 OAuth 登录

    在你的电脑上运行,改用本地设置

  • … 尚未检查

    工具描述中没有隐藏指令

    它在你的电脑上运行;我们只能读取互联网端点的工具列表

与“聊天与邮件”中的其他服务器比较i

  • 星标数多于此分类中其他 1858 个服务器的 0%
  • 发布到注册中心的时间比此分类中其他 1858 个服务器的 11% 更新
  • 基础检查结果等于或优于此分类中其他 1858 个服务器的 100%

与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。

常见问题

Proton Mail (unofficial) 安全吗?

它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。

它需要哪些密钥或代码?

你需要填写:PROTONMAIL_USERNAME, PROTONMAIL_PASSWORD, IMAP_PASSWORD

它在我的电脑上运行还是在云端?

它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。

它还在维护吗?

GitHub 仓库最后更新于–,最新版本(1.0.2)于5个月前进入注册中心。

哪些应用可以使用它?

支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。

有什么可以替代它?

同一分类中有:Vexa, emailmd, MCP WhatsApp Cloud

替代选择

同一分类中其他作者的服务器,按星标数排序。

如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i

Vexa

Meeting bot and transcripts for Google Meet, Teams and Zoom. Live or after, speakers labelled.

作者:Vexa-ai广泛使用★ 29492个月前更新

在云端运行✓ vexa.ai

emailmd

Render markdown into email-safe HTML, lint drafts for deliverability problems, and preview emails.

作者:anypost正在增长↓ 5342/周★ 138533天前更新

电脑或云端✓ emailmd.dev

MCP WhatsApp Cloud

MCP server for WhatsApp Cloud API (Meta) — messages, media, and templates via Graph API

作者:codespar起步阶段↓ 63/周★ 2775个月前更新

在你的电脑上运行

作者的 README

打开 README

按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。

Proton Mail MCP Server

A Model Context Protocol (MCP) server that gives AI assistants full access to your Proton Mail account -- send, read, search, and organize email over SMTP and IMAP.

⚠️ Unofficial — not affiliated with Proton. This is an independent, community-built project. It is not developed, endorsed, sponsored, or supported by Proton AG. "Proton", "Proton Mail", and "Proton Mail Bridge" are trademarks of Proton AG, used here only to describe interoperability. It talks to Proton Mail over the standard SMTP submission endpoint and the locally-run Proton Mail Bridge; no Proton private API is used. Use at your own risk.

Demo

Features

  • Send, reply, and forward email via Proton Mail SMTP with threading headers; dedicated reply_all_email tool
  • Markdown bodies -- pass markdownBody to send_email / reply_email / reply_all_email / forward_email; rendered to HTML with a plain-text fallback
  • Read email via IMAP through Proton Mail Bridge
  • Attachments -- send files (base64), download to memory or to disk (saveTo + ALLOW_FILE_DOWNLOAD_DIR), forward a subset by part number
  • Search messages by sender, recipient, subject, body, date, flags, size, List-ID, attachment presence, attachment name (substring), and attachment MIME type
  • Organize -- move, delete, and flag/unflag messages individually or in bulk; bulk-update labels too
  • Bulk operations -- bulk_move, bulk_delete, bulk_update_flags, bulk_update_labels with dryRun preview and XOR uid/match input
  • Folder & label management -- create_folder, create_label, rename_folder, delete_folder (non-destructive on Proton); empty_folder (opt-in via ALLOW_EMPTY_FOLDER=true; not recommended)
  • Labeling -- update_message_labels adds and removes Proton labels on a message (additive — message stays in its source folder)
  • Aggregations -- count_messages, folder_stats, top_senders (with excludeSelf + per-row direction) for inbox analytics
  • Thread mutations -- move_thread, delete_thread, flag_thread with optional cross-folder walk; get_thread dedupes by Message-ID across mailbox copies
  • Snippets -- optional includeSnippet on list_messages and search_messages for at-a-glance previews
  • List folders with message and unread counts
  • Honest accounting -- post-STORE FETCH verify on flags/labels surfaces silently-dropped operations as notApplied; sent-copy lookup retries SEARCH to defeat Proton's index lag; Reply-To rewrites are surfaced in the send response
  • Safety first -- delete moves to Trash by default (via special-use resolver), read-only mode via READONLY=true, dryRun on all bulk ops, MCP tool annotations for client-side confirmation prompts, path-traversal defense on filesystem-touching tools
  • Security hardened -- input validation, credential sanitization, rate limiting, attachment size limits
  • Works with any MCP-compatible client (Claude Desktop, Claude Code, Cursor, etc.)

Prerequisites

Quick Start

Add to your MCP client

Add the following to your client's MCP server configuration (Claude Desktop, Claude Code, Cursor, etc.):

{

"mcpServers": { "protonmail": { "command": "npx", "args": ["-y", "proton-mail-mcp"], "env": { "PROTONMAIL_USERNAME": "your-email@protonmail.com", "PROTONMAIL_PASSWORD": "your-smtp-password" } } } }

That's it — npx will download and run the server automatically. See Configuration for all available environment variables.

Install from source

If you prefer to run from a local clone:

git clone https://github.com/sethbang/proton-mail-mcp.git

cd proton-mail-mcp npm install npm run build

Then use this MCP config instead:

{

"mcpServers": { "protonmail": { "command": "node", "args": ["/absolute/path/to/proton-mail-mcp/build/index.js"], "env": { "PROTONMAIL_USERNAME": "your-email@protonmail.com", "PROTONMAIL_PASSWORD": "your-smtp-password" } } } }

Tools

Sending

All send tools return the Message-ID of the sent message in their response, which can be used to locate the message via IMAP search. All four send tools (send_email, reply_email, reply_all_email, forward_email) perform a best-effort lookup of the sent copy UID in the resolved \Sent folder (retried across ~30s to defeat Proton's indexing lag) and lead the response with a machine-parseable token prefix — [sent-copy:verified] or [sent-copy:unverified], plus [reply-to:preserved|rewritten|stripped|unverified] when replyTo was requested. Agents can grep these tokens instead of text-matching prose. When the Sent-copy lookup converges, the response also includes a Sent copy UID: N in Sent clause; when it doesn't, the leading verb switches from "X sent successfully (Sent-copy verified)" to "X send accepted by SMTP (Sent-copy unverified within the lookup window)" — the message did go out, but per-delivery verification couldn't be completed within the budget.

🛡️ HTML sanitization defaults to ON (since v1.0.0). Send / reply / forward / save_draft tools strip , event handlers, inline style attributes, and remote beacons via a conservative allowlist before delivery. Pass sanitizeHtml: false to preserve full-fidelity HTML for trusted-content workflows. The success response notes when sanitization ran.

⚠️ Display-name spoofing partially defended. As of v1.0.0, fromName rejects values containing @ by default — without this guard, a fromName like "Anthropic Security " reaches the wire as Anthropic Security security@anthropic.com after angle-bracket sanitization, which mail clients render as a forged sender. Pass allowAddressLikeFromName: true to override for legitimate product names. SMTP itself still prevents *address-level* spoofing (the envelope From: is bound to your authenticated identity), and arbitrary display names without @ are still allowed (e.g. "CEO of Acme") — treat fromName like any other user-controllable string.

All send/reply/forward/save_draft tools accept an alternative markdownBody parameter (rendered to HTML via marked) — mutually exclusive with body+isHtml. sanitizeHtml applies after Markdown rendering.

🛡️ Outbound preview + self-only lock. send_email, reply_email, reply_all_email, and forward_email accept dryRun: true — it runs all validation and resolves the complete recipient set (To/CC/BCC, including the reply-all fan-out) and returns it without sending, leading with an [outbound:*] token and an explicit list of any external (non-self) recipients. Use it to confirm exactly who would receive the mail before a live call. For throwaway/QA accounts, set RESTRICT_OUTBOUND_TO_SELF=true (see Environment variables) to *refuse* any live send to a non-self recipient — preventing an agent from fanning real mail out to external addresses embedded in seed data. (Preview is caller-opt-in; the env lock is enforced server-side with no per-call override.)

send_email

Send an email using Proton Mail SMTP.

ParameterRequiredDescription
toYesRecipient address(es), comma-separated
subjectYesSubject line
bodyConditionalPlain text or HTML content. Required unless markdownBody is provided
isHtmlNoWhether body is HTML (default: false)
markdownBodyNoMarkdown source — rendered to HTML before sending. Mutually exclusive with body/isHtml
sanitizeHtmlNoStrip scripts, event handlers, inline styles, and remote beacons via a conservative allowlist when the body is HTML. Default `true` as of v1.0.0. Pass false to preserve full-fidelity HTML. No-op on plain-text
ccNoCC recipient(s), comma-separated
bccNoBCC recipient(s), comma-separated (count in response dedupes against To/CC)
replyToNoReply-To address (Proton SMTP may rewrite values that don't match an authenticated identity; rewrites are surfaced in the response)
fromNameNoDisplay name for the From field. Rejects values containing @ by default (display-name-as-address spoofing defense — see warning above). Pass allowAddressLikeFromName: true to override for legitimate cases (product names with @)
allowAddressLikeFromNameNoOpt-in escape valve for fromName containing @. Default false
attachmentsNoArray of {filename, content, contentType}. content is validated as base64 at the Zod boundary (catches malformed payloads before nodemailer silently emits garbage bytes); contentType is validated as a MIME type/subtype (catches malformed values before SMTP rejects the message)
dryRunNoValidate and resolve the full recipient set (To/CC/BCC) + subject + body without sending. Returns a preview leading with an [outbound:*] token and an explicit list of any external (non-self) recipients (default: false)
reply_email

Reply to a message with proper threading headers (In-Reply-To, References). Includes the quoted original message with attribution by default.

ParameterRequiredDescription
uidYesUID of the message to reply to
bodyConditionalReply body content. Required unless markdownBody is provided
folderNoFolder containing the original message (default: INBOX)
isHtmlNoWhether body is HTML (default: false)
markdownBodyNoMarkdown source. Mutually exclusive with body/isHtml
sanitizeHtmlNoStrip scripts, event handlers, inline styles, and remote beacons via a conservative allowlist when the body is HTML. Default `true` as of v1.0.0. Pass false to preserve full-fidelity HTML. No-op on plain-text
ccNoAdditional CC recipients, comma-separated
bccNoBCC recipients, comma-separated
replyAllNoReply to all recipients instead of just sender (default: false). Prefer the dedicated reply_all_email tool for discoverability
includeQuoteNoInclude quoted original message below reply (default: true)
dryRunNoResolve the reply recipients (incl. reply-all fan-out) + subject without sending; returns a preview of who would receive it (default: false)
reply_all_email

Reply to all original recipients (sender + TO + CC), excluding the authenticated user. Same threading + quoting semantics as reply_email. Use this instead of reply_email + replyAll: true for clarity. Self-exclusion covers the whole recipient set including the primary To: replying-all to a message you sent reaches the original recipients rather than looping back to you.

ParameterRequiredDescription
uidYesUID of the message to reply to
bodyConditionalReply body content. Required unless markdownBody is provided

| folder | No

只显示了开头部分;其余内容请在仓库中阅读

问 PopNx