iMessage MCP server for Claude Code and AI agents. A durable inbox, search, contacts, and sending with delivery confirmation, for Apple Messages on macOS.
Strong tool naming (verb_noun pattern throughout) and comprehensive parameter descriptions. All 10 tools have clear, actionable descriptions (avg 150 chars). Input schemas are well-formed with types and descriptions for all parameters. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal; tools lack recovery guidance. Missing tool annotations (readOnlyHint/destructiveHint). Some parameters lack constraints (e.g., 'limit' unbounded in search_messages despite 'max 500' in description).
Read one conversation in order, oldest first.
Messages that have arrived since this tool last ran. The cursor is stored on disk, so anything received while nothing was running is still waiting here rather than lost. Call with peek=true to look without consuming.
List chats by most recent activity, with resolved contact names and participants.
Look up a person in Contacts by name and return their sendable handles. Use before send_message when you know a name but not a number.
Search message history by text, sender, chat, or date range. Reads bodies from both the text column and the encoded attributedBody blob, so it finds messages that plain SQL cannot.
Send a file by absolute path. Images and audio render inline in Messages.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Forces agents to guess what data is returned.
Missing tool annotations. No readOnlyHint/destructiveHint declared. LLMs cannot distinguish safe (read) from unsafe (write) operations without explicit hints.
Numeric parameters lack min/max constraints in schema. 'limit' in search_messages says 'max 500' in description but schema has no maximum property. Unbounded numbers invite absurd LLM inputs.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 63 | 2026-07-28+ | v2 |
Send a message to a phone number, email, or chat GUID. Waits for Messages to confirm delivery and reports the failure if it did not go through.
Database reachability, cursor position, contact count, and which optional tools are installed.
Turn text into speech with ElevenLabs and return the audio file path, optionally sending it. Note that Messages shows script-sent audio as an attachment, not as a native voice-note bubble.
Transcribe an audio attachment to text. Pass a message rowid to transcribe its attachments, or an absolute path. Uses the configured provider: groq by default, or local to keep the audio on this machine.
Error handling absent. No recovery guidance in tool descriptions. If send_message fails, LLM has no hint what to do next (retry? check parameters? ask user?).
send_file and speak lack detailed parameter descriptions. 'to' parameter in send_file has no description; 'path' lacks format guidance (absolute vs relative, file existence check?).