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 |
|---|---|
| search_emailsA | Search Mail.app messages via the Envelope Index database. Returns rich metadata including RFC message-id (usable with read_email, reply_to_email, set_message_flags). |
| read_emailA | Read full body of a message by its RFC message-id. Uses Mail.app via AppleScript so it works for IMAP/iCloud/Exchange messages without filesystem access. |
| list_accounts_and_mailboxesA | List all configured Mail.app accounts and their mailboxes with unread counts. |
| list_recentB | List recent messages in a mailbox of a specific account. |
| send_emailB | Send a new email via Mail.app from an existing account. |
| reply_to_emailB | Reply to an existing message identified by RFC message-id. |
| set_message_flagsB | Set read and/or flagged status on a message identified by RFC message-id. |
| move_emailA | Move a message to a different mailbox by RFC message-id. Use list_accounts_and_mailboxes to get exact mailbox names. |
| trash_emailA | Move a message to Deleted Messages (trash) by RFC message-id. Does not permanently delete. |
| create_mailboxA | Create a new mailbox (folder) in a Mail.app account. |
| bulk_mark_readA | Mark multiple messages as read in one call — by mailbox, sender substring, or both. Far faster than calling set_message_flags per message. |
| bulk_applyA | Apply one action (mark_read, mark_unread, flag, unflag, trash, or move) to a list of messages by RFC message-id, in a single batched call — far faster than calling set_message_flags/trash_email/move_email once per message. |
| bulk_flagA | Flag or unflag multiple messages in one call — by mailbox, sender substring, or both. Queries the Envelope Index for matching IDs then updates in a single batched AppleScript call. |
| bulk_trashA | Move multiple messages to trash in one call — by mailbox, sender substring, or both. Queries the Envelope Index for matching IDs then trashes in a single batched AppleScript call. |
| bulk_moveA | Move multiple messages to a destination mailbox in one call — by mailbox, sender substring, or both. Queries the Envelope Index for matching IDs then moves in a single batched AppleScript call. |
| get_unsubscribe_linkA | Extract unsubscribe URLs from a message — checks the List-Unsubscribe header first (reliable), then scans the plain-text body as a fallback. |
| list_sendersA | Return a grouped count of senders across mailboxes — who sends how many messages, how many are unread, and when the last arrived. By default excludes Deleted Messages, Junk, Sent, and Drafts so counts reflect live mail only. Ideal for identifying bulk senders and noise. |
| empty_mailboxA | Delete every message in a mailbox at once — moves to Deleted Messages, or permanently removes if the mailbox is already Deleted Messages/Trash. Use for Junk, Trash, or bulk-cleanup folders. |
| list_rulesA | List all Mail.app rules with their conditions and actions. Reads directly from SyncedRules.plist. |
| create_ruleA | Create a new Mail.app rule. A timestamped backup of SyncedRules.plist is made before writing. Mail.app may need to be restarted for the rule to take effect. |
| update_ruleA | Update an existing Mail.app rule by its RuleId (use list_rules to find IDs). A timestamped backup is made before writing. Mail.app may need to be restarted for changes to take effect. |
| delete_ruleA | Permanently delete a Mail.app rule by its RuleId. A timestamped backup of SyncedRules.plist is made before writing so the deletion can be undone. Mail.app may need to be restarted for the change to take effect. |
| check_compatibilityA | Probe each mail-mcp dependency (Envelope Index schema, SyncedRules.plist, AppleScript, MailData directory) and report pass/fail. Run this after a macOS update to verify nothing broke. |
| submit_feedbackA | Open a pre-filled GitHub issue for mail-mcp (p-l-ta/mail-mcp) in the default browser. Automatically includes macOS version and mail-mcp version in the issue body. |
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 24 tools
The tool purposes are mostly distinct, and descriptions clarify usage. The specialized bulk_* tools overlap with generic bulk_apply, but the query-based vs. ID-list distinction is clear. Overall, an agent can reliably select the right tool.
All tools use a consistent snake_case verb_noun pattern, with bulk_ prefix uniformly marking batch operations. Minor deviations like list_recent are readable and don't disrupt the general convention.
At 24 tools, the server is on the heavy side of the typical range. The bulk operations could be consolidated into fewer generic tools, but the broad scope justifies most of the count.
Core email workflows (send, read, reply, search, move, trash, flags) and full rule CRUD are covered. Missing mailbox update/delete and forward/draft operations are workable gaps rather than critical failures.