Every tool is annotated read-only against two local files, which is what makes auto-approving the calls reasonable. What sets it apart is how far past search it reaches — streaks, who texts first, the longest silence with someone, a whole year summarised — so it answers questions about relationships rather than just locating a message. Set IMESSAGE_SAFE_MODE=1 when you want the analytics without the message bodies.
A read-only server over the local iMessage database. It touches two files on disk, chat.db and the macOS AddressBook, makes no network requests, and writes nothing back.
- Full-text search across every message, with filters for contact, date range, direction, group chats and attachments, and cursor-paginated conversation threads for scrolling back through history
- Contacts with message counts and tiers, deep per-contact analytics, and fuzzy resolution of a name, number or email through the AddressBook
- Group chats listed with member counts and volumes, and one chat broken down member by member
- Statistics grouped by day, week, month, year, hour or day-of-week, plus an activity heatmap of weekday against hour of day
- The parts of iMessage most tools skip: tapbacks by type and top reactor, read-receipt and delivery latency per contact, reply threads reconstructed from their originators, edited and unsent messages, and expressive send effects
- Relationship questions asked directly: who starts conversations after a gap, consecutive-day streaks, double-texting patterns, the longest silences with a contact, dormant contacts worth reconnecting with, and the first and last message ever exchanged with someone
- on_this_day for what you were talking about a year ago, and yearly_wrapped for an entire year summarised — top contacts, busiest day, monthly trends, media, late-night texting
- Attachment metadata by contact, MIME type and date — file information, not file contents
- A help tool that prints the guide to every tool with usage examples
macOS and Node.js 18+, plus Full Disk Access granted to whatever runs the server — your terminal, Claude Desktop or Cursor — because macOS protects chat.db behind that permission. IMESSAGE_DB points at a database somewhere other than ~/Library/Messages/chat.db, IMESSAGE_SAFE_MODE=1 redacts every message body and returns metadata only, and IMESSAGE_SYNC picks up new messages through FSEvents (watch) or polling. stdio is the default; --transport http --port 3000 serves Streamable HTTP, and IMESSAGE_API_TOKEN then requires a bearer token on those requests. Run it with npx -y imessage-mcp.
One command — npm install -g imessage-mcp
