Apple Tools MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| APPLE_TOOLS_INDEX_DAYS_BACK | No | Number of days back to index when building the search index | 30 |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| smart_searchA | Intelligent search across Mail, Messages, and Calendar. Automatically determines which sources to search based on your query. Returns results grouped by time when multiple sources match. Use this for complex queries that might span multiple data sources. |
| mail_searchB | Semantic search for emails using AI embeddings. Finds emails by meaning, not just keywords. Supports filtering by sender, recipient, attachments, mailbox, sent/received, and flagged. |
| mail_recentA | Get most recent emails without semantic search. Use this when the user asks for 'recent emails', 'latest emails', 'what emails did I get', or 'unread emails'. |
| mail_dateB | Get all emails from a specific date. Supports natural language like 'today', 'yesterday', 'November 13', 'last Friday'. Use this when the user asks for emails on a specific date. |
| mail_readA | Read full email content. Use the file_path from mail_search or mail_recent results. |
| mail_findA | Exact email lookup in Mail's own database (not the semantic index, so it never waits on indexing and matches filters exactly). Returns JSON: one row per copy (the same Message-ID in INBOX and Sent is two rows) with message_id, subject, from, to, received, mailbox, account_id. Needs at least one of subject_prefix, subject_contains, from, to, message_ids. Trash is excluded unless include_trash or mailboxes asks for it. Pair with mail_trash message_ids to clear what it finds. |
| mail_linksA | Links in one email, decoded: each http(s) link with its visible text, from the HTML anchors (quoted-printable and base64 decoded, & unescaped) and bare URLs in the plain-text part. Use the id from mail_find. mail_read strips HTML, so it loses link targets; use this when you need the URL behind a button such as a sign-in or confirm link. Reads Mail's message file directly and never waits on the index. downloaded:false means Mail has not saved the file yet. |
| messages_searchB | Semantic search for iMessages/SMS using AI embeddings. Finds messages by meaning. Supports filtering by contact, group chats, specific group name, and attachments. |
| messages_recentA | Get most recent messages without semantic search. Use this when the user asks for 'recent messages', 'latest texts', or 'what messages did I get'. My own messages show a To: line naming the contact or group chat they were sent to. |
| messages_conversationA | Get full conversation history with a specific contact. Shows messages in chronological order. |
| calendar_searchB | Semantic search for calendar events using AI embeddings. Finds events by meaning. Supports filtering by calendar name and all-day events. |
| calendar_dateA | Get all events on a specific date. Supports natural language dates like 'today', 'tomorrow', 'next Tuesday', 'Jan 15'. |
| calendar_free_timeB | Find free time slots on a specific date. Analyzes calendar to find available time windows. |
| mail_sendersB | List most frequent email senders. Helps identify who you communicate with most. |
| rebuild_indexA | Rebuild the search index for one or more data sources. This clears the existing index and re-indexes all content from scratch. Use this if search results are stale, missing, or if the index is corrupted. Can rebuild emails, messages, calendar, or all sources at once. |
| audit_indexB | Audit search index against source data with 0% tolerance. Reports missing items, orphaned entries, and duplicates with detailed file paths and remediation suggestions. Validates 100% of source data. |
| messages_contactsB | List all contacts you've messaged, sorted by most recent. Shows message count and last message date. |
| calendar_upcomingA | Get next N upcoming events across all calendars. Simpler than calendar_search for quick schedule overview. |
| calendar_weekA | Get all events for the current week or a future week. Shows events grouped by day. |
| mail_threadB | Get all emails in a conversation thread. Finds related emails by matching subject lines. |
| calendar_recurringB | List recurring events (events that appear multiple times). Shows upcoming occurrences. |
| contacts_searchB | Search your contacts by name, email, phone, or organization. Returns matching contacts with all their details. |
| contacts_lookupB | Look up a specific contact by email, phone number, or name. Returns full contact details including all emails and phone numbers. |
| person_searchA | Search ALL communication with a specific person across Mail, Messages, and Calendar. Automatically finds their emails and phone numbers from Contacts to search all sources. |
| mail_sendA | Send an email through Mail.app. Success means the message was verified in Sent or is still in Outbox (still sending) — AppleScript send returning is not enough. Sending to more than one recipient in total (to + cc + bcc) requires confirm=true. dry_run and unconfirmed multi-recipient calls are not deliveries (MCP isError). A send hang is a timeout, not TCC, unless Mail reports -1743/-10004; hang recover matches To+subject (Message-ID when available), never subject alone. Clients must Sent-check before retrying a timed-out send. |
| mail_draftA | Save an email to Drafts without sending it. Drafts are never delivered, so no recipient confirmation is required. |
| mail_replyA | Reply to an existing email. The reply text is pasted above the quoted original in a visible Mail window (System Events focus on the message body, then Command-Up and clipboard paste — not Cmd-A, which would replace the quote; AppleScript content is not set because Mail 16 leaves it empty). reply_all=true fans out to every original recipient and requires confirm=true. A real send is verified in Sent/Outbox before success. A send hang is a timeout, not TCC, unless Mail reports -1743/-10004; hang recover uses In-Reply-To. Clients must Sent-check before retrying a timed-out send. |
| mail_forwardA | Forward an existing email to new recipients. An optional note is pasted above the forwarded original in a visible Mail window (same System Events prepend as mail_reply; AppleScript content is not set). More than one recipient requires confirm=true. A real send is verified in Sent/Outbox before success. A send hang is a timeout, not TCC, unless Mail reports -1743/-10004; hang recover matches intended To plus Fwd: subject or original Message-ID. Clients must Sent-check before retrying a timed-out send. |
| mail_markC | Mark an email as read or unread. |
| mail_archiveC | Move an email to its account's Archive mailbox. |
| mail_trashA | Move email to Trash. Destructive: requires confirm=true, otherwise the call only reports what would be trashed. One message: message_id or file_path. Many: message_ids (up to 500, e.g. from mail_find) moves every copy of each (INBOX, Sent, Archive...) to that account's Trash; each copy's Message-ID is re-checked before it moves. A bulk call stops starting new moves after ~35s and reports 'remaining'; run it again for the rest. |
| messages_sendA | Send an iMessage or SMS. Address it with 'to' (E.164 phone numbers like +15551234567, or Apple ID emails) or with 'chat_id' (a chat GUID from chat.db, e.g. 'iMessage;-;+15551234567' or 'iMessage;+;chat123456'). Group chats and multiple recipients require confirm=true. |
| calendar_list_calendarsA | List the calendars in Calendar.app with their writability, so events land on the intended calendar instead of the default. |
| calendar_addB | Create a calendar event. Times must be explicit local datetimes (YYYY-MM-DD HH:MM). Supports recurrence (FREQ=DAILY/WEEKLY/MONTHLY/YEARLY with INTERVAL, COUNT or UNTIL, BYDAY) and alerts in minutes before the start. Returns the new event id. |
| calendar_editA | Update an existing event by id. Pass only the fields to change. Setting alerts_minutes_before replaces the event's existing alerts. |
| calendar_removeA | Delete a calendar event by id. Destructive: requires confirm=true, otherwise the call only reports what would be deleted. |
| calendar_rsvpB | Respond to a calendar invitation: accept, decline, or tentative. |
| contacts_addC | Create a contact in Contacts.app. Returns the new contact id. |
| contacts_editB | Update a contact by id. Emails and phones are added unless replace_emails / replace_phones is set; replacing with an empty list removes them and requires confirm=true. |
| contacts_removeA | Delete a contact by id. Destructive: requires confirm=true, otherwise the call only reports what would be deleted. |
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 40 tools
Most tools have clearly distinct purposes and detailed descriptions that help differentiate them. However, some overlap exists (e.g., contacts_search vs contacts_lookup, multiple search variants across Mail and Calendar) that could cause occasional misselection.
Tool names follow a consistent snake_case pattern with domain prefixes (mail_, messages_, calendar_, contacts_) for the vast majority of tools. A few cross-cutting tools (smart_search, person_search, rebuild_index, audit_index) lack prefixes, but are still readable and unambiguous.
40 tools across four Apple apps plus indexing is on the heavy side. While the broad scope justifies many tools, some retrieval functions (e.g., mail_search, mail_find, mail_recent, mail_date, smart_search) feel redundant and could be consolidated.
The surface covers core CRUD and lifecycle operations for Mail, Messages, Calendar, and Contacts, plus indexing utilities. Minor gaps exist (e.g., message deletion, Mail flagging, calendar attendee management), but agents can work around them for most workflows.