by mattt
Enables AI assistants to retrieve and manage personal macOS data such as calendar events, contacts, messages, reminders, location, maps, and weather through a local MCP server, allowing personalized AI interactions without sending data off‑device.
iMCP provides a macOS‑based Model Context Protocol (MCP) server that exposes native services—Calendar, Contacts, Messages, Reminders, Location, Maps, Weather, and more—to AI clients like Claude Desktop. The server runs locally, respects macOS sandbox permissions, and returns results as JSON‑LD for easy consumption by AI tools.
brew install --cask mattt/tap/iMCP
claude_desktop_config.json
:
{
"mcpServers": {
"iMCP": { "command": "imcp-server" }
}
}
fetchWeather
, fetchContacts
, listCalendarEvents
, etc., become available in the client UI.imcp-server
) – Communicates over stdio; discovered via Bonjour (_mcp._tcp
).Q: Do I need an internet connection? A: The MCP server runs entirely on your Mac. Network is only required for the AI client (e.g., Claude) to communicate with its own backend.
Q: Which macOS versions are supported? A: macOS 15.3 or later.
Q: How is my privacy protected? A: iMCP never logs or uploads personal data. Permissions are granted per‑service, and you can revoke them in System Settings.
Q: Can I use iMCP with other AI tools?
A: Yes. Any application that supports the Model Context Protocol can be pointed at the imcp-server
command.
Q: How do I debug MCP interactions?
A: Use the MCP Inspector (npx @modelcontextprotocol/inspector …
) or the Companion macOS app to view requests and responses.
iMCP is a macOS app for connecting your digital life with AI. It works with Claude Desktop and a growing list of clients that support the Model Context Protocol (MCP).
First, download the iMCP app (requires macOS 15.3 or later).
Or, if you have Homebrew installed, you can run the following command:
brew install --cask mattt/tap/iMCP
When you open the app, you'll see a icon in your menu bar.
Clicking on this icon reveals the iMCP menu, which displays all available services. Initially, all services will appear in gray, indicating they're inactive.
The blue toggle switch at the top indicates that the MCP server is running and ready to connect with MCP-compatible clients.
To activate a service, click on its icon.
The system will prompt you with a permission dialog.
For example, when activating Calendar access, you'll see a dialog asking "iMCP" Would Like Full Access to Your Calendar
.
Click Allow Full Access to continue.
[!IMPORTANT] iMCP does not collect or store any of your data. Clients like Claude Desktop do send your data off device as part of tool calls.
Once activated, each service icons goes from gray to their distinctive colors — red for Calendar, green for Messages, blue for Location, and so on.
Repeat this process for all of the capabilities you'd like to enable. These permissions follow Apple's standard security model, giving you complete control over what information iMCP can access.
If you don't have Claude Desktop installed, you can download it here.
Open Claude Desktop and go to "Settings... (⌘,)".
Click on "Developer" in the sidebar of the Settings pane,
and then click on "Edit Config".
This will create a configuration file at
~/Library/Application Support/Claude/claude_desktop_config.json
.
To connect iMCP to Claude Desktop, click > "Configure Claude Desktop".
This will add or update the MCP server configuration to use the
imcp-server
executable bundled in the application.
Other MCP server configurations in the file will be preserved.
Click
> "Copy server command to clipboard".
Then open claude_desktop_config.json
in your editor
and enter the following:
{
"mcpServers": {
"iMCP": {
"command": "{paste iMCP server command}"
}
}
}
Quit and reopen the Claude Desktop app. You'll be prompted to approve the connection.
After approving the connection, you should now see 🔨12 in the bottom right corner of your chat box. Click on that to see a list of all the tools made available to Claude by iMCP.
Now you can ask Claude questions that require access to your personal data, such as:
"How's the weather where I am?"
Claude will use the appropriate tools to retrieve this information, providing you with accurate, personalized responses without requiring you to manually share this data during your conversation.
iMCP is a macOS app that bundles a command-line executable, imcp-server
.
iMCP.app
provides UI for configuring services and — most importantly —
a means of interacting with macOS system permissions,
so that it can access Contacts, Calendar, and other information.imcp-server
provides an MCP server that
uses standard input/output for communication
(stdio transport).The app and CLI communicate with each other on the local network
using Bonjour for automatic discovery.
Both advertise a service with type "_mcp._tcp" and domain "local".
Requests from MCP clients are read by the CLI from stdin
and relayed to the app;
responses from the app are received by the CLI and written to stdout
.
See StdioProxy
for implementation details.
For this project, we created what became the official Swift SDK for Model Context Protocol servers and clients. The app uses this package to handle proxied requests from MCP clients.
Apple doesn't provide public APIs for accessing your messages.
However, the Messages app on macOS stores data in a SQLite database located at
~/Library/Messages/chat.db
.
iMCP runs in App Sandbox,
which limits its access to user data and system resources.
When you go to enable the Messages service,
you'll be prompted to open the chat.db
file through the standard file picker.
When you do, macOS adds that file to the app's sandbox.
NSOpenPanel
is magic like that.
But opening the iMessage database is just half the battle.
Over the past few years,
Apple has moved away from storing messages in plain text
and instead toward a proprietary typedstream
format.
For this project, we created Madrid:
a Swift package for reading your iMessage database.
It includes a Swift implementation for decoding Apple's typedstream
format,
adapted from Christopher Sardegna's imessage-exporter project
and blog post about reverse-engineering typedstream
.
The tools provided by iMCP return results as
JSON-LD documents.
For example,
the fetchContacts
tool uses the Contacts framework,
which represents people and organizations with the CNContact
type.
Here's how an object of that type is encoded as JSON-LD:
{
"@context": "https://schema.org",
"@type": "Person",
"name": "Mattt",
"url": "https://mat.tt"
}
Schema.org provides standard vocabularies for people, postal addresses, events, and many other objects we want to represent. And JSON-LD is a convenient encoding format for humans, AI, and conventional software alike.
For this project, we created Ontology: a Swift package for working with structured data. It includes convenience initializers for types from Apple frameworks, such as those returned by iMCP tools.
To debug interactions between iMCP and clients, you can use the inspector tool (requires Node.js):
Click > "Copy server command to clipboard"
Open a terminal and run the following commands:
# Download and run inspector package on imcp-server
npx @modelcontextprotocol/inspector [paste-copied-command]
# Open inspector web app running locally
open http://127.0.0.1:6274
Inspector lets you see all requests and responses between the client and the iMCP server, which is helpful for understanding how the protocol works.
Companion is a utility for testing and debugging your MCP servers (requires macOS 15 or later). It gives you an easy way to browse and interact with a server's prompts, resources, and tools. Here's how to connect it to iMCP:
typedstream
format
used by the Messages app.This project is available under the MIT license. See the LICENSE file for more info.
iMessage® is a registered trademark of Apple Inc. This project is not affiliated with, endorsed, or sponsored by Apple Inc.
Please log in to share your review and rating for this MCP.
Explore related MCPs that share similar capabilities and solve comparable challenges
by nspady
Provides Google Calendar integration for AI assistants, enabling event listing, creation, updating, deletion, free/busy queries, recurring event handling, and smart scheduling via natural language.
by baidu-maps
Offers a comprehensive suite of geospatial APIs and tools for developers and AI agents, enabling geocoding, reverse geocoding, POI search, route planning, weather, traffic, IP location, and real‑time traffic queries via standardized MCP interfaces.
by Omar-V2
Interact with the macOS Calendar through natural‑language commands, enabling creation, querying, and updating of events in a conversational way.
by GongRzhe
Enables LLMs to perform travel-related tasks such as location search, place details lookup, route calculation, and timezone retrieval using Google Maps services.
by zcaceres
Integrates with Google Tasks to list, read, search, create, update, and delete tasks via MCP tools.
by v-3
Interact with Google Calendar to list, create, update, delete events and find free time slots via Claude.
by r-huijts
Provides real-time Dutch railway travel information—including departures, arrivals, journey planning, pricing, and station facilities—through an MCP server that Claude can query.
by TimLukaHorstmann
Provides hourly and daily weather forecasts via the AccuWeather API for Model Context Protocol (MCP) integration with language models.
by isdaniel
Provides current weather, historical weather ranges, and timezone‑aware current datetime for specified cities using the free Open‑Meteo API.