Apple Messages MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ENABLE_SEND | No | Set to 1 to enable messages_send (real texts). Default is 0. | 0 |
| MESSAGES_SCOPE | No | Comma/semicolon tokens: display name, chat_id, guid, handle. Default is unset (scoped shut). | |
| REDACT_PREVIEWS | No | Set to 1 to make bodies become [redacted N chars]. Default is 0. | 0 |
| MESSAGES_DB_MODE | No | Copy + WAL replay. direct opens the live file. | copy |
| MESSAGES_DB_PATH | No | Override for fixtures. | ~/Library/Messages/chat.db |
| MESSAGES_WAKE_HOOK | No | Watcher runs this executable with one JSON event on stdin. Default is unset. | |
| WATCH_INCLUDE_PREVIEW | No | Set to 1 to include a redacted preview in watcher events. Default is 0. | 0 |
| MESSAGES_ALLOW_UNSCOPED | No | Set to 1 to open the whole inbox. Default is 0. | 0 |
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 |
|---|---|
| messages_statusA | Report whether chat.db is readable, whether Full Disk Access is likely missing, macOS version hints, send/redact flags, snapshot size/age, and whether the inbox is scoped shut. Call this first when anything fails. Does not return message bodies. unscoped is true only when MESSAGES_ALLOW_UNSCOPED=1. |
| messages_list_chatsA | List recent conversations from the local Messages database (iMessage and SMS). No MESSAGES_SCOPE and MESSAGES_ALLOW_UNSCOPED is unset; list/search/thread/send/watch return SCOPE. Returns chat_id (chat.ROWID), guid, chat_identifier, handles (phone/email), and a last-message preview. Prefer guid to remember a thread across launches. Does not return attachment bytes. |
| messages_get_threadA | Return messages for one chat, oldest-first within the page. No MESSAGES_SCOPE and MESSAGES_ALLOW_UNSCOPED is unset; list/search/thread/send/watch return SCOPE. Identify the chat with chat_id (chat.ROWID), guid (via handle field or chat_id), or a participant handle (phone/email). If omitted and the allowlist has exactly one chat, that chat is used. before paginates: a message_id or ISO-8601 timestamp. from_date / to_date filter on the converted Apple date. Attachment metadata is included; file bytes are not. Tapbacks are omitted unless include_reactions is true. |
| messages_searchA | Search message text: SQL LIKE on the plain text column, then a bounded decode-scan of empty-text / Tahoe rows. No MESSAGES_SCOPE and MESSAGES_ALLOW_UNSCOPED is unset; list/search/thread/send/watch return SCOPE. Returns truncated:true and scanned when the Tahoe window is exhausted. With no chat_id, searches across all readable chats (or the allowlist). Case-insensitive. Does not search attachment binaries. Does not write FTS into chat.db. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |