Skip to main content
Glama
bgalmes

rubit-mcp-mail

by bgalmes

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:

System

File

Windows

rubit-mcp-mail-setup-windows.exe

Linux

rubit-mcp-mail-setup-linuxchmod +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.

Related MCP server: mcp-imap-server

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 roleinbox, 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:

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

Install from source

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.

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:

[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?.

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

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.

Development

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.

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 mustnot 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 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.

Available Tools

6 tools
get_attachmentA
Read-only

Download one attachment into the configured download directory.

Returns the path it was saved to. Files are only ever written inside that one directory; the mailbox itself is not modified.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesA handle from list_messages or search_messages.
accountNoAccount name. Optional when only one is configured.
part_idYesThe `part_id` from read_message's attachments.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/destructive annotations, the description adds a meaningful side-effect boundary: files are only ever written inside the configured download directory and the mailbox is not modified. It also discloses that the saved path is returned, though it does not cover overwrite or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences lead with the action, state the return value, and then give a safety constraint. No filler or repetition of schema content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-file download with only three parameters, an output schema, and safety annotations, the description plus schema is complete. It covers the destination, return value, and non-mutation guarantee.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter meaning is fully carried by the schema. The description adds no separate parameter detail, which matches the baseline: the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Download one attachment into the configured download directory.' This clearly distinguishes it from sibling listing/reading tools and states the output (saved path).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The operation is clear enough that an agent knows to call it when an attachment from a message is needed, and the schema ties `part_id` to `read_message`, giving context. However, the description itself names no alternative or explicit when-not-to-use condition, so it stops just short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_accountsA
Read-only

List configured mail accounts and whether each is authenticated.

Call this first if another tool reports an authentication problem.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that this is a read-only, non-destructive operation. The description adds value by disclosing that the tool reports authentication state and is intended as an initial diagnostic step, but it does not go further into behavioral details. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with no filler. The first sentence states the core function, and the second provides actionable guidance, placing the most important information upfront.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, read-only annotations, and an output schema, the description fully covers what an agent needs: what the tool does, what information it returns, and when to use it. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the description does not need to document input semantics. A baseline of 4 is appropriate, and the description introduces no conflicting or missing input information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), a clear resource ('configured mail accounts'), and states the key attribute returned ('whether each is authenticated'). This clearly distinguishes it from sibling tools that operate on folders, messages, or attachments.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance: call this tool first if another tool reports an authentication problem. It does not state exclusions or alternative tools, but the diagnostic use case is clearly framed and sufficient for a zero-parameter tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_foldersA
Read-only

List the folders in a mailbox with message and unread counts.

Each folder has a normalized role that is stable across providers, so you can ask for 'junk' without knowing the server calls it 'Junk Email'.

ParametersJSON Schema
NameRequiredDescriptionDefault
accountNoAccount name. Optional when only one is configured.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the read-only nature is covered. The description adds useful behavioral context: output includes message/unread counts and normalized role values that are stable across providers, which is meaningful beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose. The second sentence adds valuable cross-provider context, though its phrasing about asking for 'junk' could be slightly clearer in relation to this specific tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and an output schema, the description covers the core behavior and adds useful output context. It is complete enough for an agent to invoke correctly, though a brief usage scenario would make it stronger.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the only parameter, account, is already described in the schema. The description does not add parameter-level detail beyond what the schema provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'List the folders in a mailbox' with the additional detail of message and unread counts. This clearly differentiates it from sibling tools like list_messages and list_accounts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool versus siblings such as list_messages or search_messages. The note about normalized roles hints at cross-provider usability but does not explain when an agent should invoke list_folders instead of another tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_messagesA
Read-only

Browse messages in a folder, newest first.

Returns summaries only (no bodies). Pass a returned handle to read_message to get the full text.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax messages to return.
folderNoFolder role ('inbox', 'sent', 'junk', 'trash', 'drafts', 'archive') or a raw server folder name.inbox
offsetNoMessages to skip, for paging.
accountNoAccount name. Optional when only one is configured.
unread_onlyNoOnly unread mail.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as read-only, but the description adds meaningful behavioral detail: it returns summaries only, includes a handle for retrieving full messages, and orders results newest first. This goes beyond what annotations or schema provide and helps an agent predict the tool's behavior accurately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short paragraphs with zero filler. The primary purpose is front-loaded in the first sentence, and the second paragraph adds the essential return-handling detail. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a list-type tool with no required parameters, an output schema, and annotations covering the safety profile, the description is complete. It covers ordering, summary-only behavior, the handle handoff to read_message, and the folder-scoped browsing model. Nothing an agent needs to decide whether to call it or how to use its output is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all five parameters already clearly documented (limit, folder, offset, account, unread_only). The description adds no parameter-specific information, which is acceptable because the schema carries the full burden. Baseline 3 is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('Browse messages in a folder'), the sorting order ('newest first'), and the response scope ('summaries only (no bodies)'). It also distinguishes itself from read_message by explicitly directing the agent to use read_message for full text, which differentiates it from a key sibling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use this tool (browsing folder summaries) and explicitly routes the agent to read_message for full bodies. It does not explicitly contrast with search_messages, but the browsing vs. searching distinction is implied by the description and sibling names, so the guidance is adequate but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_messageA
Read-only

