A private, local MCP server that lets AI assistants work with Apple Reminders, Calendar, Notes, and Contacts.
Server has 21 well-named tools with consistent verb_noun patterns (list_, create_, update_, search_, get_). All tools have descriptions (avg ~80 chars, within baseline 34-392). Input schemas are present and use Zod for validation with type constraints. However, output schemas are NOT documented, responses are wrapped in jsonContent() but the structure of returned objects (ReminderItem, CalendarEvent, etc.) is never formally declared. Parameter descriptions are present but often minimal (e.g., 'Apple Reminders list name.' lacks guidance on what happens if the list doesn't exist). Error handling is basic, read-only mode returns a generic error, but no recovery guidance for missing resources, invalid dates, or permission failures. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear read/write distinction. Missing pagination guidance for list tools that could return many items.
Append text to an Apple Note by id, or by exact title when it is unique.
Mark an Apple Reminder completed by id, or by exact title when it is unique.
Create a new Apple Calendar event in a specific calendar or the default calendar.
Create a new Apple Note in a specific folder or the default folder.
Create a new Apple Reminder in a specific list or the default list.
Get a specific Apple Contact by id.
List incomplete reminders due before today.
Output schemas not documented. Tools return JSON via jsonContent() but the structure of ReminderItem, CalendarEvent, NoteItem, ContactItem is never formally declared. LLMs cannot plan downstream operations without knowing what fields to expect.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Server clearly distinguishes read vs write tools (via isReadOnlyMode() guard) but does not declare this in tool metadata. LLMs cannot infer safety properties without explicit hints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
List incomplete reminders due today.
List Apple Calendar events in a date range. Defaults to the next 7 days.
List all Apple Calendar calendars available on this Mac.
List Apple Notes, optionally scoped to a folder.
List all Apple Notes folders available on this Mac.
List all Apple Reminders lists available on this Mac.
List Apple Reminders, optionally scoped to a list and completed state.
Search Apple Calendar events by title, notes, or location in a date range.
Search Apple Contacts by name, phone, or email.
Search Apple Notes by title or body.
Search Apple Reminders by title or notes.
Update an Apple Calendar event by id.
Update an Apple Note by id.
Update an Apple Reminder by id.
Minimal error recovery guidance. Read-only mode returns generic error; missing resources, invalid dates, and permission failures have no actionable guidance. LLMs cannot self-correct without explicit error messages stating what went wrong and what to try next.
List tools lack pagination guidance. list_reminders, list_calendar_events, list_notes, search_* tools could return many items but no limit, offset, or cursor parameters are documented. Large result sets risk context window exhaustion.
Parameter descriptions lack constraint details. E.g., dueDate accepts 'ISO 8601' but no guidance on timezone handling, past dates, or format errors. listName is optional but no guidance on what 'default list' means or how to discover available lists.