messages-mcp
Allows reading and responding to Apple Messages (iMessage) on macOS, including listing chats, retrieving conversation context, fetching unread messages, sending messages, and marking chats as read.
Provides tools for interacting with local macOS Messages, enabling AI agents to manage chats and messages on the user's Mac through the Messages app.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@messages-mcpshow my recent messages"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-mcpClaude 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.chatcan 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_rundefaults totrue; passfalseto 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.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/raghavrat/messages-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server