Model Context Protocol server for Apple Reminders integration on macOS
Server has 3 tools with schemas and descriptions present. Tool names follow verb_noun convention (set_list_*, set_smart_list_*). All descriptions are substantive (100-200+ chars) and explain state-mutation intent clearly. Input schemas are present with typed properties and descriptions. However, there are significant gaps: (1) no documented output schemas, callers don't know what these tools return, forcing LLMs to guess; (2) error handling descriptions are absent, tools don't guide recovery on failure; (3) parameter descriptions lack format/constraint details (e.g., 'UUID' is stated but no validation guidance for malformed input); (4) no idempotency guarantees stated despite state mutations; (5) resource interdependencies (list_id vs group behavior) are documented in set_list_appearance but not consistently across all tools. The tool names are clear and distinct, but descriptions could be more concise (set_list_appearance is 445 chars; pattern baseline is 194 chars p50). Overall, definitions are above-average in clarity but below production standards for error handling and output documentation.
Rename and/or restyle a list by its UUID. `color` accepts a named palette token (red/orange/yellow/green/blue/purple/brown/gray/etc.); `symbol` is a Reminders EMBLEM id (e.g. 'food', 'weather5' — a curated catalog, NOT an SF Symbol; see reminders://appearance); `emoji` sets an emoji icon. Pass `name` to rename. NOTE: Reminders GROUPS have no color/icon — only `name` (rename) applies to a group; color/symbol/emoji on a group is rejected. At least one change should be supplied. Private ReminderKit API.
Pin or unpin a list/group at the top of the Reminders sidebar. Pass the list (or group) UUID and `pinned` (true to pin, false to unpin). Private ReminderKit API.
Pin or unpin a custom smart list at the top of the Reminders sidebar. Pass the smart-list UUID and `pinned`. Private ReminderKit API.
No output schemas documented. Tools return responses but callers have no way to know what fields are present, what types they are, or what IDs/references can be chained to downstream tools. This forces LLMs to guess and risks failed chains.
Error handling not documented. Tools do not describe what errors can occur, when they are retryable, how to recover, or what the LLM should do next. E.g., 'Invalid list_id' or 'Permission denied' are not mentioned, leaving agents with no recovery path.
Parameter descriptions lack format/constraint details. 'list_id' is described as 'UUID of the list to modify' but no guidance on how to obtain one, validate one, or what happens if invalid. 'color' accepts hex OR named tokens but the description does not state validation rules or enumerate valid named tokens.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
set_list_appearance description is 445 characters, well above the pattern baseline of 194 (p50). While clarity is good, verbose descriptions waste tokens and risk burying key details. Refactor to ~150-200 chars with constraints moved to parameter descriptions.
No idempotency guarantees stated. set_list_appearance, set_list_pinned, set_smart_list_pinned are all state mutations. Agents retry on ambiguous failures, the tools should document whether repeated calls with identical params are safe (idempotent) or risk duplicate side effects.