rubit-mcp-mail
This server is a read-only MCP mail client that lets you browse, search, and read email from configured IMAP accounts without modifying the mailbox.
List configured accounts and their authentication status.
List folders with normalized roles (inbox, sent, junk, trash, drafts, archive) and unread counts.
Browse messages in a folder, newest first, with pagination and an unread-only filter.
Search messages server-side by text, sender, subject, date range, and unread status.
Read full message headers, body text, and attachment metadata; HTML mail is converted to text and messages are not marked read.
Download attachments into a configured download directory, confined to that directory.
Works across providers such as Gmail, Outlook, Fastmail, iCloud, and self-hosted IMAP servers via configuration.
Provides read-only access to Gmail mailboxes via IMAP, including listing folders, searching messages, reading email content, and downloading attachments.
Provides read-only access to iCloud Mail via IMAP, including listing folders, searching messages, reading email content, and downloading attachments.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rubit-mcp-mailSearch my inbox for unread emails from Sarah and show the latest one."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rubit-mcp-mail
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 |
|
Linux |
|
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 |
| Configured accounts and whether each is authenticated |
| Folders with normalized roles and unread counts |
| Browse a folder, newest first, paginated |
| Server-side search by text, sender, subject, date range, unread |
| Full headers, body text, attachment metadata |
| 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.
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 terminalInstall 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" serveClaude 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 -qThose 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.
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" aboveReleasing
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 toolsget_attachmentARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | A handle from list_messages or search_messages. | |
| account | No | Account name. Optional when only one is configured. | |
| part_id | Yes | The `part_id` from read_message's attachments. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_accountsARead-only
List configured mail accounts and whether each is authenticated.
Call this first if another tool reports an authentication problem.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_foldersARead-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'.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | Account name. Optional when only one is configured. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_messagesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max messages to return. | |
| folder | No | Folder role ('inbox', 'sent', 'junk', 'trash', 'drafts', 'archive') or a raw server folder name. | inbox |
| offset | No | Messages to skip, for paging. | |
| account | No | Account name. Optional when only one is configured. | |
| unread_only | No | Only unread mail. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_messageARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| handle | Yes | A handle from list_messages or search_messages. | |
| account | No | Account name. Optional when only one is configured. | |
| max_chars | No | Truncate the body beyond this many characters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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_messagesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | No | Free text, matched against headers and body. | |
| from_ | No | Substring of the sender address or name. | |
| limit | No | Max messages to return. | |
| since | No | On or after this date. | |
| before | No | Strictly before this date. | |
| folder | No | Folder role ('inbox', 'sent', 'junk', 'trash', 'drafts', 'archive') or a raw server folder name. | inbox |
| offset | No | Messages to skip, for paging. | |
| account | No | Account name. Optional when only one is configured. | |
| subject | No | Substring of the subject. | |
| unread_only | No | Only unread mail. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
6 tool updates
v0.1.0- First observed
get_attachment - First observed
list_accounts - First observed
list_folders - First observed
list_messages - First observed
read_message - First observed
search_messages
TDQS
Scored across 6 tools
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.
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.
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.
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
Related MCP Connectors
Never-stored live email: read, send, organize, schedule and auto-triage Gmail or any IMAP mailbox.
- mailOAuthcom.anymailmcp
Read, send, organize, watch email on any IMAP mailbox: Gmail, iCloud, OVH, Zoho, Fastmail + CalDAV.
Read, send, file and search email in any Gmail, Microsoft 365 or IMAP mailbox, plus its calendar.
Your mailboxes in ChatGPT and Claude: Gmail, iCloud, Fastmail, any IMAP. Passwords stay yours.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to Gmail, enabling email search, unread listing, message and thread retrieval, and draft reply preparation without sending.105 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables LLMs to read, search, and manage emails via IMAP with secure, read-only access to email accounts.6-
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server for IMAP email access, enabling AI agents to read, search, and monitor email without sending or deleting messages.21 npmMIT
- AlicenseAqualityBmaintenanceRead-only MCP server that connects to multiple IMAP accounts, enabling cross-account email listing, search, and retrieval without modifying mailboxes.4MIT