rubit-mcp-mail

io.github.bgalmes由 GitHub 账号 bgalmes 发布v1.0.0更新于 Oct 25, 2026

Read-only MCP server for your mail — provider-agnostic IMAP that never marks a message as read.

已验证STDIO仅桌面文件与存储沟通与协作

概览

AI 生成的概览

只读 IMAP 邮件服务器,让助手列出账户、文件夹和邮件,搜索邮件、读取正文并保存附件,且不会把邮件标记为已读。

可以做什么
  • 列出已配置账户及其认证状态,并按归一化角色(收件箱、已发送、草稿、垃圾邮件、废纸篓、归档)列出文件夹及未读数
  • 按最新优先分页浏览某个文件夹,并在服务器端按文本、发件人、主题、日期范围或未读状态搜索
  • 读取邮件的完整头部、正文文本和附件元数据
  • 将单个附件保存到配置的下载目录
适用场景
适合让助手通过普通 IMAP 整理、搜索或总结已有邮箱(Gmail、Outlook.com、Fastmail、iCloud、Yahoo 或自建服务器),同时确保它无法发送、移动、删除或标记邮件。
运行要求
以本地 Python 包(Python 3.11+)运行,或使用 Windows 与 Linux 的打包安装程序;macOS 需从源码安装。需要一个配置了主机和邮箱地址的 IMAP 账户,Gmail 与 iCloud 需应用专用密码,Outlook.com 需 Azure 应用注册(client_id)。凭据存于系统钥匙串,失败时回退到文件。需要访问邮件服务器的网络。
安装前请注意
它会在本机保存邮件账户凭据和 OAuth 客户端配置,需保护好钥匙串与配置文件。读取设计为不修改数据,但保存附件会向下载目录写入文件。邮件内容是模型的不可信输入。README 提到 Windows 杀毒软件可能误报未签名安装程序,微软正在收紧第三方邮件访问,且共享的 Thunderbird 客户端 ID 不受该项目控制。

安装

在 SourceWeft 中

  1. 打开 控制台中的 rubit-mcp-mail,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

rubit-mcp-mail

[CI] [Latest release] [PyPI] [Python] [License: MIT]

A read-only MCP server for reading your mail. Provider-agnostic: it speaks IMAP, so it works with Outlook.com, Gmail, Fastmail, iCloud, or a self-hosted server — the provider is a line of config, not a code change.

Read-only by construction. Folders are opened with EXAMINE, never SELECT, and bodies are fetched with BODY.PEEK, so reading a message does not even mark it as read. There are no send, move, delete, or flag code paths, and a test asserts none are ever added.

📖 Full documentation: https://bgalmes.github.io/rubit-mcp-mail/

Quick install

Download the installer for your system from the latest release and run it:

SystemFile
Windowsrubit-mcp-mail-setup-windows.exe
Linuxrubit-mcp-mail-setup-linux — chmod +x it first

Nothing needs to be installed beforehand: Python and every dependency are inside that one file. A window asks for your provider and email address, signs you in, and registers the mail server with Claude Desktop and Claude Code if it finds them — restart Claude Desktop afterwards and your mail is there. It also leaves you a rubit-mcp-mail Settings shortcut for everything you want to change later. No terminal, at any point.

There is no macOS installer; on a Mac, install from source (below).

A note on antivirus warnings. Windows Defender or Avast may flag this .exe. This is a known false positive common to unsigned PyInstaller-built applications, not anything this project's code does — see the install guide for what to do about it. Every published SHA-256 is listed on the changelog.

Tools

ToolWhat it does
list_accountsConfigured accounts and whether each is authenticated
list_foldersFolders with normalized roles and unread counts
list_messagesBrowse a folder, newest first, paginated
search_messagesServer-side search by text, sender, subject, date range, unread
read_messageFull headers, body text, attachment metadata
get_attachmentSave one attachment into the download directory

Folders are addressed by role — inbox, sent, drafts, junk, trash, archive — so you never need to know that Outlook calls it Junk Email while Gmail calls it [Gmail]/Spam. Raw folder names work too.

Full arguments and return shapes: Tools reference.

Install with pip

If you already have Python 3.11+ and would rather not run an installer:

bash
pip install rubit-mcp-mailrubit-mcp-mail install      # the same setup wizard, from the terminal

Install from source

bash
cd /path/to/rubit-mcp-mailconda create -p ./.venv python=3.12 pip -y     # this machine has no python3-venv./.venv/bin/python -m pip install -e .

