Apple Tools (Unified)
PYPI · APPLE-TOOLS-MCP · 2 COMPONENTS
Unified Apple ecosystem MCP server for macOS: Mail, Calendar, Notes, Files, Messages, and more.
Available components
Last scanned (22 hours ago)
Scores higher than 99% of PyPI servers
Category Productivity and Notes
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs setuptools.build_meta at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
- 1 of 39 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to JonathanRReed/Apple-MCPs). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 1 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability85
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Tool/resource definitions use about 16830 tokens (~82/item across 203 items; 184 tools + 19 resources), lean.Pass
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 14 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 186 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 22 Oct 26 +6
- Stability: pass → unverified ▼ security
- Tool safety: pass → unverified ▼ security
- Schema quality: 44 → 82 ▼ functional
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Tool coverage: 1% → 100% ▲ functional
- Schema quality: poor → good functional
- Package version: 1.1.2 → 1.1.3 functional
- 18 Oct 26 0
- Stability: 0.97 → pass security
- 17 Oct 26 +41
- Injection markers: unverified → pass ▲ security
- Stability: unverified → 0.97 ▲ functional
- Tool coverage: unverified → 100 ▲ functional
- MCP protocol: unverified → pass ▲ functional
- Schema quality: unverified → 100 ▲ functional
- Package version: 1.0.5 → 1.1.2 functional
- 16 Oct 26 0
- Package version: 1.0.5 → 1.1.2 functional
- 15 Oct 26 0
- Tool safety: Tool safety not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no tool text to scan. security
- Stability: Stability not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no schema to compare. security
- Tool coverage: Tool coverage not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no tool definitions to assess. functional
- Capabilities: Protocol version not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we never saw its MCP handshake. functional
- Schema quality: Schema quality not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no schema to assess. functional
- 14 Oct 26 0
- Stability: Stability not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no schema to compare. security
- Tool safety: Tool safety not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no tool text to scan. security
- Schema quality: Schema quality not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no schema to assess. functional
- Capabilities: Protocol version not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we never saw its MCP handshake. functional
- Tool coverage: Tool coverage not yet verified: this server's registry entry declares environment variables (an API key or similar), and its server did not start in our sandbox, so we have no tool definitions to assess. functional
- Package version: 1.0.5 → 1.1.2 functional
- Package version: 1.0.5 → 1.1.1 functional
- 13 Oct 26 0
- Package version: 1.0.5 → 1.1.1 functional
- 12 Oct 26 −41
- Tool safety: pass → unverified ▼ security
- Stability: pass → unverified ▼ security
- Capabilities: pass → unverified ▼ functional
- Tool coverage: 100 → unverified ▼ functional
- Schema quality: 100 → unverified ▼ functional
- Package version: 1.0.5 → 1.1.0 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 23 Oct 2026 · Analysed pypi/apple-tools-mcp@1.1.3
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | pypi |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | JonathanRReed/Apple-MCPs |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/JonathanRReed/Apple-MCPs/.github/workflows/release.yml@refs/tags/v1.1.3 |
| Rekor log index | 3371477963 |
| Predicate type | PyPI publish attestation https://docs.pypi.org/attestations/publish/v1 |
| Subject digest | sha256:855b038a07c665f7f7d1e5831e19e5244475e154f09059fa9837c11ec58db7c3 |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | setuptools.build_meta |
Background: Why install scripts are a supply-chain risk →
Dependencies 39 packages
| Packages resolved | 39 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
mail_reply_latest_in_thread Reply To Latest In Thread ~180
Find the latest related message in the same mailbox thread and reply to that message.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Plain-text reply body, placed above the quoted original. |
| from_account | – | – | Sender: an account email address or account name from mail_list_mailboxes. Omit to use Mail's default account. |
| limit | – | – | Maximum number of thread messages to consider (1 or more); the thread is matched by normalized subject in the anchor message's mailbox. |
| message_id | string | yes | Message ID exactly as returned by mail_search_messages, mail_get_thread or mail_get_message; it encodes the account, mailbox and message. Any message in the thread; the reply goes to the latest one. |
| reply_all | boolean | – | True to reply to the sender and all other recipients; false (default) replies to the sender only. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
mail_reply_message Reply to Message ~157
Reply to an existing email message. Provide a message_id and body text. Set reply_all=true to reply to all recipients. Optionally specify from_account.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Plain-text reply body, placed above the quoted original. |
| from_account | – | – | Sender: an account email address or account name from mail_list_mailboxes. Omit to use Mail's default account. |
| message_id | string | yes | Message ID exactly as returned by mail_search_messages, mail_get_thread or mail_get_message; it encodes the account, mailbox and message. This is the message being replied to. |
| reply_all | boolean | – | True to reply to the sender and all other recipients; false (default) replies to the sender only. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
mail_search_messages Search Mail ~177
Search Apple Mail messages by query with optional account, mailbox and unread filters. Without account, accounts are searched in Mail's order and the limit can be filled by the first one; pass account (as returned by mail_list_mailboxes) to search a specific account.
| Name | Type | Req | Description |
|---|---|---|---|
| account | – | – | Mail account name as returned by mail_list_mailboxes. Omit to cover all accounts. |
| limit | – | – | Maximum number of messages to return, 1 to 100. |
| mailbox | – | – | Mailbox name to search, such as "INBOX" or "Archive", as returned by mail_list_mailboxes. Omit to search all mailboxes. |
| query | string | yes | Text matched against message subject or sender (case-insensitive contains). Use "*" to match every message. |
| unread_only | boolean | – | True to return only unread messages. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
mail_send_message Send Email ~163
Send an email immediately via Apple Mail. Optionally specify from_account as an email address or account name to set the sender.
| Name | Type | Req | Description |
|---|---|---|---|
| attachments | – | – | Absolute paths of files to attach. Each must be a regular file under the configured APPLE_MAIL_MCP_ALLOWED_ATTACHMENT_ROOT; attachments are rejected when no root is configured. |
| bcc | – | – | Blind carbon-copy email addresses, one per item. |
| body | string | – | Plain-text message body. |
| cc | – | – | Carbon-copy email addresses, one per item. |
| from_account | – | – | Sender: an account email address or account name from mail_list_mailboxes. Omit to use Mail's default account. |
| subject | string | – | Subject line. |
| to | array | yes | Recipient email addresses, one per item. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
maps_build_maps_link Build Maps Link ~91
Build an Apple Maps URL for a destination or route.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | string | yes | Place name, address or point of interest, as you would type it into Apple Maps. |
| origin | – | – | Optional starting place name or address. Omit to start from the user's current location in Maps. |
| transport | string | – | Travel mode: driving, walking or transit. Any other value is treated as driving. |
| Name | Type | Req | Description |
|---|---|---|---|
| ok | boolean | – | – |
| url | string | yes | – |
No examples provided.
maps_get_directions Get Directions ~84
Get Apple Maps route details between an origin and destination.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | string | yes | Destination place name or address; the first Apple Maps match is used. |
| origin | string | yes | Starting place name or address; the first Apple Maps match is used. |
| transport | string | – | Travel mode: driving, walking or transit. Any other value is treated as driving. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
maps_health Maps Health ~16
Report the active Apple Maps MCP configuration.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | array | yes | – |
| helper_available | boolean | yes | – |
| helper_compiled | boolean | yes | – |
| ok | boolean | – | – |
| server_name | string | yes | – |
| supports | array | yes | – |
| transport | string | yes | – |
| version | string | yes | – |
No examples provided.
maps_open_directions_in_maps Open Directions In Maps ~90
Open directions in the Apple Maps app.
| Name | Type | Req | Description |
|---|---|---|---|
| destination | string | yes | Place name, address or point of interest, as you would type it into Apple Maps. |
| origin | – | – | Optional starting place name or address. Omit to start from the user's current location in Maps. |
| transport | string | – | Travel mode: driving, walking or transit. Any other value is treated as driving. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
maps_search_places Search Places ~56
Search Apple Maps for matching places.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of places to return. |
| query | string | yes | What to search for, such as a business name, category ("coffee near Union Square") or address. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_get_conversation Get Conversation ~108
Fetch a single Apple Messages conversation with paginated messages.
| Name | Type | Req | Description |
|---|---|---|---|
| chat_id | string | yes | Conversation id: the chat_id returned by messages_list_conversations or messages_search_messages. Pass it unchanged. |
| limit | – | – | Maximum number of the latest messages to select; must be 1 or more. The selected page is returned oldest first, so the last item is the most recent. |
| offset | – | – | Number of newest messages to skip, for paging back through history; 0 or more. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_get_message Get Message ~43
Fetch a single Apple Messages message by message_id.
| Name | Type | Req | Description |
|---|---|---|---|
| message_id | string | yes | Message id: the message_id returned by messages_get_conversation or messages_search_messages. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_health Messages Health ~16
Report Messages server configuration and capability status.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| automation_access | boolean | yes | – |
| automation_access_error | – | – | – |
| automation_access_error_code | – | – | – |
| automation_access_status | string | – | – |
| automation_access_suggestion | – | – | – |
| capabilities | – | yes | – |
| history_access | boolean | yes | – |
| history_access_error | – | – | – |
| history_access_suggestion | – | – | – |
| ok | boolean | – | – |
| safety_mode | string | yes | – |
| safety_mode_warning | – | – | Set when the configured safety value was invalid or blank and the server fell back to a safer mode |
| server_name | string | yes | – |
| transport | string | yes | – |
| version | string | yes | – |
No examples provided.
messages_list_attachments List Message Attachments ~115
List Apple Messages attachments by chat or message.
| Name | Type | Req | Description |
|---|---|---|---|
| chat_id | – | – | Only attachments in this conversation. Conversation id: the chat_id returned by messages_list_conversations or messages_search_messages. Pass it unchanged. |
| limit | – | – | Maximum number of results to return; must be 1 or more. |
| message_id | – | – | Only attachments of this message. Message id: the message_id returned by messages_get_conversation or messages_search_messages. |
| offset | – | – | Number of results to skip, for paging; 0 or more. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_list_conversations List Conversations ~68
List recent Apple Messages conversations.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | – | – | Maximum number of results to return; must be 1 or more. |
| offset | – | – | Number of results to skip, for paging; 0 or more. |
| unread_only | boolean | – | Only return conversations that have unread incoming messages. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_reply_in_conversation Reply In Conversation ~166
Reply to an Apple Messages conversation using its chat_id. Supports both one-to-one and group chats. One-to-one replies use the service of the thread's latest message (SMS/RCS threads stay SMS/RCS) unless service_name is set. Group replies always use the group's existing service; service_name is rejected for groups unless it matches.
| Name | Type | Req | Description |
|---|---|---|---|
| chat_id | string | yes | Conversation id: the chat_id returned by messages_list_conversations or messages_search_messages. Pass it unchanged. |
| service_name | – | – | iMessage, SMS or RCS (case-insensitive). Omit to keep the thread's current service. Group chats always reply over their existing service, so a different value is rejected. |
| text | string | yes | Reply text to send; must not be empty. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_search_messages Search Messages ~238
Search Apple Messages text history.
| Name | Type | Req | Description |
|---|---|---|---|
| chat_id | – | – | Only search this conversation. Conversation id: the chat_id returned by messages_list_conversations or messages_search_messages. Pass it unchanged. |
| end_iso | – | – | Only messages sent at or before this time. ISO 8601 datetime, e.g. 2026-04-07T18:00:00-05:00; without an offset it is read as local time. |
| limit | – | – | Maximum number of results to return; must be 1 or more. |
| offset | – | – | Number of results to skip, for paging; 0 or more. |
| query | string | yes | Text to find in message bodies and subjects (case-insensitive substring); must not be empty. |
| sender | – | – | Only messages from this sender handle, matched exactly as stored (e.g. +15551234567 or person@example.com). |
| start_iso | – | – | Only messages sent at or after this time. ISO 8601 datetime, e.g. 2026-04-07T18:00:00-05:00; without an offset it is read as local time. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_send_attachment Send Attachment ~157
Send a file attachment via Apple Messages to a recipient. Optionally include a text message.
| Name | Type | Req | Description |
|---|---|---|---|
| file_path | string | yes | Absolute path of the local file to send. |
| recipient | string | yes | Who to send to: a phone number (E.164 such as +15551234567 is safest) or an email address registered with iMessage. Resolve names to an address first with contacts_resolve_message_recipient. |
| service_name | – | – | Service to send over: iMessage, SMS or RCS (case-insensitive). Omit to send as iMessage. SMS and RCS go through the paired iPhone and need Text Message Forwarding enabled for this Mac. |
| text | – | – | Optional message text sent after the file. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
messages_send_message Send Message ~167
Send a new message through Messages.app. Sends as iMessage unless service_name is set: SMS or RCS go through the iPhone's carrier and need Text Message Forwarding enabled for this Mac.
| Name | Type | Req | Description |
|---|---|---|---|
| recipient | string | yes | Who to send to: a phone number (E.164 such as +15551234567 is safest) or an email address registered with iMessage. Resolve names to an address first with contacts_resolve_message_recipient. |
| service_name | – | – | Service to send over: iMessage, SMS or RCS (case-insensitive). Omit to send as iMessage. SMS and RCS go through the paired iPhone and need Text Message Forwarding enabled for this Mac. |
| text | string | yes | Message text to send; must not be empty. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_append_to_note Append to Note ~68
Append plain text to an existing note without replacing its current content. Pass the text as body.
| Name | Type | Req | Description |
|---|---|---|---|
| body | string | yes | Plain text to append to the end of the note. |
| note_id | string | yes | note_id from notes_list_notes or notes_search_notes; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_create_folder Create Notes Folder ~93
Create a new folder in an Apple Notes account or nested folder.
| Name | Type | Req | Description |
|---|---|---|---|
| account_name | string | yes | Exact Notes account name from notes_list_accounts, for example iCloud or On My Mac. |
| folder_name | string | yes | Name of the new folder. Must not be empty. |
| parent_folder_id | – | – | folder_id from notes_list_folders to nest the new folder inside. Omit for a top-level folder. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_create_note Create Note ~128
Create a new note in a folder.
| Name | Type | Req | Description |
|---|---|---|---|
| body_html | – | – | Optional note body as HTML (for example <div>text</div>). The title is added as the first line if the body does not start with it. |
| folder_id | string | yes | folder_id of the destination folder, from notes_list_folders. |
| tags | – | – | Hashtags to add, without the leading #. They are written as a line of #tags at the end of the note body. |
| title | string | yes | Note title, shown as the first line of the note. Must not be empty. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_delete_folder Delete Folder ~41
Delete an Apple Notes folder.
| Name | Type | Req | Description |
|---|---|---|---|
| folder_id | string | yes | folder_id from notes_list_folders. Deletes the folder together with its notes and subfolders. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_delete_note Delete Note ~38
Delete a note by note_id.
| Name | Type | Req | Description |
|---|---|---|---|
| note_id | string | yes | note_id from notes_list_notes or notes_search_notes; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_get_note Get Note ~43
Fetch full details for an Apple Notes note by note_id.
| Name | Type | Req | Description |
|---|---|---|---|
| note_id | string | yes | note_id from notes_list_notes or notes_search_notes; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_health Notes Health ~16
Report the active Apple Notes MCP configuration.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | – | yes | – |
| ok | boolean | – | – |
| safety_mode | string | yes | – |
| safety_mode_warning | – | – | Set when the configured safety value was invalid or blank and the server fell back to a safer mode |
| server_name | string | yes | – |
| transport | string | – | – |
| version | string | yes | – |
No examples provided.
notes_list_accounts List Accounts ~14
List Apple Notes accounts.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_list_attachments List Note Attachments ~38
List attachments for a note.
| Name | Type | Req | Description |
|---|---|---|---|
| note_id | string | yes | note_id from notes_list_notes or notes_search_notes; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_list_folders List Folders ~79
List Apple Notes folders.
| Name | Type | Req | Description |
|---|---|---|---|
| account_name | – | – | Exact Notes account name from notes_list_accounts, for example iCloud. Omit to include all accounts. |
| limit | – | – | Maximum number of results to return; must be 1 or more. |
| offset | – | – | Number of results to skip, for paging; must be 0 or more. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_list_notes List Notes ~110
List notes, optionally scoped to a folder or account.
| Name | Type | Req | Description |
|---|---|---|---|
| account_name | – | – | Exact Notes account name from notes_list_accounts, for example iCloud. Omit to include all accounts. |
| folder_id | – | – | folder_id from notes_list_folders to limit results to one folder. Omit to include all folders. |
| limit | – | – | Maximum number of results to return; must be 1 or more. |
| offset | – | – | Number of results to skip, for paging; must be 0 or more. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_move_note Move Note ~59
Move a note to a different folder.
| Name | Type | Req | Description |
|---|---|---|---|
| folder_id | string | yes | folder_id of the destination folder, from notes_list_folders. |
| note_id | string | yes | note_id from notes_list_notes or notes_search_notes; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_rename_folder Rename Folder ~47
Rename an existing folder.
| Name | Type | Req | Description |
|---|---|---|---|
| folder_id | string | yes | folder_id of the folder to rename, from notes_list_folders. |
| folder_name | string | yes | New folder name. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_search_notes Search Notes ~136
Search notes by text, folder, or account.
| Name | Type | Req | Description |
|---|---|---|---|
| account_name | – | – | Exact Notes account name from notes_list_accounts, for example iCloud. Omit to include all accounts. |
| folder_id | – | – | folder_id from notes_list_folders to limit results to one folder. Omit to include all folders. |
| limit | – | – | Maximum number of results to return; must be 1 or more. |
| offset | – | – | Number of results to skip, for paging; must be 0 or more. |
| query | string | yes | Case-insensitive text matched against note titles, plain-text bodies, folder and account names, and hashtags. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
notes_update_note Update Note ~140
Update an existing note.
| Name | Type | Req | Description |
|---|---|---|---|
| body_html | – | – | New body as HTML; replaces the whole current body. Omit to keep the body. Use notes_append_to_note to add text instead. |
| folder_id | – | – | folder_id from notes_list_folders to move the note into. Omit to keep its folder. |
| note_id | string | yes | note_id from notes_list_notes or notes_search_notes; pass it unchanged. |
| tags | – | – | Hashtags to add, without the leading #. They are written as a line of #tags at the end of the note body. |
| title | – | – | New title. Omit to keep the current title. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_complete_reminder Complete Reminder ~41
Mark a reminder as completed.
| Name | Type | Req | Description |
|---|---|---|---|
| reminder_id | string | yes | Reminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_create_list Create Reminder List ~30
Create a new Apple Reminders list.
| Name | Type | Req | Description |
|---|---|---|---|
| title | string | yes | Name of the new reminder list. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_create_reminder Create Reminder ~268
Create a new reminder in a specific Apple Reminders list.
| Name | Type | Req | Description |
|---|---|---|---|
| due_all_day | boolean | – | True to keep only the date of due_date (no due time). |
| due_date | – | – | When the reminder is due. ISO 8601 datetime with Z or an offset (2026-10-22T09:00:00-05:00), or a date YYYY-MM-DD in the Mac's local time zone. |
| list_id | string | yes | Reminder list ID returned by reminders_list_lists; pass it unchanged. |
| notes | – | – | Plain-text notes. |
| parent_reminder_id | – | – | Not supported: subtasks are unavailable through public APIs, so any value returns SUBTASKS_UNSUPPORTED. Omit it. |
| priority | – | – | Apple Reminders priority: 0 none, 1 high, 5 medium, 9 low. |
| remind_at | – | – | When to show a notification; sets the reminder's single alert. ISO 8601 datetime with Z or an offset (2026-10-22T09:00:00-05:00), or a date YYYY-MM-DD in the Mac's local time zone. |
| tags | – | – | Tags appended to the notes as #hashtags (leading # optional). |
| title | string | yes | Reminder title. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_delete_list Delete Reminder List ~49
Delete a reminder list entirely. Requires full_access safety mode.
| Name | Type | Req | Description |
|---|---|---|---|
| list_id | string | yes | Reminder list ID returned by reminders_list_lists; pass it unchanged. Deletes the list and all its reminders. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_delete_reminder Delete Reminder ~42
Delete a reminder by reminder_id.
| Name | Type | Req | Description |
|---|---|---|---|
| reminder_id | string | yes | Reminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_get_reminder Get Reminder ~45
Fetch full details for a reminder by reminder_id.
| Name | Type | Req | Description |
|---|---|---|---|
| reminder_id | string | yes | Reminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_health Reminders Health ~18
Report the active Apple Reminders MCP server configuration.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| access_status | string | – | – |
| can_access_reminders | boolean | – | – |
| capabilities | array | yes | – |
| helper_available | boolean | yes | – |
| helper_compiled | boolean | yes | – |
| ok | boolean | – | – |
| permission_client | – | – | – |
| permission_error | – | – | – |
| permission_suggestion | – | – | – |
| safety_mode | string | yes | – |
| safety_mode_warning | – | – | Set when the configured safety value was invalid or blank and the server fell back to a safer mode |
| server_name | string | yes | – |
| transport | string | – | – |
| version | string | yes | – |
No examples provided.
reminders_list_lists List Reminder Lists ~16
List available Apple Reminders lists.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_list_reminders List Reminders ~217
List reminders with optional list and due-date filters.
| Name | Type | Req | Description |
|---|---|---|---|
| due_after | – | – | Only reminders due at or after this time; undated reminders are excluded. ISO 8601 datetime with Z or an offset (2026-10-22T09:00:00-05:00), or a date YYYY-MM-DD in the Mac's local time zone. |
| due_before | – | – | Only reminders due at or before this time; undated reminders are excluded. ISO 8601 datetime with Z or an offset (2026-10-22T09:00:00-05:00), or a date YYYY-MM-DD in the Mac's local time zone. |
| include_completed | boolean | – | Include completed reminders; false returns only open ones. |
| limit | – | – | Maximum number of reminders to return (1 or more). |
| list_id | – | – | Reminder list ID returned by reminders_list_lists; pass it unchanged. Omit to search every visible list. |
| search | – | – | Case-insensitive text matched against reminder titles and notes. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_uncomplete_reminder Uncomplete Reminder ~43
Mark a reminder as not completed.
| Name | Type | Req | Description |
|---|---|---|---|
| reminder_id | string | yes | Reminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
reminders_update_reminder Update Reminder ~354
Update one or more fields on an existing reminder.
| Name | Type | Req | Description |
|---|---|---|---|
| due_all_day | – | – | True to keep only the date of due_date (no due time). Use together with due_date. |
| due_date | – | – | New due date. ISO 8601 datetime with Z or an offset (2026-10-22T09:00:00-05:00), or a date YYYY-MM-DD in the Mac's local time zone. Omit to leave unchanged. |
| list_id | – | – | Destination list to move the reminder to. Reminder list ID returned by reminders_list_lists; pass it unchanged. Omit to leave unchanged. |
| notes | – | – | Replacement notes; overwrites the existing notes. Omit to leave unchanged. |
| parent_reminder_id | – | – | Not supported: subtasks are unavailable through public APIs, so any value returns SUBTASKS_UNSUPPORTED. Omit it. |
| priority | – | – | Apple Reminders priority: 0 none, 1 high, 5 medium, 9 low. Omit to leave unchanged. |
| remind_at | – | – | New alert time; replaces the reminder's alerts. ISO 8601 datetime with Z or an offset (2026-10-22T09:00:00-05:00), or a date YYYY-MM-DD in the Mac's local time zone. Omit to leave unchanged. |
| reminder_id | string | yes | Reminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged. |
| tags | – | – | Tags appended to the notes as #hashtags (leading # optional). Added to the existing notes (or to notes, if given); existing tags are not removed. |
| title | – | – | New title. Omit to leave unchanged. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
search_tools Search Tools ~112
Search this server's tool catalog by keyword, alias, or domain tag.
| Name | Type | Req | Description |
|---|---|---|---|
| domain_tags | – | – | Only return tools whose domain or tags include one of these, such as ['mail']. |
| limit | integer | – | Maximum number of matching tools to return. |
| mode | string | – | Result detail: 'compact' (default), 'detail' adds usage intent and aliases, 'full' adds examples. |
| query | string | yes | Keywords describing the task, such as 'send text' or 'list events'. |
Structured output declared, but exposes no named fields.
No examples provided.
shortcuts_health Shortcuts Health ~17
Report the active Apple Shortcuts MCP configuration.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| capabilities | array | yes | – |
| ok | boolean | – | – |
| permissions | – | yes | – |
| safety_mode | string | yes | – |
| safety_mode_warning | – | – | Set when the configured safety value was invalid or blank and the server fell back to a safer mode |
| server_name | string | yes | – |
| transport | string | yes | – |
| transport_support | array | yes | – |
| version | string | yes | – |
No examples provided.
shortcuts_list_folders List Shortcut Folders ~16
List Apple Shortcuts folders.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
shortcuts_list_shortcuts List Shortcuts ~44
List Apple Shortcuts, optionally restricted to one folder.
| Name | Type | Req | Description |
|---|---|---|---|
| folder_name | – | – | Optional Shortcuts folder name from shortcuts_list_folders. Omit to list every shortcut. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
shortcuts_run_shortcut Run Shortcut ~152
Run a shortcut by name or identifier with optional input and output arguments.
| Name | Type | Req | Description |
|---|---|---|---|
| input_paths | – | – | Optional absolute paths of files to pass to the shortcut as input, in order. |
| input_text | – | – | Optional text passed to the shortcut as its input. |
| output_path | – | – | Optional absolute file path where the shortcut's output is written. Omit to get the output as text. |
| output_type | – | – | Optional Uniform Type Identifier for the output, such as public.plain-text or public.png. |
| shortcut_name_or_identifier | string | yes | Exact shortcut name (case-insensitive when unambiguous) or its identifier (UUID) from shortcuts_list_shortcuts. Use the identifier when several shortcuts share a name. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
shortcuts_view_shortcut View Shortcut ~70
Open a shortcut in the Shortcuts app by name or identifier and return its metadata.
| Name | Type | Req | Description |
|---|---|---|---|
| shortcut_name_or_identifier | string | yes | Exact shortcut name (case-insensitive when unambiguous) or its identifier (UUID) from shortcuts_list_shortcuts. Use the identifier when several shortcuts share a name. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | – | yes | – |
No examples provided.
How do I install the Apple Tools (Unified) MCP server?
Apple Tools (Unified) runs locally as a PyPI package, launched with uvx apple-tools-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · apple-tools-mcp
claude mcp add jonathanrreed-apple-tools-mcp -- uvx apple-tools-mcp
What is the Apple Tools (Unified) MCP server?
Apple Tools (Unified) is an MCP server listed in the public MCP registry as io.github.JonathanRReed/apple-tools-mcp. Unified Apple ecosystem MCP server for macOS: Mail, Calendar, Notes, Files, Messages, and more. This page covers its PyPI package (apple-tools-mcp).
Is the Apple Tools (Unified) MCP server safe to use?
Apple Tools (Unified) scores 97 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 23 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Apple Tools (Unified) MCP server expose?
Apple Tools (Unified) exposes 184 tools: apple_get_preferences, apple_detect_defaults, apple_update_preferences, apple_detect_digest_folder, apple_set_digest_folder, and 179 more. Their descriptions and schemas cost roughly 16,164 tokens of context every time the server is loaded.
Is the Apple Tools (Unified) MCP server still maintained?
Apple Tools (Unified) is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Apple Tools (Unified) MCP server under?
Apple Tools (Unified) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.