Apple MCP tools for contacts, notes, messages, and mail integration
Apple MCP has 8 tools with complete input schemas and descriptions, but significant gaps in parameter documentation and output schema specification. Most tools use operation-based dispatch (enum-gated), which is reasonable, but many parameters lack type constraints and detailed descriptions. No output schemas are documented. Error handling is not visible in the provided code. Tool names are generic (contacts, notes, mail) rather than verb-noun patterns (search_contacts, create_note). Parameter descriptions often state 'required for X operation' but lack format/constraint details. The server targets Apple platform automation with reasonable scope, but definition quality is below production baseline.
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
Tool names lack action verbs. 'contacts', 'notes', 'mail' are nouns; should be 'search_contacts', 'create_note', 'send_mail'. LLMs infer intent from verb-noun patterns.
No output schemas documented. Tools return results but LLMs cannot plan downstream calls without knowing response structure (e.g., does search_contacts return contact_id, phone, email?).
Parameter descriptions lack format/constraint details. E.g., 'scheduledTime' says 'ISO string' but no validation guidance. 'limit' has no min/max bounds. LLMs pass invalid values without constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
Search the web using DuckDuckGo and retrieve content from search results
Operation-based dispatch (enum-gated) creates multi-tool-in-one antipattern. 'notes' with operation=['search','list','create'] should split into search_notes, list_notes, create_note. Agents cannot compose them independently.
No error handling guidance visible. Tools do not document recovery paths (e.g., 'If contact not found, try search_contacts with partial name'). Agents cannot self-correct on failures.