On-demand local Apple Mail, Calendar, and Reminders MCP server for macOS.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An on-demand, local Model Context Protocol (MCP) server that gives Claude Code and Codex controlled access to Apple Mail, Calendar, and Reminders on macOS.
It uses Apple's built-in automation interface through /usr/bin/osascript. The MCP transport is stdio: your MCP client starts the process when it connects and stops it when the session releases it. There is no listening port, background service, or cloud-hosted MCP server.
| App | Read and discover | Actions |
|---|---|---|
| List accounts and mailboxes, list message metadata, read a message | Send, mark read/unread, flag/unflag, move, delete | |
| Calendar | List calendars, list events in a time range | Create, update, delete |
| Reminders | List reminder lists, list reminders | Create, update, complete, delete |
The server publishes MCP tool annotations for read-only, idempotent, destructive, and open-world behavior. These annotations help compatible clients apply appropriate approval policies; they are not a substitute for reviewing a write action before approving it.
This is the recommended installation method. No repository clone or global package installation is required. npx downloads and caches the published package, and the MCP client launches it as a local stdio child process when a session connects.
Confirm that Node.js and npx are available:
The examples use @latest so new sessions resolve the newest published release. Replace it with an explicit version such as @2.1.1 when you want a reproducible, pinned installation.
Add the server to your user configuration so it is available in every project:
Verify the registration:
Start a new Claude Code session after adding the server. If the name is already registered, remove it with claude mcp remove apple-productivity-local --scope user and run the add command again.
Add the server to Codex's user configuration:
Verify the registration:
The Codex app, CLI, and IDE extension share this MCP configuration on the same Mac. Start a new session after installation; restart an already-open app or IDE extension so it reloads the configuration. In the Codex CLI, /mcp shows the active servers.
If the name is already registered, run codex mcp remove apple-productivity-local and add it again.
Use these values in any client that can launch a local stdio MCP server:
| Setting | Value |
|---|---|
| Name | apple-productivity-local |
| Transport | stdio |
| Command | npx |
| Arguments | -y, @gambadio/apple-productivity-mcp@latest |
| Environment variables | None |
| Working directory | None required |
Clients that accept the common JSON configuration shape can use:
The outer configuration key and file location vary by client. In a graphical setup screen, select STDIO and enter the command and arguments from the table. This pattern applies to local MCP clients such as Claude Desktop, Cursor, Windsurf, Cline, and compatible editors; consult the client's documentation for where it stores MCP configuration.
If a desktop client cannot find npx, run this in Terminal:
Then replace "command": "npx" with the returned absolute path, for example "command": "/usr/local/bin/npx".
Restart the client or open a new session after changing its MCP configuration. Clients that support only remote HTTP servers cannot run this MCP directly because Apple Productivity MCP intentionally uses local stdio and macOS automation.
You do not need to run npm start, install the package globally, keep a terminal open, configure an API key, or expose a network port.
Use a source checkout when developing the server or when you want to run a specific Git commit.
Clone the repository and install its locked dependencies:
Capture the absolute paths that the MCP clients should store:
Paths containing spaces are supported. Keep the quotes in the commands below.
Install the server for your user account:
Verify the registration:
Install the same local stdio server in Codex:
Verify the registration:
Codex stores this in its user configuration, shared by the Codex app, CLI, and IDE extension on the same host. Start a new session after installation. If a desktop app or IDE extension was already open, restart it so it reloads the MCP configuration.
You do not need to run npm start or keep a terminal open. The MCP client launches the source checkout as a child process when it establishes the MCP connection.
The first real tool call for each Apple app may trigger a macOS Automation prompt. Approve access for the application that launched the MCP server, such as Terminal, iTerm, Claude Code, Codex, or your IDE.
If you denied a prompt or no prompt appears:
Start with the discovery tools so the client learns the exact local names configured on your Mac:
Mail defaults to the account name iCloud and mailbox INBOX when a caller does not provide names. Use apple_mail_list_accounts first if your setup uses different names.
apple_mail_list_accounts β list account names, sender addresses, and mailboxesapple_mail_list β list message metadata without reading bodiesapple_mail_get β read one message, including its bodyapple_mail_send β send a message immediatelyapple_mail_update_status β mark read/unread or flag/unflagapple_mail_move β move a message to another mailbox in the same accountapple_mail_delete β delete a message using Mail.app behaviorapple_calendar_list_calendars β list calendar names and writable statusapple_calendar_list_events β list overlapping events in an ISO 8601 time rangeapple_calendar_create_event β create an eventapple_calendar_update_event β update an event by UIDapple_calendar_delete_event β delete an event by UIDapple_reminders_list_lists β list reminder-list names and IDsapple_reminders_list β list reminders, optionally including completed itemsapple_reminders_create β create a reminderapple_reminders_update β update a reminder by IDapple_reminders_complete β mark a reminder completeapple_reminders_delete β delete a reminder by IDosascript as JSON arguments rather than interpolated into executable JXA source.Registrations using the npm command with @latest resolve the latest published version when a new MCP process starts. Start a new Claude Code or Codex session after a release. Pin an explicit version if automatic upgrades are not desirable.
For a source checkout, update in place so the stored absolute path remains valid:
Removing the registration does not clear npm's cache, delete a cloned repository, or change Apple data.
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/apple-productivity-mcp)<a href="https://allmcps.com/mcp/apple-productivity-mcp"><img src="https://allmcps.com/api/badge/apple-productivity-mcp?style=directory" alt="Apple Productivity MCP on AllMCPs" /></a>