Because everything lands in EventKit, what an agent writes shows up on the iPhone in the same second and what you set by hand reads back through the same tools. The write surface is deliberately narrower than the read surface: alarms, recurrence and locations round-trip but are configured in the Apple apps.
A macOS-only MCP server over EventKit that covers both Apple Reminders and Apple Calendar. Five service-scoped tools take an `action` field — read, create, update, delete — across reminders, their subtasks, reminder lists, calendar events and the calendars themselves. The EventKit work is done by a vendored `event` Swift CLI that the published npm package ships pre-built, so there is no separate install step.
- Reminders created, read, updated and deleted with priority, tags, notes, URLs and due dates — `reminders_tasks`
- Multi-criteria reads: by list, completion, due-date window, priority, tags, free-text search, recurring and location-based — `reminders_tasks`
- Checklist subtasks stored in the notes field, so they stay human-readable in Reminders.app, with toggle and reorder alongside the usual four actions — `reminders_subtasks`
- Reminder lists created, renamed and removed — `reminders_lists`
- Calendar events created, read, updated and deleted, all-day inferred from the date format, with `span` scoping deletes across a recurring series — `calendar_events`
- Calendars that actually hold events in a date window, so you can pick a target before writing one — `calendar_calendars`
- Dates accepted as `YYYY-MM-DD`, `YYYY-MM-DD HH:mm:ss` local time, or ISO 8601 with a timezone
- Four prompt templates in the MCP prompt registry — daily organizer, reminder creation, reminder review, weekly planning
macOS and Node.js 20 or later; run `npx mcp-server-apple-events` (published as `mcp-server-apple-events` 1.5.0). Building from a clone additionally needs Xcode Command Line Tools and pnpm. macOS attributes the privacy prompt to the vendored `event` binary, so the first call asks for access to Reminders and Calendars once and that single grant covers every MCP client on the machine. Two writes need more than that: inviting `attendees` to an event goes through Calendar.app scripting and needs an Automation grant plus a GUI session, and excepting one occurrence of a recurring series with `occurrenceDate` goes over CalDAV and needs `ICLOUD_APPLE_ID` with an app-specific password. Alarms, recurrence rules and location triggers read back but cannot be written here; set them in Reminders.app or Calendar.app. Headless runs cannot answer a permission prompt, so a stuck EventKit call is killed after 30 s and returns an error — tune it with `EVENTKIT_CLI_TIMEOUT_MS`.
One command — npx mcp-server-apple-events
