Apple Mail MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| APPLE_MAIL_ACCOUNTS | No | Comma-separated email addresses. Only accounts owning one of them are visible or reachable; everything else is refused inside the JXA bridge. Unset = every account. Set but empty = the server refuses to start. | |
| APPLE_MAIL_AUDIT_LOG | No | Audit log path. Default `~/Library/Logs/apple-mail-mcp/audit.log`. | ~/Library/Logs/apple-mail-mcp/audit.log |
| APPLE_MAIL_ALLOW_DRAFTS | No | `1` registers `create_draft`. Any other value keeps the server read-only. With APPLE_MAIL_ACCOUNTS set, sender is required and must be a listed address, because Mail files a draft under its default account otherwise. |
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": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_accountsA | List permitted Apple Mail accounts and their stable IDs. |
| list_mailboxesB | List account mailbox paths as arrays of names, including nested mailboxes. |
| search_messagesB | Search subject/sender case-insensitively in one mailbox. Empty query lists messages. Continue with next_offset even if this page has no matches: a scan also stops after about 30 seconds on slow mailboxes. Mail order is not guaranteed chronological; concurrent mailbox changes can affect pagination. |
| search_inboxesA | Search the inbox of every permitted account in one call: the first page from each. Empty query lists messages; unread_only=true reviews what is new. Each account is searched separately and a failing account is reported in its own entry without stopping the rest. Accounts skipped for lack of time are in not_reached. To go deeper in one account, call search_messages with that entry's account_id, mailbox_path and next_offset. |
| read_messageB | Read a message by ID within its account/mailbox, with bounded body length. |
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 5 tools
list_accounts and list_mailboxes clearly target different resources, and read_message is distinct. The only potential overlap is search_messages vs search_inboxes, but descriptions make the scope difference explicit (single mailbox vs all inboxes).
All tools follow a consistent snake_case verb_noun pattern (list_accounts, list_mailboxes, search_messages, search_inboxes, read_message). Verb choice is predictable and parallel.
Five tools is well-scoped for a read/search-oriented mail server. Each tool covers a distinct step (accounts, mailboxes, message search, inbox scan, message read) without redundancy.
The read/search surface is partially covered: accounts, mailboxes, search, and single-message read are present. However, there are no tools for sending/reply, deleting, moving, flagging read/unread, or retrieving attachments, which are notable gaps for an Apple Mail server.