MCP server for managing Apple Reminders on macOS
The server has 4 tools with inconsistent quality. Naming follows verb_noun convention (create_reminder, get_reminder, list_reminder_lists, delete_reminder), which is positive. However, parameter descriptions lack specificity and formatting constraints. The get_reminder tool has an inconsistency where list_name is marked optional=true but described as required. Output schemas are not formally documented, responses are returned as unstructured strings or JSON dumps rather than structured objects with typed fields. Error handling provides basic recovery guidance but lacks categorization (retryable vs fatal). Security includes AppleScript sanitization for injection prevention, which is good, but input validation is minimal. The tool composition is reasonable but could be more atomic (delete_reminder searches across lists if list_name is omitted, which couples concerns).
Create a new reminder in Apple Reminder.
Delete a reminder by name.
Get reminders from Apple Reminders.
Get all available reminder lists.
Output schemas not formally documented. Tools return unstructured strings or JSON-stringified text rather than structured objects with typed fields. Parsing burden is on caller; no type safety for LLM downstream reasoning.
get_reminder has contradictory schema: list_name marked optional=true but description says '(required)'. Ambiguous parameter requirements confuse LLMs about when they can omit it.
Tool descriptions are too brief (34 - 87 chars vs baseline 194 chars average). They lack context for LLM tool selection: when to use list_reminder_lists vs get_reminder? What does get_reminder return? Descriptions should answer 'what, when, what's returned'.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 52 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 48 | - | v1 |
No pagination support. get_reminder accepts limit=20 but does not return next_cursor or total_count. Large reminder lists will be truncated without visibility into what was omitted.
Destructive operation (delete_reminder) lacks confirmation step or dry-run. Agents can accidentally delete reminders without a safety gate.
Error handling does not categorize errors as retryable, user-fixable, or fatal. When AppleScript execution fails, the response is a generic error message with no recovery guidance (e.g., 'List not found. Available lists: ...').
Parameter constraints lack formal specification. due_time is described as HHMMSS but no regex pattern or length constraint in schema. limit parameter is unbounded (no min/max). This invites invalid inputs.
delete_reminder searches all lists if list_name omitted. This couples name lookup and deletion concerns; if two lists have reminders with the same name, behavior is ambiguous. Tool should either require list_name or document the search order.