Apple MCP tools for contacts, notes, messages, and mail integration
Apple MCP provides 7 tools with explicit schemas and descriptions, but quality is inconsistent. All tools have descriptions (10-100+ chars) and input schemas with type definitions. However, parameter descriptions lack actionable constraints (no ranges, patterns, or format specs). Many parameters are conditionally required based on operation enum values, but these dependencies are documented only in descriptions, not in JSON Schema. Output schemas are completely undocumented, LLMs cannot predict what fields to expect from responses. Error handling and recovery guidance are absent. Tool naming follows verb_noun convention (contacts, notes, messages) but lacks specificity, 'contacts' could mean search, list, or get. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite several tools performing destructive operations (delete, send, create). Security-sensitive tools (messages send, mail send) lack confirmation or dry-run patterns.
Search, create, and open calendar events in Apple Calendar app
Search and retrieve contacts from Apple Contacts app
Interact with Apple Mail app - read unread emails, search emails, and send emails
Search locations, manage guides, save favorites, and get directions using Apple Maps
Interact with Apple Messages app - send, read, schedule messages and check unread messages
Search, retrieve and create notes in Apple Notes app
Search, create, and open reminders in Apple Reminders app
Output schemas completely undocumented. No tool returns a documented response structure. LLMs cannot predict what fields to extract or pass to downstream tools.
Conditional parameter requirements not expressed in JSON Schema. E.g., 'searchText' is required for search operation but optional for list. Descriptions state this, but schema does not use oneOf/allOf to enforce it.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools like 'messages send', 'mail send', 'notes create', and 'calendar create' perform irreversible operations but are not marked as destructive.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Parameter descriptions lack actionable constraints. No ranges (e.g., limit 1-100), no format specs (e.g., ISO 8601 for dates), no regex patterns. LLMs cannot validate inputs before calling.
No error handling or recovery guidance. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next.