Model Context Protocol server for macOS Apple Reminders integration with Claude
The server defines 6 tools with clear verb-prefixed names and consistent schema structures. All tools have descriptions (10-90 chars) and input schemas with typed parameters. However, descriptions are often generic and lack actionable guidance for LLM selection. Parameter descriptions are present but minimal (many under 30 chars). Output schemas are NOT documented, critical gap. Error handling is absent from visible code. Missing idempotency guidance for write operations. Tool composition is reasonable (single responsibility), but pagination and result-limiting patterns are absent for list operations.
Create a new reminder in a specified list
Delete a reminder by ID
Get reminders from a specific list or all lists, with optional filtering
Get all reminder lists available in the Reminders app
Search for reminders by name or body content
Update an existing reminder
Output schemas NOT documented. LLMs cannot plan downstream operations or extract chaining IDs. E.g., get_reminders returns reminders as JSON but structure (fields: id, name, completed, etc.) is invisible to caller.
Descriptions are functional but lack LLM-selection context. E.g., 'Update an existing reminder' does not explain WHEN to use it (vs. get_reminders), WHAT fields are mutable, or implications of partial updates. Baseline: descriptions should be 50 - 200 chars and answer what/when/how.
delete_reminder lacks error guidance or confirmation step. Irreversible operations should support dry-run or require confirmation to prevent accidental deletion. No recovery guidance if reminder ID is invalid.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 45 | - | v1 |
No pagination or result-limit parameters on list_reminder_lists or get_reminders. If a user has 1000+ reminders, returning all at once blows context window. Baseline: paginated results with limit/offset and total count.
Parameter descriptions are minimal (many <30 chars). E.g., 'ID of the reminder to update' lacks details on format (UUID? numeric? string?). Baseline: avg param description 72 chars, should explain format/constraints.
Priority parameter uses numeric codes (0, 1, 5, 9) instead of enums. Should declare as enum: ['none', 'high', 'medium', 'low']. Free-form numbers invite hallucinated invalid values.
Date format (MM/DD/YYYY HH:MM AM/PM) is ambiguous and locale-dependent. Should accept ISO 8601 (2024-01-15T14:30:00Z) or document strict format with examples. LLMs frequently miscalculate date conversions.
No idempotency guidance. Agents may retry create_reminder on transient failures, risking duplicates. Mark tool as idempotent or provide deduplication key.
Error handling not visible in tool definitions. No examples of what errors are possible (invalid list name, missing reminder ID, etc.) or how LLM should recover. Baseline: error responses must guide next action.