Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Read-only MCP server for your mail — provider-agnostic IMAP that never marks a message as read.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"rubit-mail": {
"command": "uvx",
"args": [
"rubit-mcp-mail",
"serve"
]
}
}
}在终端中运行这条命令
claude mcp add rubit-mail -- uvx rubit-mcp-mail serve粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"rubit-mail": {
"command": "uvx",
"args": [
"rubit-mcp-mail",
"serve"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"rubit-mail": {
"type": "stdio",
"command": "uvx",
"args": [
"rubit-mcp-mail",
"serve"
]
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 bgalmes 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(1.0.0)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Python (uv)。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Funooy Krillion Reference
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Funooy trivia references in six languages, with rules and fixed scoring. No daily spoilers.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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/](https://bgalmes.github.io/rubit-mcp-mail/)
Download the installer for your system from the latest release and run it:
| System | File |
|---|---|
| Windows | rubit-mcp-mail-setup-windows.exe |
| Linux | rubit-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.
| Tool | What it does |
|---|---|
list_accounts | Configured accounts and whether each is authenticated |
list_folders | Folders with normalized roles and unread counts |
list_messages | Browse a folder, newest first, paginated |
search_messages | Server-side search by text, sender, subject, date range, unread |
read_message | Full headers, body text, attachment metadata |
get_attachment | Save 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.
If you already have Python 3.11+ and would rather not run an installer:
pip install rubit-mcp-mail
rubit-mcp-mail install # the same setup wizard, from the terminal
cd /path/to/rubit-mcp-mail
conda 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 , and rubit-mcp-mail doctor. The Windows variant and the full walkthrough are in Install from source.
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:
[accounts.personal]
provider = "generic" email = "you@fastmail.com" 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.
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?.
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.
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.
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:
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.
ruff check .
ruff format --check . pyright pytest -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.
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:orfix:.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):orci(site):.
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 flow skills/rubit-mail/SKILL.md agent skill: when and how to use the tools website/ the documentation site (Nuxt); see "The website" above
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.
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.