mail-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Capabilities
Features and capabilities supported by this server
| 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 | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/p-l-ta/mail-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server