apple-productivity-mcp
Provides tools for interacting with Apple Mail, Calendar, and Reminders on macOS, enabling listing, reading, sending, and managing emails, calendar events, and reminders.
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., "@apple-productivity-mcplist my events for tomorrow"
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.
Apple Productivity MCP
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.
Features
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.
Related MCP server: Apple EventKit MCP Server
Requirements
macOS with Mail, Calendar, and Reminders
Node.js 20 or newer
Claude Code, Codex CLI/app/IDE extension, or another stdio-capable MCP client
Permission for the client that launches the server to automate the relevant Apple apps
Install from npm
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:
node --version
npx --versionThe 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.
Claude Code
Add the server to your user configuration so it is available in every project:
claude mcp add --transport stdio --scope user apple-productivity-local -- \
npx -y @gambadio/apple-productivity-mcp@latestVerify the registration:
claude mcp get apple-productivity-local
claude mcp listStart 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.
Codex app, CLI, and IDE extension
Add the server to Codex's user configuration:
codex mcp add apple-productivity-local -- \
npx -y @gambadio/apple-productivity-mcp@latestVerify the registration:
codex mcp get apple-productivity-local
codex mcp listThe 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.
Other local MCP clients
Use these values in any client that can launch a local stdio MCP server:
Setting | Value |
Name |
|
Transport |
|
Command |
|
Arguments |
|
Environment variables | None |
Working directory | None required |
Clients that accept the common JSON configuration shape can use:
{
"mcpServers": {
"apple-productivity-local": {
"command": "npx",
"args": [
"-y",
"@gambadio/apple-productivity-mcp@latest"
]
}
}
}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:
command -v npxThen 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.
Install from source
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:
git clone https://github.com/gambadio/apple-productivity-mcp.git
cd apple-productivity-mcp
npm ciCapture the absolute paths that the MCP clients should store:
APPLE_MCP_NODE="$(command -v node)"
APPLE_MCP_SERVER="$(pwd)/src/index.js"Paths containing spaces are supported. Keep the quotes in the commands below.
Claude Code with a source checkout
Install the server for your user account:
claude mcp add --transport stdio --scope user apple-productivity-local -- \
"$APPLE_MCP_NODE" "$APPLE_MCP_SERVER"Verify the registration:
claude mcp get apple-productivity-local
claude mcp listCodex with a source checkout
Install the same local stdio server in Codex:
codex mcp add apple-productivity-local -- \
"$APPLE_MCP_NODE" "$APPLE_MCP_SERVER"Verify the registration:
codex mcp get apple-productivity-local
codex mcp listCodex 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.
Grant macOS permission
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:
Open System Settings → Privacy & Security → Automation.
Find the application that launches your MCP client.
Enable Mail, Calendar, and Reminders as needed.
Restart the MCP client and try again.
Try it
Start with the discovery tools so the client learns the exact local names configured on your Mac:
“List my Apple Mail accounts and mailboxes.”
“List my writable Apple calendars.”
“List my Apple Reminders lists.”
“Show events from all calendars tomorrow.”
“Show my incomplete reminders.”
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.
Tool reference
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 behavior
Calendar
apple_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 UID
Reminders
apple_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 ID
Privacy and safety
The MCP server itself has no network listener and stores no credentials or Apple data.
Inputs are passed to
osascriptas JSON arguments rather than interpolated into executable JXA source.Mail, Calendar, and Reminders changes can sync through iCloud, CalDAV, Exchange, or another configured provider.
“Local MCP” describes where the server runs. Content returned to Claude Code or Codex becomes part of that active model session and may be processed according to that product's data controls.
Sending, moving, updating, completing, and deleting are real actions. Review write-tool requests before approving them.
Update
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:
cd /absolute/path/to/apple-productivity-mcp
git pull --ff-only
npm ci
npm testRemove
claude mcp remove apple-productivity-local --scope user
codex mcp remove apple-productivity-localRemoving the registration does not clear npm's cache, delete a cloned repository, or change Apple data.
Development and verification
Install dependencies and run the isolated test suite:
npm ci
npm test
npm audit --omit=devRun the read-only live integration tests after granting Automation permission:
npm run test:integrationThe default test run skips live integration tests because they access the user's installed Apple applications.
Troubleshooting
Apple automation unavailable or an authorization error
Review System Settings → Privacy & Security → Automation, enable the affected Apple app for the process that launches your MCP client, then restart the client.
Mail account not found, Calendar not found, or Reminder list not found
Run the corresponding discovery tool and use the exact returned name. Names are local to your macOS setup and may differ by language or provider.
spawn ... ENOENT
For an npm installation, run command -v npx and use the returned absolute path as the configured command. For a source checkout, remove and re-add the MCP registration using fresh values from command -v node and pwd.
npm package cannot be downloaded
Confirm that the public package is reachable and that the client has internet access for the first installation:
npm view @gambadio/apple-productivity-mcp versionAfter the package has been downloaded, npm can reuse its local cache for that version.
Server is registered but tools do not appear
Run the client's mcp get/mcp list commands, then start a new session. Restart an already-open desktop app or IDE extension after changing MCP configuration.
License
Maintenance
Related MCP Servers
- Alicense-qualityCmaintenanceProvides Claude with full access to Apple Calendar on macOS for event management, smart scheduling, and schedule analytics. It enables natural language event creation, conflict detection, and template-based scheduling through AppleScript integration.321MIT
- Flicense-qualityFmaintenanceProvides Claude Desktop with access to Apple Calendar and Reminders on macOS for managing schedules and tasks through natural language. It supports comprehensive operations like creating, editing, and searching events and reminders, along with a custom hashtag-based tagging system.3
- AlicenseAqualityDmaintenanceEnables Claude to read and manage macOS Reminders (create, list, update, complete, delete reminders) via AppleScript, running entirely locally.6MIT
- AlicenseBqualityAmaintenanceEnables Claude to interact with Apple apps on macOS including Mail, Calendar, Contacts, Reminders, Notes, and iCloud Drive for personal productivity tasks like triaging email, managing calendar, and cross-app context.765MIT
Related MCP Connectors
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- 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/gambadio/apple-productivity-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server