Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

Apple Tools (Unified)

PYPI · APPLE-TOOLS-MCP · 2 COMPONENTS

Unified Apple ecosystem MCP server for macOS: Mail, Calendar, Notes, Files, Messages, and more.

+47 this week 97 Trust /100

Last scanned (22 hours ago)

Scores higher than 99% of PyPI servers

Category Productivity and Notes

Trust breakdown (7 categories)

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
Changelog

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
Diagnostics

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 →

MCP tools · 184 exposed · ~16,164 tokens

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 →

Tool Tokens
mail_reply_latest_in_thread ~180

Find the latest related message in the same mailbox thread and reply to that message.

NameTypeReqDescription
bodystringyesPlain-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_idstringyesMessage 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_allboolean–True to reply to the sender and all other recipients; false (default) replies to the sender only.
NameTypeReqDescription
result–yes–

No examples provided.

mail_reply_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.

NameTypeReqDescription
bodystringyesPlain-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_idstringyesMessage 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_allboolean–True to reply to the sender and all other recipients; false (default) replies to the sender only.
NameTypeReqDescription
result–yes–

No examples provided.

mail_search_messages ~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.

NameTypeReqDescription
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.
querystringyesText matched against message subject or sender (case-insensitive contains). Use "*" to match every message.
unread_onlyboolean–True to return only unread messages.
NameTypeReqDescription
result–yes–

No examples provided.

mail_send_message ~163

Send an email immediately via Apple Mail. Optionally specify from_account as an email address or account name to set the sender.

NameTypeReqDescription
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.
bodystring–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.
subjectstring–Subject line.
toarrayyesRecipient email addresses, one per item.
NameTypeReqDescription
result–yes–

No examples provided.

maps_build_maps_link ~91

Build an Apple Maps URL for a destination or route.

NameTypeReqDescription
destinationstringyesPlace 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.
transportstring–Travel mode: driving, walking or transit. Any other value is treated as driving.
NameTypeReqDescription
okboolean––
urlstringyes–

No examples provided.

maps_get_directions ~84

Get Apple Maps route details between an origin and destination.

NameTypeReqDescription
destinationstringyesDestination place name or address; the first Apple Maps match is used.
originstringyesStarting place name or address; the first Apple Maps match is used.
transportstring–Travel mode: driving, walking or transit. Any other value is treated as driving.
NameTypeReqDescription
result–yes–

No examples provided.

maps_health ~16

Report the active Apple Maps MCP configuration.

Input schema present but exposes no named parameters.

NameTypeReqDescription
capabilitiesarrayyes–
helper_availablebooleanyes–
helper_compiledbooleanyes–
okboolean––
server_namestringyes–
supportsarrayyes–
transportstringyes–
versionstringyes–

No examples provided.

maps_open_directions_in_maps ~90

Open directions in the Apple Maps app.

NameTypeReqDescription
destinationstringyesPlace 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.
transportstring–Travel mode: driving, walking or transit. Any other value is treated as driving.
NameTypeReqDescription
result–yes–

No examples provided.

maps_search_places ~56

Search Apple Maps for matching places.

NameTypeReqDescription
limitinteger–Maximum number of places to return.
querystringyesWhat to search for, such as a business name, category ("coffee near Union Square") or address.
NameTypeReqDescription
result–yes–

No examples provided.

messages_get_conversation ~108

Fetch a single Apple Messages conversation with paginated messages.

NameTypeReqDescription
chat_idstringyesConversation 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.
NameTypeReqDescription
result–yes–

No examples provided.

messages_get_message ~43

Fetch a single Apple Messages message by message_id.

NameTypeReqDescription
message_idstringyesMessage id: the message_id returned by messages_get_conversation or messages_search_messages.
NameTypeReqDescription
result–yes–

No examples provided.

messages_health ~16

Report Messages server configuration and capability status.

Input schema present but exposes no named parameters.

NameTypeReqDescription
automation_accessbooleanyes–
automation_access_error–––
automation_access_error_code–––
automation_access_statusstring––
automation_access_suggestion–––
capabilities–yes–
history_accessbooleanyes–
history_access_error–––
history_access_suggestion–––
okboolean––
safety_modestringyes–
safety_mode_warning––Set when the configured safety value was invalid or blank and the server fell back to a safer mode
server_namestringyes–
transportstringyes–
versionstringyes–

No examples provided.

messages_list_attachments ~115

List Apple Messages attachments by chat or message.

NameTypeReqDescription
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.
NameTypeReqDescription
result–yes–

