macos-mail-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List all Mail.app accounts with their type, enabled status, and email addresses. Known types are canonicalized; other raw Mail type text is preserved, including backend-reported unknown. |
| get_account_detailB | Get detailed information about a specific Mail.app account by name. Unavailable serverName, port and usesSsl values are null; account type preserves raw Mail values beyond known canonical types. |
| list_mailboxesA | List mailboxes in a Mail.app account, or all mailboxes across all accounts |
| create_mailboxA | Ensure a mailbox (folder) exists in a Mail.app account. For nesting, resolve the parent and use its full slash path at the account. Returns the full path read back from Mail and explicit created/alreadyExisted booleans; an existing mailbox is reused. |
| get_mailbox_infoB | Get detailed information about a specific mailbox in a Mail.app account |
| list_messagesB | List messages in a mailbox with pagination. Provide accountName and mailboxName to scope the listing. |
| get_messageA | Get the full details of a single message by its ID, including body, headers, recipients, and attachments. If mailboxName is omitted, searches all mailboxes in the account (slower but useful when you don't know which mailbox the message is in). |
| search_messagesA | Search one mailbox safely by default. Broad, content or large-mailbox searches require explicit allowSlow. Returns an object with messages and partial/timeout/skipped/error metadata within a 45 second server budget. Mail's queued Apple events can outlive process cancellation; wait or restart Mail after a timeout. |
| move_messageA | Move a message to a different mailbox. Gmail uses labels rather than folders. Moving a message adds the destination label but may not remove the original. |
| move_messagesA | Move multiple messages to a different mailbox in a single operation. More efficient than calling move_message multiple times. |
| delete_messageA | Delete a message. Uses Mail's delete verb which routes to the correct Trash. |
| flag_messageB | Set or clear the flag on a message. Optionally specify a flag colour index. |
| mark_readB | Mark a message as read or unread. |
| list_attachmentsA | List all attachments for a message, including their name, MIME type, file size, and download status. |
| save_attachmentA | Save a specific attachment from a message to disk. Creates the destination directory recursively before contacting Mail. |
| save_all_attachmentsB | Save all downloaded attachments from a message to disk. Creates the destination directory recursively before contacting Mail. |
| read_attachmentA | Read valid UTF-8 attachment text inline. Accepts text/*, application/json, application/xml, application/x-yaml MIME types or .txt, .csv, .json, .html, .md, .xml, .log extensions. Uses extension-based MIME fallback when unavailable. Use save_attachment for binary files. |
| send_messageA | Compose and send a new email message as plain text. Returns success when the message is queued for sending, along with the |
| reply_to_messageA | Reply to an existing email message. Returns the |
| forward_messageA | Forward an existing email message to a new recipient. Returns the |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 20 tools
Each tool targets a distinct resource+action, and singular/plural pairs (move_message vs move_messages, save_attachment vs save_all_attachments) are clearly differentiated by their descriptions. The only real overlap is list_messages versus search_messages (and get_message's fallback that scans all mailboxes), which could occasionally cause misselection when an agent just wants to find a message.
Nearly everything follows a predictable snake_case verb_noun pattern (list_accounts, get_message, move_message, save_attachment, reply_to_message). The one deviation is mark_read, which uses verb_adjective rather than verb_noun, though its meaning remains obvious.
20 tools is on the heavy side of the typical 3-15 band, but for a full email client each tool maps to a real operation (account, mailbox, message, attachment, and compose surfaces). Nothing looks redundant enough to cut outright, so the surface is scoped reasonably.
Message lifecycle is well covered (list, search, get, send, reply, forward, move, flag, mark_read, delete) along with attachment handling. However, the mailbox lifecycle is partial — create_mailbox exists with no delete_mailbox or rename_mailbox — and there is no draft/update-message support or batch flag/delete, leaving notable dead ends for common workflows.