邮件管理服务器

一个完整的TypeScript模型上下文协议(MCP)服务器,用于通过Proton Mail Bridge集成Proton Mail,提供全面的电子邮件管理功能。

  • by cogghaus
  • TypeScript
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 SpasticPalate/proton-mcp-server

使用说明

质子MCP服务器

一个完整的TypeScript模型上下文协议(MCP)服务器,用于通过Proton Mail Bridge集成Proton Mail。

这有什么作用

此MCP服务器通过连接到本地运行的Proton Mail Bridge,通过Claude Code提供完整的电子邮件管理功能。它允许您:

  • 列出和浏览邮箱文件夹
  • 列出、搜索和阅读电子邮件
  • 发送新电子邮件和回复
  • 移动和删除电子邮件
  • 访问带有附件的完整邮件内容

先决条件

  1. 质子邮件桥 在本地主机上运行和访问:
    • 端口1143上的IMAP服务器(STARTTLS)
    • 端口1025上的SMTP服务器(STARTTLS)
  2. Node.js 18岁或以上
  3. 具有Bridge凭据的有效Proton Mail帐户

设置

1.安装依赖项

npm install

2.配置环境

复制环境模板并添加您的Proton凭据:

cp .env.example .env

编辑 .env 使用您的设置:

PROTON_IMAP_HOST=127.0.0.1
PROTON_IMAP_PORT=1143
PROTON_SMTP_HOST=127.0.0.1
PROTON_SMTP_PORT=1025
PROTON_USER=your-proton-email@protonmail.com
PROTON_PASS=your-bridge-password

3.建造

npm run build

4.本地运行(开发)

npm run dev

或者运行编译后的版本:

npm start

使用Claude代码

将此MCP服务器添加到您的Claude设置中(~/.claude/settings.json):

{
  "mcpServers": {
    "proton": {
      "command": "node",
      "args": ["/path/to/proton-mcp-server/dist/index.js"],
      "env": {
        "PROTON_USER": "your-email@protonmail.com",
        "PROTON_PASS": "your-bridge-password",
        "PROTON_IMAP_HOST": "127.0.0.1",
        "PROTON_IMAP_PORT": "1143",
        "PROTON_SMTP_HOST": "127.0.0.1",
        "PROTON_SMTP_PORT": "1025"
      }
    }
  }
}

或者使用TypeScript/tsx:

{
  "mcpServers": {
    "proton": {
      "command": "npx",
      "args": ["tsx", "/path/to/proton-mcp-server/src/index.ts"]
    }
  }
}

可用工具

阅读工具(只读)

  • proton_list_folders --列出所有包含邮件和未读计数的邮箱文件夹
  • proton_list_邮件 --在文件夹中以分页方式列出电子邮件(最新的优先)
  • proton_search电子邮件 --带过滤器的高级搜索(从、到、主题、日期范围、正文内容、未读状态)
  • proton_read-mail --阅读完整的电子邮件内容,包括标题、正文和附件列表

书写工具

  • proton_send_mail --发送新电子邮件(纯文本或HTML)
  • proton_reply.email --使用正确的线程标题回复电子邮件
  • proton_move_mail --将电子邮件移动到另一个文件夹
  • proton_delete_mail --删除电子邮件(移至垃圾箱)

项目结构

proton-mcp-server/
├── src/
│   ├── index.ts              # Main entry point
│   ├── constants.ts          # Configuration constants
│   ├── types.ts              # TypeScript interfaces
│   ├── schemas/
│   │   └── index.ts          # Zod input schemas
│   ├── services/
│   │   ├── imap.ts           # IMAP client wrapper
│   │   └── smtp.ts           # SMTP client wrapper
│   └── tools/
│       ├── folders.ts        # proton_list_folders
│       ├── list.ts           # proton_list_emails
│       ├── search.ts         # proton_search_emails
│       ├── read.ts           # proton_read_email
│       ├── send.ts           # proton_send_email
│       ├── reply.ts          # proton_reply_email
│       ├── move.ts           # proton_move_email
│       └── delete.ts         # proton_delete_email
├── package.json
├── tsconfig.json
├── .env.example
├── .gitignore
└── README.md (this file)

实施说明

IMAP连接

  • 用途 imapflow 端口1143上带有STARTTLS的库
  • Proton Bridge使用自签名证书,因此 tls.rejectUnauthorized: false
  • 所有连接均已正确关闭 logout() 在最后的块

SMTP连接

  • 用途 nodemailer 端口1025上有STARTTLS
  • 支持纯文本和HTML电子邮件正文
  • 正确设置 In-Reply-To 和 References 电子邮件线程的标题

消息分析

  • 用途 mailparser 提取完整消息内容
  • 支持文本、HTML和附件处理
  • 返回附件元数据(文件名、内容类型、大小)

分页

  • 电子邮件列表分页使用偏移和限制参数
  • 结果总是最新的
  • 搜索结果还支持分页

故障排除

连接问题

  • 确保Proton邮件桥正在运行: protonmail-bridge --cli
  • 检查本地主机连接: telnet 127.0.0.1 1143 (IMAP)和 1025 (SMTP)
  • 验证中的凭据 .env 文件

电子邮件问题

  • 某些电子邮件客户端可能无法识别没有正确邮件ID标头的回复
  • HTML电子邮件被解析为文本;使用原始HTML正文以获得更好的格式
  • 处理大型附件可能需要时间

构建问题

  • 确保已安装Node.js 18+: node --version
  • 清除node_modules并重新安装: npm clean-install
  • 检查TypeScript编译: npm run build

依赖项

  • @modelcontextprotocol/sdk --MCP协议实现
  • imapflow --用于电子邮件阅读的IMAP客户端
  • nodemailer --用于发送电子邮件的SMTP客户端
  • mailparser --电子邮件解析和内容提取
  • zod --输入验证模式
  • dotenv --环境变量加载

许可证

麻省理工学院

支持

有关Proton Mail Bridge的问题,请参阅:https://proton.me/support/bridge

有关MCP协议文档,请参阅:https://modelcontextprotocol.io