Most calendar servers stop at events; this one drives Reminders too, including hashtag tags, tag search and usage counts that Reminders.app itself exposes no public API for. Writes are checked on the way in — duplicate detection, conflict checks, dry-run previews on batch deletes — and `undo` walks back the last operation when one gets through anyway.
A Swift MCP server built on EventKit, the framework the macOS Calendar and Reminders apps use themselves. It reads and writes both — calendars, events, reminders and their tags — against whatever accounts your Mac already syncs: iCloud, Google, Outlook/Exchange, CalDAV or local.
- Calendars and reminder lists together: `list_calendars`, plus `create_calendar`, `update_calendar` to rename or recolour, and `delete_calendar`
- Events with alerts, location, URL and a per-event timezone — `create_event`, `update_event`, `delete_event`, and `list_events` with filter, sort and limit
- Reminders as first-class records, not an afterthought: `create_reminder`, `complete_reminder`, `search_reminders` by keyword or tag, `list_reminder_tags` with usage counts
- Quick ranges instead of date arithmetic — `list_events_quick` takes `today`, `tomorrow`, `this_week`, `next_7_days`
- Checks before a write lands: `check_conflicts` over a time range, `find_duplicate_events` across calendars
- Batch work with a preview — `create_events_batch`, `move_events_batch`, and `delete_events_batch` with dry-run
- `undo`, `redo` and `undo_history` over the most recent calendar and reminder operations
- Same-name calendars told apart by source: `calendar_source` picks the iCloud “Work” over the Google one
macOS 14.0 or later, and no account or key — it reaches your calendars through the ones macOS already holds. The registry entry `io.github.PsychQuant/che-ical-mcp` ships an `.mcpb` bundle over stdio for Claude Desktop; Claude Code can add the repo as a plugin marketplace, or register the standalone `CheICalMCP` binary. On first use macOS asks for Calendar and Reminders access, and that dialog is attributed to the app that launched the server — under Terminal or iTerm2 it appears, under VS Code it may not.
One command — curl -L https://github.com/PsychQuant/che-ical-mcp/releases/latest/download/CheICalMCP -o ~/bin/CheICalMCP && chmod +x ~/bin/CheICalMCP
