MCP server for iMessage - read, search, and send messages from Claude or any MCP client
The iMessage MCP server has 13 tools with consistently defined schemas and descriptions. Naming follows verb_noun conventions well. However, several critical issues emerge: (1) Output schemas are not documented, no return type specifications visible in code, forcing LLMs to guess response structure. (2) Error handling is minimal, tools return generic error text without guidance for recovery or categorization (retryable vs. fatal). (3) Some tools lack actionable constraints, e.g., 'filePaths' in send-files has no guidance on absolute vs. relative paths, file size limits, or supported MIME types. (4) Parameter descriptions are present but sometimes generic: 'Filter by sender' doesn't specify expected format (phone, email, both?). (5) No documentation of tool composability, downstream tools don't clearly show what IDs they accept from upstream results. Tools are well-named and have basic structure, but lack the polish and completeness needed for production grade (70+).
Search for a contact by name and get their phone number. Use this FIRST when the user mentions someone by name instead of phone number. Searches both iMessage history and macOS Contacts.
Get messages that have file attachments
Get the full conversation history with a specific contact
Get all attachments from a conversation with a specific contact
Get messages with optional filtering by sender, date, service, etc.
Get all unread messages grouped by sender
List all chats with contact names, sorted by recent activity
Output schemas not documented. No return type specifications visible in code for any tool. LLMs cannot plan downstream calls or extract structured data from responses.
Error handling returns generic text without recovery guidance or error classification. Tools catch errors and return 'Error: {message}' with no indication of whether the error is retryable, user-fixable, or fatal.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 48 | - | v1 |
List all contacts from the macOS Contacts app with their phone numbers
Search for messages containing specific text
Send a file attachment to a recipient
Send multiple files to a recipient
Send an image to a recipient
Send a text message to a phone number or email
Parameter format constraints missing. 'to' parameter in send-* tools accepts 'phone number or email' but no description of expected format (e.g., '+1234567890' vs '1234567890', what email format). 'contact' in get-conversation similarly undefined.
No file handling constraints documented. send-files and send-file tools lack guidance on file size limits, supported MIME types, path requirements (absolute vs relative), or file existence validation.
Tool composability not documented. No clear statement of which response fields (IDs, references) downstream tools accept. E.g., does find-contact return a format that get-conversation expects?
Destructive operations lack confirmation or dry-run support. send-message, send-file, send-image, and send-files are write operations with irreversible side effects but no confirmation step or confirmation request pattern.
Tool annotations missing. No tool definitions specify readOnlyHint, destructiveHint, or idempotentHint, which would help agents classify operations and plan safer execution strategies.