Local macOS MCP server to read, search, and send iMessages with contact and attachment support.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag โ we're steadily working through the catalog.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
Inspect callable tools, capabilities, and parameters exposed to AI agents by Mac Messages MCP.
tool_get_recent_messagesRead recent messages, optionally filtered by contact or group chat ID
tool_fuzzy_search_messagesSearch message bodies by approximate text match; defaults to 30 days, or use `hours=0` for all history
tool_find_contactFuzzy-match a name in Contacts and return phone numbers
tool_get_chatsList named group chats and their identifiers
tool_search_attachmentsFind attachment metadata by date, contact, MIME type, and limit
tool_get_attachmentFetch one attachment by ID, inline when supported or as a local path
Use Claude, Codex, Cursor, VS Code, or any local MCP client to search, read, and send messages through the macOS Messages app.
Mac Messages MCP runs locally on your Mac. It opens the Messages and Contacts databases read-only, returns only the data a client asks for, and uses Messages.app automation only when the client explicitly calls the send tool.
[!IMPORTANT] This server is macOS-only. Reading messages requires Full Disk Access. Sending requires a Mac signed into Messages plus permission for the launching app to automate Messages.
uvConfirm that the launcher is available:
Python 3.10 or newer is required. uvx can provision a compatible Python and
installs Mac Messages MCP in an isolated environment, so you do not need to
create a virtual environment first.
Open System Settings โ Privacy & Security โ Full Disk Access and enable the app that will launch the MCP server:
Quit and reopen the app after changing Full Disk Access. On the first contact lookup or send, macOS may separately ask for access to Contacts or permission to control Messages. Allow those prompts.
Also make sure Messages.app is open, signed in, and already able to send a normal message.
The server command is the same everywhere:
Choose your client below.
Open Claude โ Settings โ Developer โ Edit Config, then add:
Preserve any other servers already in claude_desktop_config.json, save the
file, and restart Claude Desktop.
Claude Desktop also supports installable .mcpb extensions. See
Build the Claude Desktop extension if you
want to package this repository as one.
Add it once at user scope so it is available in every project:
Verify it:
Inside Claude Code, run /mcp to inspect the connection and tools.
Codex clients on the same Mac share MCP configuration. Add the server with:
Then verify it:
You can also add it directly to ~/.codex/config.toml:
Restart the desktop app or IDE extension after changing the configuration. In
Codex CLI, use /mcp to view the active server.
Or open Cursor Settings โ Tools & MCP โ New MCP Server and use:
Restart the server from Cursor's MCP settings after saving.
Open the Command Palette and run MCP: Add Server. Choose Command
(stdio), enter uvx as the command, add mac-messages-mcp as the argument,
and install it globally.
Or add it from a terminal:
The equivalent user or workspace mcp.json entry is:
[!NOTE] VS Code uses a top-level
serversobject. Claude Desktop and Cursor usemcpServers.
Use this generic server definition:
If a GUI client reports that uvx cannot be found, run which uvx in Terminal
and replace "uvx" with the returned absolute path. Homebrew commonly installs
it at /opt/homebrew/bin/uvx on Apple silicon and /usr/local/bin/uvx on Intel
Macs.
Ask your client to call tool_check_db_access, then tool_check_addressbook.
Once both succeed, try prompts such as:
The first uvx launch can take longer while it downloads and caches Python
dependencies.
Phone numbers written in national format (06 39 98 00 01, (415) 555-1234)
have to be expanded to E.164 before they can be matched against the Messages
database, and that expansion needs to know which country they belong to. The
server reads your Mac's own region setting for this, so on a correctly
configured Mac there is nothing to do.
Set MAC_MESSAGES_REGION to an ISO 3166-1 alpha-2 code when your
numbers belong to a different region than your Mac is configured for โ a French
SIM on a Mac set to en_US, say:
For Claude Code:
The region is resolved once at startup, so restart the server after changing
it. Resolution order: MAC_MESSAGES_REGION, then the macOS AppleLocale
preference, then LC_ALL / LC_CTYPE / LANG, then US. Numbers already
written in E.164 (+33639980001) are never reinterpreted and need none of
this.
| Tool | Purpose | Side effect |
|---|---|---|
tool_get_recent_messages | Read recent messages, optionally filtered by contact or group chat ID | Read-only |
tool_fuzzy_search_messages | Search message bodies by approximate text match; defaults to 30 days, or use hours=0 for all history | Read-only |
tool_find_contact | Fuzzy-match a name in Contacts and return phone numbers | Read-only |
tool_get_chats | List named group chats and their identifiers | Read-only |
tool_search_attachments | Find attachment metadata by date, contact, MIME type, and limit | Read-only |
tool_get_attachment | Fetch one attachment by ID, inline when supported or as a local path | Read-only |
tool_check_imessage_availability | Check likely iMessage availability for a phone number or email | Read-only |
tool_check_db_access | Diagnose access to ~/Library/Messages/chat.db | Read-only |
tool_check_contacts | Return a contact count and a small sample | Read-only |
tool_check_addressbook | Diagnose Contacts/AddressBook database access | Read-only |
tool_send_message | Send one direct or group message through Messages.app | Sends a real message |
Factual signals from GitHub, npm, and our automated checks โ not a rating.
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/carterlasalle-mac-messages-mcp)<a href="https://allmcps.com/mcp/carterlasalle-mac-messages-mcp"><img src="https://allmcps.com/api/badge/carterlasalle-mac-messages-mcp?style=directory" alt="Mac Messages MCP on AllMCPs" /></a>