No examples provided.

messages_list_conversations ~68

List recent Apple Messages conversations.

NameTypeReqDescription
limit––Maximum number of results to return; must be 1 or more.
offset––Number of results to skip, for paging; 0 or more.
unread_onlyboolean–Only return conversations that have unread incoming messages.
NameTypeReqDescription
result–yes–

No examples provided.

messages_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.

NameTypeReqDescription
chat_idstringyesConversation 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.
textstringyesReply text to send; must not be empty.
NameTypeReqDescription
result–yes–

No examples provided.

messages_search_messages ~238

Search Apple Messages text history.

NameTypeReqDescription
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.
querystringyesText 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.
NameTypeReqDescription
result–yes–

No examples provided.

messages_send_attachment ~157

Send a file attachment via Apple Messages to a recipient. Optionally include a text message.

NameTypeReqDescription
file_pathstringyesAbsolute path of the local file to send.
recipientstringyesWho 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.
NameTypeReqDescription
result–yes–

No examples provided.

messages_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.

NameTypeReqDescription
recipientstringyesWho 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.
textstringyesMessage text to send; must not be empty.
NameTypeReqDescription
result–yes–

No examples provided.

notes_append_to_note ~68

Append plain text to an existing note without replacing its current content. Pass the text as body.

NameTypeReqDescription
bodystringyesPlain text to append to the end of the note.
note_idstringyesnote_id from notes_list_notes or notes_search_notes; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

notes_create_folder ~93

Create a new folder in an Apple Notes account or nested folder.

NameTypeReqDescription
account_namestringyesExact Notes account name from notes_list_accounts, for example iCloud or On My Mac.
folder_namestringyesName 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.
NameTypeReqDescription
result–yes–

No examples provided.

notes_create_note ~128

Create a new note in a folder.

NameTypeReqDescription
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_idstringyesfolder_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.
titlestringyesNote title, shown as the first line of the note. Must not be empty.
NameTypeReqDescription
result–yes–

No examples provided.

notes_delete_folder ~41

Delete an Apple Notes folder.

NameTypeReqDescription
folder_idstringyesfolder_id from notes_list_folders. Deletes the folder together with its notes and subfolders.
NameTypeReqDescription
result–yes–

No examples provided.

notes_delete_note ~38

Delete a note by note_id.

NameTypeReqDescription
note_idstringyesnote_id from notes_list_notes or notes_search_notes; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

notes_get_note ~43

Fetch full details for an Apple Notes note by note_id.

NameTypeReqDescription
note_idstringyesnote_id from notes_list_notes or notes_search_notes; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

notes_health ~16

Report the active Apple Notes MCP configuration.

Input schema present but exposes no named parameters.

NameTypeReqDescription
capabilities–yes–
okboolean––
safety_modestringyes–
safety_mode_warning––Set when the configured safety value was invalid or blank and the server fell back to a safer mode
server_namestringyes–
transportstring––
versionstringyes–

No examples provided.

notes_list_accounts ~14

List Apple Notes accounts.

Input schema present but exposes no named parameters.

NameTypeReqDescription
result–yes–

No examples provided.

notes_list_attachments ~38

List attachments for a note.

NameTypeReqDescription
note_idstringyesnote_id from notes_list_notes or notes_search_notes; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

notes_list_folders ~79

List Apple Notes folders.

NameTypeReqDescription
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.
NameTypeReqDescription
result–yes–

No examples provided.

notes_list_notes ~110

List notes, optionally scoped to a folder or account.

NameTypeReqDescription
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.
NameTypeReqDescription
result–yes–

No examples provided.

notes_move_note ~59

Move a note to a different folder.

NameTypeReqDescription
folder_idstringyesfolder_id of the destination folder, from notes_list_folders.
note_idstringyesnote_id from notes_list_notes or notes_search_notes; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

notes_rename_folder ~47

Rename an existing folder.

NameTypeReqDescription
folder_idstringyesfolder_id of the folder to rename, from notes_list_folders.
folder_namestringyesNew folder name.
NameTypeReqDescription
result–yes–

No examples provided.

notes_search_notes ~136

Search notes by text, folder, or account.

NameTypeReqDescription
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.
querystringyesCase-insensitive text matched against note titles, plain-text bodies, folder and account names, and hashtags.
NameTypeReqDescription
result–yes–

No examples provided.

notes_update_note ~140

Update an existing note.

NameTypeReqDescription
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_idstringyesnote_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.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_complete_reminder ~41

Mark a reminder as completed.

