Skip to main content
ClaudeWave
bgalmes avatar
bgalmes

rubit-mcp-mail

Ver en GitHub

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

MCP ServersRegistry oficial0 estrellas0 forksPythonMITActualizado today
ClaudeWave Trust Score
95/100
Verified
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Clear description
  • Topics declared
  • Documented (README)
Last scanned: 9/17/2026
Install in Claude Code / Claude Desktop
Method: pip / Python · rubit-mcp-mail
Claude Code CLI
claude mcp add rubit-mcp-mail -- python -m rubit-mcp-mail
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "rubit-mcp-mail": {
      "command": "python",
      "args": ["-m", "pip"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Install first: pip install rubit-mcp-mail
Casos de uso

Resumen de MCP Servers

# rubit-mcp-mail

<!-- mcp-name: io.github.bgalmes/rubit-mcp-mail -->

[![CI](https://github.com/bgalmes/rubit-mcp-mail/actions/workflows/ci.yml/badge.svg)](https://github.com/bgalmes/rubit-mcp-mail/actions/workflows/ci.yml)
[![Latest release](https://img.shields.io/github/v/release/bgalmes/rubit-mcp-mail)](https://github.com/bgalmes/rubit-mcp-mail/releases)
[![PyPI](https://img.shields.io/pypi/v/rubit-mcp-mail)](https://pypi.org/project/rubit-mcp-mail/)
[![Python](https://img.shields.io/pypi/pyversions/rubit-mcp-mail)](https://pypi.org/project/rubit-mcp-mail/)
[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/bgalmes/rubit-mcp-mail/blob/main/LICENSE)

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](https://github.com/bgalmes/rubit-mcp-mail/releases) 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](https://bgalmes.github.io/rubit-mcp-mail/docs/install/installer)
for what to do about it. Every published SHA-256 is listed on
[the changelog](https://bgalmes.github.io/rubit-mcp-mail/changelog).

## Tools

| 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](https://bgalmes.github.io/rubit-mcp-mail/docs/reference/tools).

## Install with pip

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

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

## Install from source

```bash
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 <account>`, and
`rubit-mcp-mail doctor`. The Windows variant and the full walkthrough are in
[Install from source](https://bgalmes.github.io/rubit-mcp-mail/docs/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](https://bgalmes.github.io/rubit-mcp-mail/docs/providers/outlook).
Everything else takes an app password:

```toml
[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.

### 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?](https://bgalmes.github.io/rubit-mcp-mail/docs/providers/outlook#cant-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](https://bgalmes.github.io/rubit-mcp-mail/docs/reference/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](https://bgalmes.github.io/rubit-mcp-mail/docs/install/claude-clients)
has both, and
[Troubleshooting](https://bgalmes.github.io/rubit-mcp-mail/docs/guides/troubleshooting)
has the logs.

## Development

```sh
ruff check .
ruff format --check .
pyright
pytest -q
```

Those are the same checks CI runs. Commit messages follow
[Conventional Commits](https://www.conventionalcommits.org/) and drive automatic
versioning — see [CONTRIBUTING.md](https://github.com/bgalmes/rubit-mcp-mail/blob/main/CONTRIBUTING.md)
and [AGENTS.md](https://github.com/bgalmes/rubit-mcp-mail/blob/main/AGENTS.md). Building the installers and adding a provider are covered
in [Contributing](https://bgalmes.github.io/rubit-mcp-mail/docs/about/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 flow
website/           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](https://github.com/bgalmes/rubit-mcp-mail/blob/main/CONTRIBUTING.md)
and [How releases work](https://bgalmes.github.io/rubit-mcp-mail/docs/about/contributing#how-a-release-happens).

## 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](https://bgalmes.github.io/rubit-mcp-mail/docs/about/limits).
claudeemailimapmcpmcp-servermodel-context-protocolpython

Lo que la gente pregunta sobre rubit-mcp-mail

¿Qué es bgalmes/rubit-mcp-mail?

+

bgalmes/rubit-mcp-mail es mcp servers para el ecosistema de Claude AI. Read-only MCP server for your mail — provider-agnostic IMAP that never marks a message as read. Tiene 0 estrellas en GitHub y su última actualización registrada es del 2026-09-16.

¿Cómo se instala rubit-mcp-mail?

+

Puedes instalar rubit-mcp-mail clonando el repositorio (https://github.com/bgalmes/rubit-mcp-mail) o siguiendo las instrucciones del README en GitHub. ClaudeWave también te ofrece bloques de instalación rápida en esta misma página.

¿Es seguro usar bgalmes/rubit-mcp-mail?

+

Nuestro agente de seguridad ha analizado bgalmes/rubit-mcp-mail y le ha asignado un Trust Score de 95/100 (tier: Verified). Revisa el desglose completo de comprobaciones superadas y flags en esta página.

¿Quién mantiene bgalmes/rubit-mcp-mail?

+

bgalmes/rubit-mcp-mail es mantenido por bgalmes. La última actividad registrada en GitHub es del 2026-09-16, con 2 issues abiertos.

¿Hay alternativas a rubit-mcp-mail?

+

Sí. En ClaudeWave puedes explorar mcp servers similares en /categories/mcp, ordenados por popularidad o actividad reciente.

Despliega rubit-mcp-mail en tu cloud

Lleva este repo a producción en minutos. Cada plataforma genera su propio entorno con variables de entorno editables.

¿Mantienes este repo? Añade un badge a tu README

Pega el badge en tu README de GitHub para mostrar que está auditado por ClaudeWave. Cada badge enlaza de vuelta a esta página y muestra el Trust Score actual.

Featured on ClaudeWave: bgalmes/rubit-mcp-mail
[![Featured on ClaudeWave](https://claudewave.com/api/badge/bgalmes-rubit-mcp-mail)](https://claudewave.com/repo/bgalmes-rubit-mcp-mail)
<a href="https://claudewave.com/repo/bgalmes-rubit-mcp-mail"><img src="https://claudewave.com/api/badge/bgalmes-rubit-mcp-mail" alt="Featured on ClaudeWave: bgalmes/rubit-mcp-mail" width="320" height="64" /></a>

Más MCP Servers

Alternativas a rubit-mcp-mail