apple-productivity-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 |
|---|---|
| apple_mail_list_accountsA | Read-only: list local Apple Mail account names, sender addresses, and mailbox names. Use this before other Mail tools when the exact names are unknown. |
| apple_mail_listA | Read-only: list local Apple Mail metadata. Returns message ID, sender, subject, received time, and read/flag status. It does not read message bodies. |
| apple_mail_getA | Read-only: read one local Apple Mail message, including its body. Use apple_mail_list first to obtain the local mail id. |
| apple_mail_sendB | Send an Apple Mail message from the selected local account. This immediately sends email to the specified recipients. |
| apple_mail_update_statusA | Modify a local Apple Mail message read/unread and/or flagged status. |
| apple_mail_moveA | Move a local Apple Mail message to another mailbox in the same account. |
| apple_mail_deleteA | Delete a local Apple Mail message. This is destructive and moves the message according to Mail.app deletion behavior. |
| apple_calendar_list_calendarsA | Read-only: list local Calendar.app calendar names and whether each calendar is writable. Use this before creating or modifying events when the exact calendar name is unknown. |
| apple_calendar_list_eventsB | Read-only: list local Calendar.app events in a time range. |
| apple_calendar_create_eventC | Create a new local Calendar.app event. |
| apple_calendar_update_eventB | Modify an existing local Calendar.app event. Obtain the uid from apple_calendar_list_events. |
| apple_calendar_delete_eventA | Delete an existing local Calendar.app event. This is destructive. |
| apple_reminders_list_listsA | Read-only: list local Apple Reminders list names and IDs. Use this before creating reminders when the exact list name is unknown. |
| apple_reminders_listC | Read-only: list local Apple Reminders. |
| apple_reminders_createC | Create a local Apple Reminder. |
| apple_reminders_updateC | Modify an existing local Apple Reminder. |
| apple_reminders_completeB | Mark an existing local Apple Reminder as completed. |
| apple_reminders_deleteA | Delete an existing local Apple Reminder. This is destructive. |
| apple_reminders_list_accountsA | Read-only: list Reminders account IDs and names. |
| apple_reminders_create_listC | Create a Reminders list in an exact account ID. |
| apple_reminders_rename_listB | Rename a Reminders list by ID. |
| apple_reminders_delete_listB | Delete a Reminders list and its reminders. Destructive; may sync to iCloud. |
| apple_reminders_getC | Read-only: get reminder notes, completion, due time, alarm, priority, and flag. |
| apple_reminders_searchC | Read-only: search reminder titles within selected lists. |
| apple_reminders_set_completedC | Set a reminder completion state, including reopening a completed reminder. |
| apple_reminders_set_flaggedC | Set or clear a reminder flag. |
| apple_reminders_set_alarmC | Set or clear a reminder notification date. |
| apple_calendar_create_calendarB | Create a Calendar.app calendar using the app default account. |
| apple_calendar_rename_calendarB | Rename a uniquely named writable calendar. |
| apple_calendar_delete_calendarB | Delete a uniquely named writable calendar and all its events. Destructive. |
| apple_calendar_get_eventB | Read-only: get event notes, recurrence, URL, attendees, and display alarms. |
| apple_calendar_add_alarmB | Add a display alarm to an event. Negative minutes means before the event. |
| apple_calendar_set_recurrenceA | Set an event recurrence rule (for example FREQ=WEEKLY;COUNT=5); empty string clears recurrence. Calendar validates the rule. |
| apple_calendar_set_urlB | Set or clear an event HTTP/HTTPS URL. |
| apple_mail_searchA | Read-only: search a mailbox by subject or sender; returns bounded metadata without bodies. |
| apple_mail_create_draftA | Create a visible outgoing Mail draft. Does not send; Mail controls draft persistence. |
| apple_mail_create_mailboxC | Create a mailbox in the selected Mail account. |
| apple_mail_list_attachmentsB | Read-only: list attachment metadata for one message. |
| apple_mail_save_attachmentB | Save one attachment to a new file under APPLE_MCP_FILE_ROOTS. Existing paths are refused. |
| apple_pages_list_documentsB | List open Pages documents. Does not launch a stopped application. |
| apple_pages_openA | Open a local Pages document. Launches the app and may show its window or import dialogs. |
| apple_pages_createA | Create an unsaved Pages document. May show a window. Use the returned name for subsequent operations; save explicitly. |
| apple_pages_saveA | Save Pages to a .pages path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion. |
| apple_pages_closeA | Close one Pages document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes. |
| apple_pages_exportA | Export Pages to PDF or its supported Microsoft Office format. Requires an existing parent directory; existing destinations require overwrite:true. Large exports may exceed the automation timeout. |
| apple_pages_read_textA | Read Pages plain text with character pagination. Pages supports word-processing body text only; rich formatting and text boxes are not returned. |
| apple_pages_set_textA | Replace or append Pages plain text. This can remove existing rich formatting; changes may autosave and sync. Pages requires a word-processing document. |
| apple_numbers_list_documentsB | List open Numbers documents. Does not launch a stopped application. |
| apple_numbers_openB | Open a local Numbers document. Launches the app and may show its window or import dialogs. |
| apple_numbers_createA | Create an unsaved Numbers document. May show a window. Use the returned name for subsequent operations; save explicitly. |
| apple_numbers_saveA | Save Numbers to a .numbers path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion. |
| apple_numbers_closeA | Close one Numbers document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes. |
| apple_numbers_exportA | Export Numbers to PDF or its supported Microsoft Office format. Requires an existing parent directory; existing destinations require overwrite:true. Large exports may exceed the automation timeout. |
| apple_keynote_list_documentsA | List open Keynote documents. Does not launch a stopped application. |
| apple_keynote_openA | Open a local Keynote document. Launches the app and may show its window or import dialogs. |
| apple_keynote_createA | Create an unsaved Keynote document. May show a window. Use the returned name for subsequent operations; save explicitly. |
| apple_keynote_saveA | Save Keynote to a .key path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion. |
| apple_keynote_closeA | Close one Keynote document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes. |
| apple_keynote_exportA | Export Keynote to PDF or its supported Microsoft Office format. Requires an existing parent directory; existing destinations require overwrite:true. Large exports may exceed the automation timeout. |
| apple_textedit_list_documentsA | List open TextEdit documents. Does not launch a stopped application. |
| apple_textedit_openB | Open a local TextEdit document. Launches the app and may show its window or import dialogs. |
| apple_textedit_createA | Create an unsaved TextEdit document. May show a window. Use the returned name for subsequent operations; save explicitly. |
| apple_textedit_saveA | Save TextEdit to a .rtf path with an existing parent directory. Existing paths, including the current document path, require overwrite:true. TextEdit saves RTF; no implicit format conversion. |
| apple_textedit_closeA | Close one TextEdit document. Refuses unsaved changes or a document without a saved path unless discardChanges:true; save separately to retain changes. |
| apple_textedit_read_textA | Read TextEdit plain text with character pagination. Pages supports word-processing body text only; rich formatting and text boxes are not returned. |
| apple_textedit_set_textA | Replace or append TextEdit plain text. This can remove existing rich formatting; changes may autosave and sync. Pages requires a word-processing document. |
| apple_numbers_list_sheetsB | List sheets in an open Numbers spreadsheet. |
| apple_numbers_list_tablesC | List table names and dimensions in a Numbers sheet. |
| apple_numbers_create_tableB | Add a named table without header or footer rows to a Numbers sheet. Rejects duplicate table names. |
| apple_numbers_read_rangeA | Read values, formatted text and formulas from a rectangular Numbers range, using 1-based row and column indexes. Maximum 200 cells; strings are truncated to 500 characters per field. |
| apple_numbers_write_rangeA | Write a rectangular grid to existing Numbers cells using 1-based indexes. null clears a cell. Formula strings require allowFormulas:true. Bounds are checked before writing; an application failure may leave partial changes. May autosave and sync. |
| apple_keynote_list_slidesA | Read slide indexes, default title/body text, presenter notes and skipped status. Does not extract other text boxes, charts, images, or media. Returned text is bounded. |
| apple_keynote_add_slideB | Append a Keynote slide, optionally using an exact master-slide layout name, and set its default title/body, presenter notes and skipped status. Changes may autosave and sync. |
| apple_keynote_update_slideA | Update default title/body, presenter notes or skipped status of a Keynote slide using its current 1-based index. List slides immediately before modifying; changes may autosave and sync. |
| apple_notes_list_accountsB | Read-only: list Notes account IDs and names. |
| apple_notes_list_foldersB | Read-only: list Notes folder IDs and names, optionally within one account. |
| apple_notes_listB | Read-only: list note metadata without reading note bodies, optionally within a folder. |
| apple_notes_searchB | Read-only: find Notes by title substring; this does not search note bodies. |
| apple_notes_getA | Read-only: get note metadata and bounded plain text or HTML. Locked notes return metadata only. |
| apple_notes_createA | Create a note in an explicit folder, with an escaped title heading and optional HTML body. May sync to iCloud. |
| apple_notes_updateA | Change a note title and/or replace its entire HTML body. Replacing the body can remove formatting or attachments; locked notes are rejected. |
| apple_notes_deleteB | Delete an unlocked note using Notes deletion behavior. May sync deletion to other devices. |
| apple_notes_create_folderA | Create a top-level Notes folder in an explicit account. |
| apple_contacts_searchA | Read-only: find contacts by name or organization substring. Returns summaries, not all contact details. |
| apple_contacts_getB | Read-only: get one contact with names, organization, emails, phones, and bounded notes. |
| apple_contacts_list_groupsC | Read-only: list Contacts groups. |
| apple_contacts_list_group_membersB | Read-only: list summaries of people in one Contacts group. |
| apple_contacts_createB | Create and save a contact, optionally with labeled emails and phone numbers. Refuses to run while Contacts has unsaved edits. |
| apple_contacts_updateA | Update and save selected name, organization, job title, or note fields. Leaves phone and email collections unchanged. Refuses pending unsaved Contacts edits. |
| apple_contacts_create_groupA | Create and save a Contacts group. Refuses pending unsaved Contacts edits. |
| apple_contacts_add_to_groupB | Add an existing contact to a group and save Contacts changes. |
| apple_contacts_remove_from_groupA | Remove a contact from a group without deleting the contact; saves Contacts changes. |
| apple_safari_list_tabsA | Read-only: list Safari tab titles, URLs, window IDs, and one-based tab indices. Tab indices change when tabs close. |
| apple_safari_get_tabA | Read-only: read one Safari tab title and URL, with optional bounded page text using Safari scripting. Does not execute page JavaScript. |
| apple_safari_open_tabB | Open an HTTP(S) URL in a new Safari tab. This loads the URL and can contact a remote website. |
| apple_safari_navigate_tabA | Navigate one Safari tab to an HTTP(S) URL. Requires its previously observed URL to avoid modifying a different tab after indices shift. |
| apple_safari_close_tabA | Close a Safari tab; unsaved page input may be lost. Requires its previously observed URL. |
| apple_safari_add_reading_listA | Add an HTTP(S) URL, optional title, and preview to Safari Reading List; may sync through iCloud. |
| apple_music_list_playlistsA | Read-only: list Music playlist persistent IDs, names, and kinds. |
| apple_music_list_tracksB | Read-only: list Music library or playlist track metadata; IDs are persistent hexadecimal IDs. |
| apple_music_searchB | Read-only: search an explicit Music playlist. Use list_playlists to identify the library playlist. |
| apple_music_get_trackB | Read-only: get one Music library track by persistent ID. |
| apple_music_get_playback_stateA | Read-only: get Music playback state, volume, position, and current track when playing or paused. |
| apple_music_playbackA | Control Music playback: play/resume, pause, stop, next, or previous. Play optionally targets one track or playlist. Playback can stream audio. |
| apple_music_set_volumeB | Set Music playback volume from 0 to 100. |
| apple_music_create_playlistC | Create a new user playlist in Music. May sync through the music library. |
| apple_music_add_tracks_to_playlistA | Copy existing library tracks into a regular user playlist. Rejects smart and special playlists. Repeating may add duplicates. |
| apple_photos_list_albumsB | Read-only: list Photos album IDs and names. |
| apple_photos_listB | Read-only: list Photos library or album media metadata without exporting image data. |
| apple_photos_searchC | Read-only: search Photos using its native search command; returns bounded metadata results. |
| apple_photos_getB | Read-only: get one Photos media item with metadata, keywords, and bounded description. |
| apple_photos_create_albumB | Create a new top-level Photos album. |
| apple_photos_add_to_albumB | Add existing Photos media items to an album. Does not import or delete files. |
| apple_photos_importA | Import existing local files into Photos, optionally into an album. Duplicate checking remains enabled; imported media may upload to iCloud Photos. |
| apple_photos_exportA | Export selected Photos media into an existing empty local directory. Requires an empty directory to reduce overwrite risk; originals can trigger iCloud downloads. Exports originals or rendered JPEGs. |
| apple_photos_updateB | Update a Photos media title, description, favorite flag, and/or replace its keyword list. May sync through iCloud Photos. |
| apple_messages_list_accountsB | Read-only: list Messages accounts (also called services), IDs, service types, and connection states. serviceType is null if macOS does not expose it. |
| apple_messages_list_chatsA | Read-only: list Messages chat metadata and participant handles. Apple scripting does not expose message history. |
| apple_messages_sendA | Immediately send text to one explicit phone number or email through a selected connected Messages account. This is a real outgoing message; success means submitted, not delivered. |
| apple_system_capabilitiesA | Read-only: discover installed Apple apps, platform, file roots, and allowed Shortcuts. Does not test Automation permission. |
| apple_system_open_appB | Launch or activate a supported Apple app. |
| apple_files_listA | Read-only: list one allowed folder. Bounded, non-recursive; hidden entries excluded by default. |
| apple_files_infoC | Read-only: file/folder metadata within allowed roots. |
| apple_files_read_textA | Read-only: read bounded UTF-8 text from an allowed regular file. Does not parse Pages, PDF, or other binary formats. |
| apple_files_write_textA | Create a UTF-8 file in an allowed folder. Existing files require overwrite=true. |
| apple_files_create_folderB | Create one new folder under an existing allowed folder. |
| apple_files_copyB | Copy one regular file within allowed roots. Never overwrites a destination. |
| apple_files_searchA | Read-only: Spotlight filename search within one allowed folder. Results depend on local Spotlight indexing. |
| apple_files_trashA | Move an allowed file or folder to Finder Trash. Symbolic links are refused to avoid deleting their targets. May sync deletions through iCloud. Never empties Trash. |
| apple_finder_revealC | Reveal an allowed file or folder in Finder. |
| apple_finder_selectionA | Read-only: get selected Finder items (names and URLs). Does not read contents. |
| apple_shortcuts_listB | Read-only: list installed Shortcuts, optionally in one folder. |
| apple_shortcuts_list_foldersB | Read-only: list Shortcuts folders. |
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 133 tools
Each tool targets a specific Apple app and action, with app prefixes (e.g., apple_pages_, apple_mail_) clearly separating similar operations like read_text or list across different apps. However, the sheer number of tools (133) and the presence of multiple list/read/search variants for different resources within the same app could cause an agent to momentarily confuse tools without careful reading of descriptions.
All tool names follow a strict snake_case pattern: apple_<app>_<action>. There is no mixing of camelCase or other conventions, and the app prefix consistently disambiguates the domain.
With 133 tools, the server is far beyond the typical 3–15 range and even beyond the 25+ threshold for 'too many'. This extreme count creates significant cognitive overhead and selection risk for an agent, regardless of how well the tools are organized.
The surface covers many Apple apps extensively, but notable gaps exist, such as no delete operation for Contacts (only create/update and group management) and no file move/rename in Files. These missing CRUD/lifecycle operations are significant for a productivity suite and could force agents to work around the server.