Skip to main content
Glama
messages-mcp

messages-mcp

by raghavrat

messages-mcp

MCP server for reading and responding to local macOS Messages from clients like Claude Desktop and Codex.

The server reads ~/Library/Messages/chat.db, resolves names through local Contacts/AddressBook source databases, and sends through the macOS Messages app using AppleScript.

Requirements

  • macOS with Messages configured

  • Python 3.10+

  • Full Disk Access for the app running the MCP server

  • Automation permission for controlling Messages when sending

Related MCP server: imessage-mcp

Install

From this repo:

python3 -m venv .venv
. .venv/bin/activate
pip install -e .

Run manually:

messages-mcp

Claude Desktop

Add this to Claude Desktop's MCP config, adjusting the path:

{
  "mcpServers": {
    "messages": {
      "command": "/Users/YOU/Documents/messages-mcp/.venv/bin/messages-mcp"
    }
  }
}

Restart Claude Desktop after editing the config.

Codex

Use the command path from the virtualenv:

{
  "mcpServers": {
    "messages": {
      "command": "/Users/YOU/Documents/messages-mcp/.venv/bin/messages-mcp"
    }
  }
}

Tools

  • list_chats(query="", limit=25) List recent chats, optionally filtered by contact name, phone/email, or group name.

  • get_conversation_context(chat, limit=30) Return recent messages and attachment metadata for a chat. chat can be a contact name, phone/email, or group name.

  • get_unread_messages(chat="", limit=20) Return unread incoming messages for one chat or all recent chats.

  • send_message(chat, text, dry_run=true) Send a message through Messages. dry_run defaults to true; pass false to actually send.

  • mark_read(chat) Best-effort mark a chat as read through Messages.

Safety

Sending is intentionally explicit. The send_message tool defaults to dry_run=true, so clients can inspect the target and text before sending.

Do not run this server for an MCP client you do not trust. Any connected client with tool access can read local Messages context and, if it calls send_message(..., dry_run=false), send messages through your account.

Troubleshooting

If chats do not appear:

  • Give the MCP host app Full Disk Access.

  • Use a contact name for one-on-one chats.

  • Use the exact group chat title for group chats.

  • Make sure Messages is signed in and synced locally.

If sending fails:

  • Open Messages once manually.

  • Approve the Automation permission prompt.

  • Try send_message(..., dry_run=true) first to verify the resolved target.

Available Tools

5 tools
get_conversation_contextC

Return recent conversation context for a chat. Prefer contact names for direct chats and group titles for groups.

Inputs: chat (required), limit. Returns: object

get_unread_messagesB

Return unread incoming messages. If chat is empty, checks recent chats.

Inputs: chat, limit. Returns: object

list_chatsB

List recent Messages chats, optionally filtered by contact name, phone/email, or group name.

Inputs: limit, query. Returns: result

mark_readC

Best-effort mark a chat read through macOS Messages.

Inputs: chat (required). Returns: object

send_messageC

Send a message to a chat through macOS Messages. dry_run defaults to true for safety.

Inputs: chat (required), text (required), dry_run. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.3/5.0

    Scored across 5 tools

    Disambiguation5/5

    Each tool targets a distinct operation: retrieving context, unread messages, listing chats, marking read, and sending. No overlap in functionality.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern in snake_case (e.g., get_conversation_context, list_chats), making the set predictable.

    Tool Count5/5

    Five tools is well-scoped for a messaging server, providing core functionality without unnecessary bloat or gaps.

    Completeness4/5

    The set covers essential operations (reading, listing, sending, marking read) but is missing features like deleting messages or fetching specific conversation details, which are minor gaps.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      A local MCP server that enables reading iMessage conversations and sending new messages through Claude Desktop. It provides secure, read-only access to your Mac's iMessage database and AppleScript-based message sending capabilities.
      6
      MIT
    • F
      license
      A
      quality
      D
      maintenance
      A read-only MCP server that exposes your iMessage data to Claude Code and Claude Desktop, with automatic contact name resolution.
      3
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      MCP server for reading and sending iMessages on macOS. Exposes iMessage history and send capabilities through tools like list_conversations and send_imessage.
      11 npm
      MIT