Open-source MCP server for Apple Notes, Reminders, and Calendar on macOS. Give Claude (or any MCP client) access to your Apple apps.
Strong foundation with complete schemas, clear descriptions, and proper error handling. All 12 tools have explicit input schemas with typed parameters and descriptions. Tool names follow verb_noun convention (notes_search, reminders_create, calendar_events). Descriptions are concise (50-200 chars typical) and explain WHAT the tool does and WHEN to use it. Parameters include constraints (enums, min/max, optional flags). Risk annotations present. Main gaps: output schemas not documented in code; some parameter descriptions could be more prescriptive about format/constraints; no batch operations despite sequential patterns.
List all calendars in Apple Calendar with their names and whether they are writable.
Create a new event in Apple Calendar. Requires a title and start time; end defaults to one hour after start. Optionally set calendar, location, notes, or all-day.
List events from Apple Calendar in a date range (defaults to today through the next 7 days), sorted by start time. Optionally filter by calendar name or search text in event titles. Note: repeating events appear at their original start date only (an Apple scripting limitation).
Create a new note in Apple Notes with a title and plain-text body. Optionally place it in a specific folder; otherwise it goes to the default Notes folder.
List all folders in Apple Notes across every account (iCloud, On My Mac, ...), with note counts.
Read the full content of one Apple Note by id (get ids from notes_search). Returns plain text by default; pass format: 'html' for the raw HTML body.
Output schemas not documented in code. Tool descriptions explain what is returned (e.g., 'Returns id, title, modification date, and a snippet'), but formal output schema definitions are absent. LLMs cannot reliably parse unstructured responses or plan downstream tool calls without documented return types.
Parameter descriptions lack prescriptive format guidance. E.g., dueDate accepts 'ISO 8601' but does not specify timezone handling, daylight saving behavior, or what happens if time is omitted. LLMs frequently miscalculate date/time conversions; explicit format rules prevent errors.
No batch operations for sequential patterns. Tools like reminders_create and calendar_create_event are likely called in loops (e.g., create 5 reminders). Batch variants would reduce token waste and latency vs. N sequential calls.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Search Apple Notes by text (matches title and body), or list the most recently modified notes when no query is given. Returns id, title, modification date, and a snippet for each match. Use notes_get with an id to read a full note.
Mark a reminder as completed by id (get ids from reminders_list).
Create a new reminder in Apple Reminders, optionally with notes, a due date, and a target list (defaults to the user's default list).
Permanently delete a reminder by id. This cannot be undone — prefer reminders_complete unless the user explicitly asks to delete.
List reminders from Apple Reminders, sorted by due date. By default shows only incomplete reminders across all lists. Filter by list name, search text in titles, or include completed items.
List all lists in Apple Reminders (name and id).
Error recovery guidance incomplete. jxa.ts defines friendlyMessage() for TCC/timeout errors, but tool descriptions do not mention what to do if a folder/list/calendar name is invalid or not found. LLMs need explicit recovery hints.
Repeating events limitation not surfaced in tool descriptions. calendar_events note says 'repeating events appear at their original start date only (an Apple scripting limitation)', but this is buried in the description. LLMs may misunderstand recurring event behavior and make incorrect assumptions.