Skip to main content
Glama

iMessage MCP

CLAUDE.md4.89 kB
# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Development Commands This is a Deno workspace monorepo with two packages: - `packages/imessage` - Core library for iMessage database access - `packages/imessage-mcp` - MCP server implementation ### Root Commands (affects all packages) ```bash # Cache dependencies for all packages deno cache packages/*/mod.ts # Code quality (runs on all packages) deno task fmt # Format all code deno task lint # Lint all packages deno task check # Type check all TypeScript files # Run tests deno task test # Publish packages to JSR (CI/CD) deno publish ``` ### Package-Specific Commands ```bash # Run the MCP server cd packages/imessage-mcp deno run --allow-read --allow-env --allow-sys --allow-ffi mod.ts # Development with file watching cd packages/imessage-mcp deno run --allow-read --allow-env --allow-sys --allow-ffi --watch mod.ts # Test the core library cd packages/imessage deno test --allow-read --allow-env --allow-ffi ``` ## Architecture Overview This monorepo contains a Model Context Protocol (MCP) server and core library that provide read-only access to the macOS iMessage database. The codebase follows functional programming principles with no classes. ### Package Structure 1. **@wyattjoh/imessage** (`packages/imessage/`) - Core library for iMessage database access - Database operations, type definitions, and utilities - No MCP dependencies - can be used standalone 2. **@wyattjoh/imessage-mcp** (`packages/imessage-mcp/`) - MCP server implementation - Imports and uses the core library - Provides LLM-accessible tools ### Core Components 1. **MCP Server Layer** (`packages/imessage-mcp/src/index.ts`) - Creates MCP server instance using `@modelcontextprotocol/sdk` - Defines 6 tools with Zod schemas for validation - Uses StdioServerTransport for communication - Lazy database initialization pattern 2. **Messages Database Layer** (`packages/imessage/src/messages.ts`) - Pure functions for all database operations - Direct SQLite access to `~/Library/Messages/chat.db` - Handles Apple's timestamp format (Core Data epoch: nanoseconds since 2001-01-01) - All queries are read-only with parameterized SQL - Implements pagination with metadata for all queries 3. **Contacts Integration** (`packages/imessage/src/contacts.ts`) - Direct SQLite access to `~/Library/Application Support/AddressBook/Sources/*/AddressBook-v22.abcddb` - Searches multiple AddressBook databases for comprehensive results - Phone number normalization (adds +1 prefix for 10-digit US numbers) - Returns both phone numbers and email addresses as potential iMessage handles 4. **Type System** (`packages/imessage/src/types.ts`) - Interfaces matching iMessage database schema - `MessageWithHandle` extends `Message` with denormalized handle data - All nullable fields use `T | undefined` pattern - `PaginatedResult<T>` wrapper for all paginated responses ### Key Technical Details - **Timestamp Conversion**: Apple stores timestamps as nanoseconds since 2001-01-01. Conversion formula: `date/1000000000 + 978307200` - **Database Paths**: - Messages: `~/Library/Messages/chat.db` - Contacts: `~/Library/Application Support/AddressBook/Sources/*/AddressBook-v22.abcddb` - **Functional Patterns**: All database functions are pure, taking `Database` as first parameter - **Error Handling**: Try-catch blocks in MCP tool handlers return error messages as text content - **Pagination**: All tools support limit/offset pagination and return hasMore flag for complete data retrieval ### MCP Tools 1. `search_messages` - Full-text search with date/contact filters 2. `get_recent_messages` - Latest messages across all chats 3. `get_chats` - List conversations ordered by last activity 4. `get_handles` - All contacts/phone numbers 5. `get_messages_from_chat` - Messages from specific chat GUID 6. `search_contacts` - Search macOS Contacts by name, returns phone/email handles ### Important Pagination Note All tools return paginated results. When performing analysis or summaries, ALWAYS check the `hasMore` field in the pagination metadata and continue fetching until `hasMore` is false to ensure complete data. ## iMessage Database Schema Notes - `message` table: Core message data - `handle` table: Contact information (phone/email) - `chat` table: Conversation metadata - `chat_message_join` table: Links messages to chats - Boolean fields stored as integers (0/1) - GUIDs are unique identifiers for messages and chats ## Repository Management - Always use `deno task fmt`, `deno task lint`, and `deno task check` after modifying or creating code to ensure that it's correct. - When making changes to the available tools, ensure you always update the README.md with the relevant changes.

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wyattjoh/imessage-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server