list_mailboxes
List the mailboxes configured on this machine and whether each can log in.
Takes no parameters.

io.github.skhan61Published by GitHub account skhan61v5.6.0Updated Nov 3, 2026
IMAP/SMTP email for AI assistants: read, search, draft and send, with CMMC-grade safeguards.
Local IMAP/SMTP email server that lets an assistant list mailboxes, read, search, draft, send and delete mail, with attachments.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
Email for any AI agent that speaks MCP: Claude Code, Claude Desktop, Cowork, ChatGPT desktop, Codex and others.
Read, search, draft and send mail, with attachments, over IMAP/SMTP.
Works with
[Claude Code plugin]
[Claude Desktop and Cowork]
[ChatGPT desktop and Codex]
[MCP server]
Compliance
[CMMC Level 2 / NIST SP 800-171 control mapping]
Build and security
[CI]
[CodeQL]
[OpenSSF Scorecard]
[Latest release]
Code quality
[Python version]
[Tested on Linux, macOS and Windows]
[Ruff]
[mypy strict]
[uv]
[pre-commit]
[Dependabot]
Project
[License]
[Security policy]
[Contributing]
email-tool lets an AI assistant read, search, draft and send your email. It runs on your own computer, keeps passwords in your operating system's keyring, and is built for organizations under CMMC Level 2 and NIST SP 800-171: every action is logged, sending can wait for your approval, and CUI-marked mail stays inside the domains you allow.
Documentation: skhan61.github.io/email-tool
No terminal, any app: Start here. Install email-tool in your app (Claude Desktop and Cowork: one file to open; ChatGPT desktop and Codex: one installer to open), then ask your assistant to "add my mailbox".
From a terminal:
Install uv.
Connect your AI app. In Claude Code:
Other apps: Advanced setup.
Ask your assistant to "add my mailbox", or from a terminal:
Gmail, Google Workspace and other accounts: Mailbox details.
See CONTRIBUTING.md. Report vulnerabilities privately as described in SECURITY.md.
Source: README.md at commit c17996b
List the mailboxes configured on this machine and whether each can log in.
Takes no parameters.
List every folder in the mailbox.
mailboxList the newest messages in a folder, newest first.
limitfoldermailboxSearch a folder by sender, subject, body text or date (since, as DD-Mon-YYYY). On Gmail, `gmail_query` takes Gmail's own search syntax instead; other servers ignore it. Supply at least one field.
bodylimitsincefoldersendermailboxsubjectgmail_queryRead one message in full by UID. Does not mark it as read.
uidrequiredfoldermailboxSave one attachment of a message into a folder the user names. The file is never opened. A relative folder is taken from the user's home ("Downloads" is ~/Downloads). Saving into a place where a file can run (autostart, .ssh, ...) asks the user first.
uidrequiredindexrequiredfoldermailboxdirectoryrequiredconfirm_sensitivePermanently delete one message by UID. This cannot be undone.
uidrequiredfolderrequiredmailboxSave a new draft into the drafts folder, with any attachments. Does not send it. For a reply, `in_reply_to_uid` names the message answered, so the draft joins its conversation.
cctorequiredbodyhtmlfolderrequiredmailboxsubjectattachmentsin_reply_to_uidin_reply_to_folderList the newest drafts, newest first.
limitfolderrequiredmailboxRead one draft in full by UID.
uidrequiredfolderrequiredmailboxReplace an existing draft with new content and attachments, keyed by UID. IMAP has no in-place edit: the replacement is stored first, then the original deleted. A reply draft stays in its conversation; `in_reply_to_uid` moves it to another one.
cctorequireduidrequiredbodyhtmlfolderrequiredmailboxsubjectattachmentsin_reply_to_uidin_reply_to_folderSend an email immediately from this mailbox, with any attachments. This is not reversible. Attachments that look sensitive (keys, credentials, CUI) are shown to the user to confirm first. For a reply, `in_reply_to_uid` names the message answered, so the reply joins its conversation.
cctorequiredbodyrequiredhtmlmailboxsubjectrequiredattachmentsin_reply_to_uidconfirm_sensitivein_reply_to_folderOpen a setup page in the user's browser to add a mailbox: Gmail, Outlook or Microsoft 365, Google Workspace, or any other. The user types any password on that page only; never ask for it in the chat. Closing the app's page box can read as "canceled" even after a mailbox was added: then call list_mailboxes to see whether it was.
Takes no parameters.
Build a problem report for the email-tool maintainer when the user wants to report a problem. It holds the versions, the app, the kinds of mailbox and the last few failed calls, with addresses, subjects, quoted text, home-folder paths, passwords, tokens and keys removed. It changes nothing and sends nothing; it says how the user can send it.
descriptionrequiredEmail a report from report_problem to the email-tool maintainer, from one of the user's mailboxes. The user's app always shows them the exact message to approve first. If the app cannot ask, nothing is sent: offer the GitHub link from report_problem instead.
reportrequiredmailbox90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
/plugin marketplace add skhan61/email-tool/plugin install email-tool@email-tooluv tool install email-tool-mcpemail-tool-mcp add work --auth microsoft --address [email protected]