MCP server that provides native integration with Apple Reminders and Calendar on macOS.
The server provides 5 well-structured tools with comprehensive parameter schemas and descriptions. Tool naming follows verb_noun conventions (reminders_tasks, calendar_events), but uses underscore-separated compound nouns rather than clear action verbs. Descriptions are detailed and explain use cases well (100-200 chars typical). Parameter schemas are complete with types and descriptions. However, the tools combine multiple actions under a single 'action' enum parameter, violating the single-responsibility principle. Output schemas are not documented in the code provided. Error handling appears implemented but guidance text is not visible in the source excerpts. The server correctly omits deprecated Sampling/Roots/Logging features.
Read available calendars with optional date range filter to get event counts. Lists all calendars accessible on the macOS system.
Manage calendar events with actions: read events with optional filters (by calendar, search, availability, date range), create new events with title, start/end dates, calendar, notes, location, timezone, update event properties (title, dates, notes, location, timezone, attendees), delete events from a calendar or specific occurrence
Manage reminder lists with actions: read all reminder lists, create a new list with name, update list name, delete a list by name
Manage subtasks within reminders with actions: read subtasks from a reminder, create a new subtask with title, update subtask title or completion status, delete a subtask, toggle subtask completion, reorder subtasks
Manage reminder tasks with actions: read reminders with optional filters (by list, completion status, search, due date range, priority, recurrence, location-based, tags), create new reminders with title, dates, priority, tags and subtasks, update reminder properties (title, dates, notes, priority, tags, completion status), delete reminders
Multi-action tools violate single-responsibility principle. reminders_tasks combines read, create, update, delete under one 'action' enum. This forces the LLM to reason about which action to invoke and loads one tool with conflicting parameter requirements (e.g., 'title' required for create but meaningless for read). Should split into: read_reminders, create_reminder, update_reminder, delete_reminder.
Compound noun naming (reminders_tasks, calendar_events) obscures action intent. Names do not clearly convey whether the tool reads or writes. LLM may confuse read_reminders with write_reminders. Recommend: read_reminders, create_reminder, update_reminder, delete_reminder (verb-first, singular for create/update/delete, plural for read/list).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 60 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 32 | - | v1 |
Output schemas not documented in source code. Tool descriptions mention what they return ('Manage reminder tasks...') but JSON schema definitions for response structures are not visible. LLMs cannot plan downstream operations or extract specific fields without knowing the response schema. Each tool needs a documented 'returns' or 'output' schema block.
Parameter interdependencies not documented. reminders_tasks has conditional requirements: 'title' is required for create but meaningless for read; 'id' is required for update/delete but optional for read. Descriptions should state: 'Required for create action. Omit for read action.' This prevents invalid parameter combinations.
No rate limiting, timeout, or retry guidance visible in tool definitions. Reminders/Calendar operations may hang if EventKit is unresponsive. Tool descriptions should state: 'May trigger system permission dialog on first call' and 'Timeout: 10s. Retryable on timeout.' This guides agent behavior.
No pagination parameters visible. read_reminders and read_calendar_events accept optional filters (search, date range, etc.) but no limit/offset/cursor for results. Filtering by 'this-week' could return hundreds of events. Tool descriptions should state max result count and whether pagination is supported.
Error guidance not visible in source. Tool definitions lack examples of failure modes and recovery steps. E.g., 'reminder_not_found' → 'try search with partial title via read action'. Tool descriptions should include: 'If ID not found, use read with search filter to locate the reminder, then retry update with correct ID.'