Skip to main content
Glama
mathewcsims

mail-calendar-mcp

by mathewcsims

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault

No arguments

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

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