imessage-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| IMESSAGE_DB | No | Path to iMessage database | ~/Library/Messages/chat.db |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_messagesA | Full-text search across all iMessages with rich filtering. Supports query text, contact, date range, direction, group chat, and attachment filters. By default, only searches contacts you've messaged. Use include_all to search everything. |
| get_conversationA | Get a full conversation thread with a specific contact or chat. Supports cursor-based pagination via before_rowid (backward) or after_rowid (forward) for scrolling through history. |
| list_contactsA | List all contacts with message counts and tier assignments. Supports filtering by tier and minimum message threshold. By default, only shows contacts you've actually messaged (replied to). Use include_all to see all. |
| get_contactB | Deep info on a specific contact: tier, message stats, yearly breakdown, and recent messages. |
| resolve_contactA | Fuzzy-match a name, phone number, or email to a contact record. Uses multi-level resolution: exact match, digits, fuzzy, and macOS AddressBook. |
| message_statsA | Aggregate message statistics with flexible time-series grouping. Returns counts, sent/received splits, and averages grouped by day, week, month, year, hour, or day-of-week. By default excludes contacts you've never replied to. |
| contact_statsB | Deep per-contact analytics: message volumes, response time estimates, conversation patterns, and yearly trends. |
| temporal_heatmapA | Generate a 7x24 activity heatmap (day-of-week x hour-of-day). Returns message counts for each of the 168 weekly time slots. By default excludes contacts you've never replied to. |
| list_group_chatsB | List all group chats with member counts, message volumes, and activity dates. Group chats have multiple participants. |
| get_group_chatA | Detailed info on a specific group chat: all members with per-member message counts, activity timeline, and recent messages. |
| list_attachmentsA | Query message attachments (images, videos, audio, documents) with filtering by contact, MIME type, and date range. Returns file metadata, not file contents. |
| get_reactionsA | Tapback/reaction analytics: distribution by type, top reactors, most-reacted messages, emoji breakdown. Queries associated_message_type 2000-2005 for love/like/dislike/laugh/emphasize/question reactions. |
| get_read_receiptsB | Read receipt and delivery timing analytics: per-contact read latency stats, unread patterns, fastest/slowest readers. Queries date_read and date_delivered columns. |
| get_threadA | Reconstruct iMessage reply threads using thread_originator_guid. Returns nested thread trees with parent message and all replies in order. |
| get_edited_messagesA | Find edited and unsent (retracted) messages. Queries date_retracted and date_edited columns. Returns message list with timestamps and per-contact stats. |
| get_message_effectsB | iMessage expressive send effects and screen effects analytics: slam, loud, gentle, invisible ink, confetti, fireworks, balloons, lasers, etc. Queries expressive_send_style_id. |
| on_this_dayA | Messages from this date in previous years — like 'Memories' for iMessage. Shows what you and your contacts were talking about exactly 1, 2, 3+ years ago today. By default excludes contacts you've never replied to. |
| first_last_messageA | The very first and very last message ever exchanged with a contact. People use this for sentimental lookups like 'what was the first text I sent my partner?' or 'what was the last thing my grandparent texted me?' |
| who_initiatesA | Who starts conversations? After a gap of N hours, the next message is a 'conversation initiation.' Shows per-contact who reaches out first and how often. Answers 'do I always text first?' By default excludes contacts you've never replied to. |
| streaksA | Consecutive-day messaging streaks with contacts. Like Snapchat streaks but for iMessage. Shows longest streak, when it happened, and current streak status. By default excludes contacts you've never replied to. |
| double_textsA | Detect double-texting and unanswered message patterns. Finds when you (or a contact) sent multiple consecutive messages without a reply. Shows frequency, longest bursts, and who does it more. Omit contact for a global ranking of who you double-text the most. |
| conversation_gapsA | Find the longest silences in a conversation. Detects periods where you and a contact stopped talking — falling-outs, busy periods, or drifting apart. Shows gap duration and when it happened. |
| forgotten_contactsA | Find dormant relationships — contacts you used to message but haven't talked to in a long time. Great for reconnecting with people you've lost touch with. By default excludes contacts you've never replied to. |
| yearly_wrappedA | Your iMessage Year in Review — like Spotify Wrapped but for texting. Returns a complete summary of a year: total messages, top contacts, busiest day, monthly trends, reactions, group chats, media shared, late-night texting, new contacts, and effects used. By default excludes contacts you've never replied to. Defaults to last year. |
| check_new_messagesA | Check for new messages since your last check. First call sets a baseline. Subsequent calls report what arrived since. |
| helpA | Show the imessage-mcp guide: all 26 tools and usage examples. Call this when you're unsure what's available. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 26 tools
Each tool has a clearly distinct purpose with no significant overlap; for example, 'get_contact' retrieves detailed contact info, while 'contact_stats' provides analytics, and 'list_contacts' lists contacts with counts. The descriptions are specific enough to prevent misselection, covering unique aspects like message effects, reactions, streaks, or temporal analysis.
Tool names follow a consistent verb_noun pattern throughout, such as 'check_new_messages', 'get_contact', 'list_attachments', and 'search_messages'. There are no deviations in style (e.g., all use snake_case) or verb usage, making the set predictable and easy to navigate.
With 26 tools, the count feels heavy for an iMessage analytics server, potentially overwhelming for agents. While the tools cover a wide range of features (e.g., stats, searches, temporal analysis), it borders on excessive, as some functionalities could be consolidated (e.g., multiple analytics tools like 'contact_stats', 'message_stats', 'yearly_wrapped').
The tool surface is comprehensive for iMessage analytics, covering CRUD-like operations (e.g., 'get_conversation', 'search_messages'), lifecycle coverage (e.g., 'first_last_message', 'on_this_day'), and extensive analytics (e.g., 'streaks', 'who_initiates', 'yearly_wrapped'). There are no obvious gaps; agents can perform detailed queries, statistical analysis, and historical lookups without dead ends.