Read one message in full: headers, body text, and attachment metadata.

HTML-only mail is converted to text. This does NOT mark the message as read.

ParametersJSON Schema
NameRequiredDescriptionDefault
handleYesA handle from list_messages or search_messages.
accountNoAccount name. Optional when only one is configured.
max_charsNoTruncate the body beyond this many characters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint and destructiveHint annotations, the description adds meaningful behavioral details: HTML-only mail is converted to text, and reading does not mark the message as read. This helps the agent predict side effects and format transformations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, focused sentences with no filler. The core action is stated first, and behavioral caveats follow immediately, making it easy to scan and act on.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only message-retrieval tool with fully documented parameters, a rich output schema, and safety annotations, the description covers the essential behavior and side effects. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters. The description adds context about full-message content and truncation behavior but does not materially extend the parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource: 'Read one message in full' with explicit content types (headers, body text, attachment metadata). This clearly distinguishes it from listing or searching messages and from fetching attachment content directly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies use when full message content is needed, and the handle parameter references list_messages/search_messages, grounding the workflow. It does not explicitly contrast with get_attachment for actual attachment bytes, but the scope is clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_messagesA
Read-only

Search a folder. All supplied criteria are combined with AND.

Server-side IMAP search, so it works over the whole folder without downloading anything. Results are newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
textNoFree text, matched against headers and body.
from_NoSubstring of the sender address or name.
limitNoMax messages to return.
sinceNoOn or after this date.
beforeNoStrictly before this date.
folderNoFolder role ('inbox', 'sent', 'junk', 'trash', 'drafts', 'archive') or a raw server folder name.inbox
offsetNoMessages to skip, for paging.
accountNoAccount name. Optional when only one is configured.
subjectNoSubstring of the subject.
unread_onlyNoOnly unread mail.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it read-only and non-destructive. The description adds useful behavioral details beyond that: it is a server-side IMAP search, scans the whole folder without downloading, and returns newest-first results. This is meaningful context, though it doesn't cover edge cases like empty criteria or pagination behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences, front-loaded with the purpose, then combination semantics, then operational behavior. No filler and each sentence contributes unique information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and the input schema is fully documented, the description covers the essential context: folder scope, criteria conjunction, server-side execution, and ordering. It is complete enough for confident invocation, though mentioning list_messages as a no-filter alternative would have made it slightly more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

All 10 parameters already have schema descriptions, so the baseline is 3. The description adds the key interaction rule that all supplied criteria are combined with AND, which is not captured in the schema. It doesn't need to repeat individual parameter meanings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific operation ('Search a folder') and clarifies the filtering semantics ('All supplied criteria are combined with AND'). It is clear what the tool does, but it doesn't explicitly contrast it with sibling list_messages, so it falls just short of full differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes a clear use case: searching a folder rather than simply listing it. It doesn't explicitly say when not to use it or name an alternative, but the server-side, criteria-based behavior gives an agent clear context for selecting it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 6 tool updatesv0.1.0
    • First observedget_attachment
    • First observedlist_accounts
    • First observedlist_folders
    • First observedlist_messages
    • First observedread_message
    • First observedsearch_messages

TDQS

A4.3/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct operation: account auth, folder listing, message browsing, searching, reading, and attachment download. list_messages and search_messages are clearly separated as browse-all versus filtered-search, so there is no real ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: list_accounts, list_folders, list_messages, search_messages, read_message, get_attachment. The naming style is uniform and predictable.

Tool Count5/5

Six tools is well-scoped for a read-only email access server. Each tool covers a necessary part of the workflow without redundancy or bloat.

Completeness5/5

The tool set fully covers the apparent purpose of browsing and reading email: account discovery, folder navigation, message listing/search, full message retrieval, and attachment access. Since the descriptions explicitly indicate a read-only mailbox posture, the lack of send/delete/move tools is not a gap.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides read-only access to Gmail, enabling email search, unread listing, message and thread retrieval, and draft reply preparation without sending.
    105 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables LLMs to read, search, and manage emails via IMAP with secure, read-only access to email accounts.
    6
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    Read-only MCP server for IMAP email access, enabling AI agents to read, search, and monitor email without sending or deleting messages.
    21 npm
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Read-only MCP server that connects to multiple IMAP accounts, enabling cross-account email listing, search, and retrieval without modifying mailboxes.
    4
    MIT