Then configure an account, rubit-mcp-mail auth <account>, and rubit-mcp-mail doctor. The Windows variant and the full walkthrough are in Install from source.

Setting up a mailbox

Microsoft has retired basic auth for Outlook.com, so Outlook needs a free Azure app registration — seven steps, done once, written out in Setting up Outlook. Everything else takes an app password:

toml
[accounts.personal]provider = "generic"email    = "[email protected]"host     = "imap.fastmail.com"

Known hosts: Gmail imap.gmail.com, Fastmail imap.fastmail.com, iCloud imap.mail.me.com, Yahoo imap.mail.yahoo.com. Gmail and iCloud require an app-specific password, not your login password.

Can't register your own Azure app?

If your Microsoft account genuinely can't register one, you can use the public client ID that other open-source mail tools already share for this purpose — Thunderbird's, 9e5f94bc-e8a4-4e73-b8be-63364c29d753. Paste it in as client_id. The consent screen will say "Thunderbird", and because the ID is outside our control Microsoft could rotate it. Details and caveats: Can't register your own app?.

Permissions

Any account-scoped tool can be forbidden for a given account with disabled_tools in config.toml, or by unticking a box on the settings window's Permissions tab. A blocked call returns a plain Error: ... string to the model rather than failing silently. See Permissions.

Registering with Claude

bash
claude mcp add rubit-mail --scope user -- "$(pwd)/.venv/bin/rubit-mcp-mail" serve

Claude Desktop needs a JSON entry instead, and on Linux it needs the session environment passed explicitly or the keyring is unreachable — Register with Claude has both, and Troubleshooting has the logs.

Agent skill

skills/rubit-mail/SKILL.md tells an agent when to reach for the mail tools and how to chain them, and reminds it that the server is read-only and that mail content is untrusted. For Claude Code, copy it into your user (or a project's .claude/) skills directory:

bash
mkdir -p ~/.claude/skills && cp -r skills/rubit-mail ~/.claude/skills/

Any other agent that reads SKILL.md files works the same way. See Agent skill.

Development

sh
ruff check .ruff format --check .pyrightpytest -q

Those are the same checks CI runs. Commit messages follow Conventional Commits and drive automatic versioning — see CONTRIBUTING.md and AGENTS.md. Building the installers and adding a provider are covered in Contributing.

The website

website/ holds the documentation site (Nuxt), deployed to GitHub Pages by .github/workflows/deploy-website.yml. It is the source of truth for the docs; this README is deliberately the short version.

[!IMPORTANT] Website commits must not use feat: or fix:. python-semantic-release parses the commit type, not the scope, so feat(site): … would bump the Python package and cut an installer release. Use docs(site):, chore(site): or ci(site):.

Layout

src/rubit_mcp_mail/  server.py        MCP tool definitions  __main__.py      CLI: serve | install | auth | doctor | gui  installer.py     setup wizard: writes config, signs in, registers with Claude  installer_gui.py the setup window (tkinter), falling back to the terminal  shortcuts.py     Start Menu / Desktop / .desktop entries for the GUI  claude_registration.py  claude_desktop_config.json / `claude mcp add`  session.py       wires config + auth + backend; attachment path safety  config.py        TOML config -> Account models  diagnostics.py   the doctor checks, as data (shared by the CLI and the GUI)  permissions.py   registry of per-account-toggleable tool names  config_editor.py every write to config.toml: comment-preserving, validated  config_gui.py    the settings window (tkinter): accounts, permissions, doctor  providers.py     provider profile registry  secrets.py       keyring with 0600-file fallback  models.py        pydantic models + message handles  mime.py          BODYSTRUCTURE walking, decoding, HTML->text  backends/    base.py        MailBackend protocol    imap.py        the IMAP implementation  auth/    password.py         app passwords    oauth_microsoft.py  MSAL device-code flowskills/rubit-mail/SKILL.md  agent skill: when and how to use the toolswebsite/           the documentation site (Nuxt); see "The website" above

Releasing

Every merge to main prepares a release PR carrying only the pyproject.toml and CHANGELOG.md diff; a maintainer merges it by hand, which publishes the prerelease and builds the installers; promote-release.yml is dispatched manually to drop the -rc.N suffix. The human merge is load-bearing — GitHub raises no events for anything GITHUB_TOKEN does. Full flow: CONTRIBUTING.md and How releases work.

Notes and limits

IMAP search is substring-based, bodies are truncated at 20,000 characters, only text parts are downloaded, and Microsoft is actively tightening third-party mail access. The details are in Notes and limits.

来源:README.md,提交 55bbf68

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v1.0.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分