Connect Your Digital Life to AI
Connect MCP clients to macOS calendars, contacts, messages, calls, reminders, shortcuts, maps, location, and weather with service permissions.
1.6.1Add to Favorites
Why it matters
Integrate your macOS digital life with AI models. Access and manage data from your calendar, contacts, messages, and more through a unified protocol.
Outcomes
What it gets done
Access and manage calendar events.
Search and retrieve contact information.
Query message history and location data.
Fetch current weather conditions.
Source
Get it from source
Spark does not host a copy of it.
Open sourceReports
Agent outcome reports
No reports yet
Capabilities
Tools your agent gets
Access contact information and search contacts by name, phone number, or email address
View and manage calendar events with customizable parameters such as recurrence and notifications
Access current location data and convert between addresses and geographic coordinates
Search for places, get directions, and estimate travel time
Access message history with specific participants in customizable time ranges
View and create reminders with customizable due dates, priorities, and notifications
Access current weather conditions including temperature, wind speed, and conditions for any location
Overview
iMCP is a macOS application and bundled MCP server for access to personal data and system services. Per-service permissions control calendars, contacts, messages, phone history, reminders, location, maps, shortcuts, and weather. Use it on macOS 15.3 or later when an MCP-compatible client needs authorized access to local personal information. Client tool calls can send retrieved information off the device.
What it does
iMCP connects MCP-compatible clients with personal information and services on macOS. The application manages service activation and system permissions, while its bundled imcp-server executable exposes the MCP interface. It supports connections from Claude Desktop, Claude Code, Cursor, and Amp.
The app and command-line server discover each other through Bonjour on the local network. Client requests arrive through standard input, are relayed to the application, and responses return through standard output. The application uses the Swift MCP SDK to handle proxied requests. Tool results are JSON-LD documents using Schema.org vocabularies; Ontology provides structured-data support and convenience initializers for Apple framework types.
When to use - and when NOT to
Use iMCP when a client needs personal context such as nearby weather, calendar events, contacts, or message history without manually copying the information into a conversation. It requires macOS 15.3 or later; access is limited to services the user activates through Apple's permission model.
iMCP does not collect or store user data, while clients such as Claude Desktop send data off device as part of tool calls. Account for that client behavior when deciding which services to enable. A running server does not mean every service is active: services initially appear gray until permission is granted.
Capabilities
Calendar tools view and manage events and create events with recurrence, alarms, and availability settings. Contacts provides information about the user and searches by name, phone number, or email. Location retrieves current position and converts addresses and coordinates. Maps supports place search, directions, points of interest, travel-time estimates, and static map images.
Messages retrieves history for selected participants and date ranges. Phone reads call history synced from an iPhone, filters by participant, date, or type, and starts calls with system confirmation. Reminders reads and creates entries with due dates, priorities, and alerts across lists. Shortcuts lists and runs Mac shortcuts with optional text input. Weather returns current conditions, temperature, and wind for a location.
Messages access requires granting the Messages folder through the file picker. Its SQLite database uses a write-ahead log, so a grant for chat.db alone can miss new messages until a checkpoint. Users with an older file-only grant can switch the service off and on to grant the folder. Madrid decodes the proprietary typedstream message format. Phone similarly requires the CallHistoryDB folder because recent calls can reside beside the store file in its write-ahead log.
How to install
Download and open the application, or install it through Homebrew:
brew install --cask mattt/tap/iMCP
The menu-bar icon opens the service menu. Activate desired services individually and accept the corresponding macOS permission dialogs. The top toggle indicates whether the MCP server is running.
For Claude Desktop, create its configuration through Settings, Developer, and Edit Config, then choose Configure Claude Desktop from iMCP. This adds or updates the bundled server entry while preserving other MCP configurations. Manual setup uses the copied server command in the client configuration. Quit and reopen the client and approve its connection.
Claude Code supports a user-scoped server entry or importing existing Claude Desktop servers. Cursor has an installation deep link, and Amp has a global server-add command. A first client connection prompts for approval; the trust option avoids repeated prompts for that client.
For diagnostics, MCP Inspector requires Node.js and displays protocol requests and responses. Companion requires macOS 15 or later and lets users browse prompts, resources, and tools after adding the copied server command with STDIO transport. These debugging paths use the same bundled server rather than a separate personal-data service.
Available under the MIT License.
iMessage is an Apple trademark. This project is not affiliated with, endorsed, or sponsored by Apple.
Source README
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).
Capabilities
Getting Started
Download and open the app
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.
Activate services
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.
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.
Connect to Claude Desktop
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}"
}
}
}
Call iMCP tools from Claude Desktop
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.
Connect to Claude Code
To add iMCP globally after installing the app:
claude mcp add --scope user iMCP -- /Applications/iMCP.app/Contents/MacOS/imcp-server
If you've already configured Claude Desktop, you can import its MCP servers:
claude mcp add-from-claude-desktop
Connect to Cursor
Open this deep link to automatically install the iMCP server:
Connect to Amp
To add iMCP globally (available in all projects):
amp mcp add iMCP -- /Applications/iMCP.app/Contents/MacOS/imcp-server
Technical Details
App & CLI
iMCP is a macOS app that bundles a command-line executable, imcp-server.
iMCP.appprovides 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-serverprovides 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.
iMessage Database Access
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 select your ~/Library/Messages folder through the standard file picker.
When you do, macOS adds that folder to the app's sandbox.
NSOpenPanel is magic like that.
The folder matters: chat.db is a WAL-mode database,
and Messages writes every new message to chat.db-wal next to it first,
only folding the log into chat.db at a checkpoint every few MB -
often hours later.
A grant on chat.db alone (what earlier versions asked for)
leaves that log unreadable, so the newest messages were missing until then.
If you granted chat.db with an earlier version, Messages keeps working from the last checkpoint;
switch Messages off and on in the iMCP menu to grant the folder instead.
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.
Call History Database Access
Call history synced from your iPhone lives in a SQLite database at
~/Library/Application Support/CallHistoryDB/CallHistory.storedata.
Recent calls sit in its write-ahead log next to the store file,
so the Phone service asks you to open the CallHistoryDB folder
rather than the file alone.
JSON-LD for Tool Results
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.
Debugging
Using the MCP Inspector
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.
Using Companion
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:
- Click
> "Copy server command to clipboard"
- Download and open the Companion app
- Click the + button in the toolbar to add an MCP server
- Fill out the form:
- Enter "iMCP" as the name
- Select "STDIO" as the transport
- Paste the copied iMCP server command
- Click "Add Server"
FAQ
Common questions
Discussion
Questions & comments · 0
Sign In Sign in to leave a comment.