NameTypeReqDescription
reminder_idstringyesReminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_create_list ~30

Create a new Apple Reminders list.

NameTypeReqDescription
titlestringyesName of the new reminder list.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_create_reminder ~268

Create a new reminder in a specific Apple Reminders list.

NameTypeReqDescription
due_all_dayboolean–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_idstringyesReminder 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).
titlestringyesReminder title.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_delete_list ~49

Delete a reminder list entirely. Requires full_access safety mode.

NameTypeReqDescription
list_idstringyesReminder list ID returned by reminders_list_lists; pass it unchanged. Deletes the list and all its reminders.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_delete_reminder ~42

Delete a reminder by reminder_id.

NameTypeReqDescription
reminder_idstringyesReminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_get_reminder ~45

Fetch full details for a reminder by reminder_id.

NameTypeReqDescription
reminder_idstringyesReminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_health ~18

Report the active Apple Reminders MCP server configuration.

Input schema present but exposes no named parameters.

NameTypeReqDescription
access_statusstring––
can_access_remindersboolean––
capabilitiesarrayyes–
helper_availablebooleanyes–
helper_compiledbooleanyes–
okboolean––
permission_client–––
permission_error–––
permission_suggestion–––
safety_modestringyes–
safety_mode_warning––Set when the configured safety value was invalid or blank and the server fell back to a safer mode
server_namestringyes–
transportstring––
versionstringyes–

No examples provided.

reminders_list_lists ~16

List available Apple Reminders lists.

Input schema present but exposes no named parameters.

NameTypeReqDescription
result–yes–

No examples provided.

reminders_list_reminders ~217

List reminders with optional list and due-date filters.

NameTypeReqDescription
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_completedboolean–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.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_uncomplete_reminder ~43

Mark a reminder as not completed.

NameTypeReqDescription
reminder_idstringyesReminder ID returned by reminders_list_reminders or reminders_get_reminder; pass it unchanged.
NameTypeReqDescription
result–yes–

No examples provided.

reminders_update_reminder ~354

Update one or more fields on an existing reminder.

NameTypeReqDescription
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_idstringyesReminder 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.
NameTypeReqDescription
result–yes–

No examples provided.

search_tools ~112

Search this server's tool catalog by keyword, alias, or domain tag.

NameTypeReqDescription
domain_tags––Only return tools whose domain or tags include one of these, such as ['mail'].
limitinteger–Maximum number of matching tools to return.
modestring–Result detail: 'compact' (default), 'detail' adds usage intent and aliases, 'full' adds examples.
querystringyesKeywords describing the task, such as 'send text' or 'list events'.

Structured output declared, but exposes no named fields.

No examples provided.

shortcuts_health ~17

Report the active Apple Shortcuts MCP configuration.

Input schema present but exposes no named parameters.

NameTypeReqDescription
capabilitiesarrayyes–
okboolean––
permissions–yes–
safety_modestringyes–
safety_mode_warning––Set when the configured safety value was invalid or blank and the server fell back to a safer mode
server_namestringyes–
transportstringyes–
transport_supportarrayyes–
versionstringyes–

No examples provided.

shortcuts_list_folders ~16

List Apple Shortcuts folders.

Input schema present but exposes no named parameters.

NameTypeReqDescription
result–yes–

No examples provided.

shortcuts_list_shortcuts ~44

List Apple Shortcuts, optionally restricted to one folder.

NameTypeReqDescription
folder_name––Optional Shortcuts folder name from shortcuts_list_folders. Omit to list every shortcut.
NameTypeReqDescription
result–yes–

No examples provided.

shortcuts_run_shortcut ~152

Run a shortcut by name or identifier with optional input and output arguments.

NameTypeReqDescription
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_identifierstringyesExact shortcut name (case-insensitive when unambiguous) or its identifier (UUID) from shortcuts_list_shortcuts. Use the identifier when several shortcuts share a name.
NameTypeReqDescription
result–yes–

No examples provided.

shortcuts_view_shortcut ~70

Open a shortcut in the Shortcuts app by name or identifier and return its metadata.

NameTypeReqDescription
shortcut_name_or_identifierstringyesExact shortcut name (case-insensitive when unambiguous) or its identifier (UUID) from shortcuts_list_shortcuts. Use the identifier when several shortcuts share a name.
NameTypeReqDescription
result–yes–

No examples provided.

Install

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

# add to Claude Code
claude mcp add jonathanrreed-apple-tools-mcp -- uvx apple-tools-mcp
Common questions

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.