mail-calendar-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 |
|---|---|
| mail_app_statusA | Check whether Mail.app is running and responding to Automation. Use this before other Mail tools to distinguish "app not running/asleep" from a genuine data error. |
| calendar_app_statusA | Check whether Calendar.app is running and responding to Automation. Use this before other Calendar tools to distinguish "app not running/asleep" from a genuine data error. |
| mail_list_accountsA | List every Mail account configured in Mail.app (iCloud, Google, Exchange, IMAP, etc.) with type, enabled state, and email addresses. |
| mail_get_accountA | Get details for a single Mail account by name. |
| mail_get_account_statsA | Get unread message counts for an account, broken down by mailbox (recursive). |
| mail_list_mailboxesA | List the full mailbox/folder tree (including nested subfolders and unread counts) for a Mail account. |
| mail_create_mailboxB | Create a new mailbox/folder under an account, optionally nested under an existing parent mailbox path. |
| mail_rename_mailboxA | Rename an existing mailbox/folder. Confirmed via testing to be unreliable via AppleScript/JXA on at least some accounts — expect a PLATFORM_LIMITATION error and rename manually in Mail.app as a fallback. |
| mail_delete_mailboxA | [IRREVERSIBLE] Permanently delete a mailbox/folder and everything in it. Known to be unreliable for cloud-synced accounts (iCloud/Exchange/IMAP) due to a Mail.app scripting limitation — may fail with PLATFORM_LIMITATION. Requires confirm:true. |
| mail_search_messagesA | Search/list messages in a mailbox with optional filters (read status, flagged status, subject/sender substring). Paginated: default limit 50, max 500. |
| mail_get_messageC | Get full metadata and plaintext body for a single message. |
| mail_get_message_sourceA | Get the full raw RFC822 source (headers + MIME body) of a message. Use this to extract HTML bodies or inspect MIME structure. |
| mail_get_message_headersB | Get just the raw header block of a message. |
| mail_list_attachmentsA | List attachments on a message (name, size, download state) without downloading them. |
| mail_get_attachmentA | Save one attachment (by its index from mail_list_attachments) to a local directory. Refuses attachments that would need more than a reasonable size — check size via mail_list_attachments first for anything large. |
| mail_set_read_statusC | Mark a message as read or unread. |
| mail_set_flaggedB | Flag or unflag a message. |
| mail_set_flag_colorB | Set a message's colored-flag index (-1 clears the flag; 0-6 select a color per Mail.app's flag palette). |
| mail_move_messageB | Move a message to a different mailbox (recoverable — just relocates it). |
| mail_copy_messageA | Copy a message to a different mailbox, leaving the original in place. |
| mail_delete_messageA | Move a message to Trash. Recoverable — it stays in the account's Trash mailbox until emptied. |
| mail_permanently_delete_messageA | [IRREVERSIBLE] Permanently delete a message, bypassing/purging Trash. This cannot be undone. Requires confirm:true. |
| mail_create_draftA | Create a new draft email (saved to the account's Drafts mailbox). Returns a composeSessionId usable with mail_send_message, mail_update_draft — valid only until Mail.app next restarts. |
| mail_create_reply_draftA | Create a reply draft to an existing message, with quoted original content prefilled. |
| mail_create_forward_draftB | Create a forward draft of an existing message. |
| mail_update_draftA | Update fields (subject/content/recipients) of an open draft compose session by composeSessionId. |
| mail_list_draftsA | List persisted drafts in an account's Drafts mailbox. |
| mail_delete_draftA | Delete a persisted draft from the Drafts mailbox (recoverable via Trash, like mail_delete_message). |
| mail_send_messageA | [IRREVERSIBLE] Send an email. Either pass composeSessionId to send an existing draft from this Mail.app session, or pass to/subject/content directly to compose and send in one call. Requires confirm:true. |
| mail_list_signaturesA | List all Mail signatures (name + content). |
| mail_create_signatureC | Create a new Mail signature. |
| mail_update_signatureC | Update an existing Mail signature's content. |
| mail_delete_signatureC | Delete a Mail signature. |
| mail_list_rulesA | List existing Mail rules (name, enabled state). Read-only: creating/editing rules is not achievable via AppleScript/JXA — Mail's rule automation only supports rules invoking a script as an action, not external rule creation. Manage rules in Mail.app > Settings > Rules. |
| calendar_list_calendarsA | List every calendar across all accounts (iCloud/Google/Exchange/etc.) with its index (use for calendar_* tools when names are ambiguous), writability, and description. |
| calendar_create_calendarA | Create a new calendar. Verifies the calendar actually exists after creation before reporting success (Calendar's scripting dictionary has known flaky spots). |
| calendar_rename_calendarB | Rename an existing calendar. |
| calendar_delete_calendarA | [IRREVERSIBLE] Permanently delete a calendar and everything in it. Confirmed via testing to be unreliable via scripting on at least some calendars — expect a PLATFORM_LIMITATION error and delete manually in Calendar.app as a fallback. Requires confirm:true. |
| calendar_list_eventsA | List events in a calendar within a bounded date range (max 366 days — required, not optional, to avoid multi-year recurrence-expansion queries hanging). Paginated. |
| calendar_search_eventsA | Search events in a calendar by summary text within a bounded date range (max 366 days). |
| calendar_get_eventA | Get a single event by its uid (stable iCalendar identifier — see calendar_list_events output). |
| calendar_create_eventA | Create a new event. Verifies the event actually exists (by uid) after creation before reporting success — Calendar's scripting dictionary has known flaky spots for event creation. |
| calendar_update_eventA | Update fields on an existing event by uid. Verifies changed fields actually took effect on re-read before reporting success — recurrence edits on already-recurring events are a known-flaky area. |
| calendar_delete_eventA | [IRREVERSIBLE] Delete an event by uid. Confirmed via testing: deleting a RECURRING event silently reports success without actually deleting it on this platform — this tool detects that and returns PLATFORM_LIMITATION instead of a false success; delete recurring events manually in Calendar.app (where you can choose 'this event' vs 'all future events'). Requires confirm:true. |
| calendar_add_alarmB | Add a display/sound/email alarm to an event, N minutes before it starts. |
| calendar_list_alarmsC | List all alarms (display/sound/mail) on an event. |
| calendar_remove_all_alarmsC | Remove every alarm from an event. |
| calendar_list_attendeesA | List attendees on an event. Note: once any attendee is added to an event you organize, an extra entry with a null email (the organizer/self) commonly appears — flagged as isLikelyOrganizerSelf, not a bug. |
| calendar_add_attendeeA | Add an attendee (by email) to an event. This has historically been an unreliable area of Calendar's AppleScript/JXA dictionary — the tool verifies the attendee actually appears on re-read before reporting success. |
| calendar_remove_attendeeA | Remove an attendee (by email) from an event. Unverified/experimental — treat failures as a real platform limitation, not a bug in this tool. |
| calendar_get_availabilityA | Compute free/busy gaps across one or more calendars within a bounded date range (max 366 days). This is computed locally from calendar_list_events-equivalent data, not a native Calendar.app feature — Calendar's scripting dictionary has no free/busy API. |
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/mathewcsims/mail-calendar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server