An MCP server that securely interfaces with your iMessage database via the Model Context Protocol (MCP), allowing LLMs to query and analyze iMessage conversations. It includes robust phone number validation, attachment processing, contact management, group chat handling, and full support for sending and receiving messages.
# Add to your Claude Code skills
git clone https://github.com/carterlasalle/mac_messages_mcpGuides for using mcp servers skills like mac_messages_mcp.
Last scanned: 5/30/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-05-30T15:06:33.846Z",
"npmAuditRan": true,
"pipAuditRan": true
}mac_messages_mcp is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by carterlasalle. An MCP server that securely interfaces with your iMessage database via the Model Context Protocol (MCP), allowing LLMs to query and analyze iMessage conversations. It includes robust phone number validation, attachment processing, contact management, group chat handling, and full support for sending and receiving messages. It has 318 GitHub stars.
Yes. mac_messages_mcp passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/carterlasalle/mac_messages_mcp" and add it to your Claude Code skills directory (see the Installation section above).
mac_messages_mcp is primarily written in Python. It is open-source under carterlasalle on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh mac_messages_mcp against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
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.
uvbrew install uv
Confirm that the launcher is available:
uvx --version
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:
uvx mac-messages-mcp
Choose your client below.
Open Claude → Settings → Developer → Edit Config, then add:
{
"mcpServers": {
"mac-messages": {
"command": "uvx",
"args": ["mac-messages-mcp"]
}
}
}
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:
claude mcp add --transport stdio --scope user mac-messages -- uvx mac-messages-mcp
Verify it:
claude mcp get mac-messages
Inside Claude Code, run /mcp to inspect the connection and tools.
Codex clients on the same Mac share MCP configuration. Add the server with:
codex mcp add mac-messages -- uvx mac-messages-mcp
Then verify it:
codex mcp list
You can also add it directly to ~/.codex/config.toml:
[mcp_servers.mac-messages]
command = "uvx"
args = ["mac-messages-mcp"]
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:
{
"mcpServers": {
"mac-messages": {
"command": "uvx",
"args": ["mac-messages-mcp"]
}
}
}
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:
code --add-mcp '{"name":"mac-messages","command":"uvx","args":["mac-messages-mcp"]}'
The equivalent user or workspace mcp.json entry is:
{
"servers": {
"mac-messages": {
"type": "stdio",
"command": "uvx",
"args": ["mac-messages-mcp"]
}
}
}
[!NOTE] VS Code uses a top-level
serversobject. Claude Desktop and Cursor usemcpServers.
Use this generic server definition:
{
"command": "uvx",
"args": ["mac-messages-mcp"]
}
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:
Show me my messages from the last two hours.
Find messages from Carter about dinner in the last 30 days.
Find PDFs sent to me this month, but do not open any yet.
Find Jordan in my contacts and draft a message saying I am running 10 minutes
late. Do not send it until I confirm.
The first uvx launch can take longer while it downloads and caches Python
dependencies.
| 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 |
The server also exposes two MCP resources:
messages://recent/{hours}messages://contact/{contact}/{hours}For direct messages, E.164 phone numbers are the most reliable format:
+14155551234
The server normalizes bare numbers with a country code and converts 10-digit US
numbers to +1.... It also accepts email addresses, contact names, and
contact:N selections returned after an ambiguous contact search.
For a group conversation, call tool_get_chats, pass its chat ID to
tool_send_message, and set group_chat=true. Use the same ID as chat_id in
tool_get_recent_messages to read that conversation.
Attachment access is deliberately split into three steps:
[attachments: #42 image/jpeg (invitation.jpg)].tool_search_attachments searches metadata without loading file contents.tool_get_attachment fetches one selected attachment.Images up to 5 MB are returned inline by default. HEIC images are converted to PNG. Larger images, PDFs, video, and audio are returned as local filesystem paths so the MCP client can decide whether to open them. Stickers, link-preview payloads, and `.