
Product
Socket Now Protects the Firefox Extension Ecosystem
Socket is bringing experimental protection to Firefox, scanning 97,000+ extensions in Mozilla's official directory for malware and risky updates.
@gambadio/apple-productivity-mcp
Advanced tools
On-demand local Apple Mail, Calendar, and Reminders MCP server for Claude Code and Codex.
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.
Check Node before installing:
node --version
No clone or global installation is required. npx downloads and caches the package, and the MCP client launches it as a local stdio child process only when a session connects.
claude mcp add --transport stdio --scope user apple-productivity-local -- \
npx -y @gambadio/apple-productivity-mcp@latest
Verify the registration:
claude mcp get apple-productivity-local
claude mcp list
codex mcp add apple-productivity-local -- \
npx -y @gambadio/apple-productivity-mcp@latest
Verify the registration:
codex mcp get apple-productivity-local
codex mcp list
For a reproducible installation, replace @latest with a version such as @2.1.1.
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 ci
Capture 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.
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 list
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 list
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. Claude Code or Codex launches the server 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:
cd /absolute/path/to/apple-productivity-mcp
git pull --ff-only
npm ci
npm test
claude mcp remove apple-productivity-local --scope user
codex mcp remove apple-productivity-local
Removing the registration does not clear npm's cache, delete a cloned repository, or change Apple data.
Install dependencies and run the isolated test suite:
npm ci
npm test
npm audit --omit=dev
Run the read-only live integration tests after granting Automation permission:
npm run test:integration
The default test run skips live integration tests because they access the user's installed Apple applications.
Apple automation unavailable or an authorization errorReview 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 foundRun 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 ... ENOENTThe configured Node or server path no longer exists. Remove and re-add the MCP registration using fresh values from command -v node and pwd.
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.
FAQs
On-demand local Apple Mail, Calendar, and Reminders MCP server for Claude Code and Codex.
The npm package @gambadio/apple-productivity-mcp receives a total of 22 weekly downloads. As such, @gambadio/apple-productivity-mcp popularity was classified as not popular.
We found that @gambadio/apple-productivity-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Product
Socket is bringing experimental protection to Firefox, scanning 97,000+ extensions in Mozilla's official directory for malware and risky updates.

Research
/Security News
Three compromised Rust crates pulled in a malicious dependency that downloaded and executed cross-platform malware during Cargo builds.

Research
/Security News
Socket uncovered 77 linked Firefox extensions, including 40 that steal wallet secrets or credentials and 37 deceptive sports-score shells.