Connects Claude to macOS Reminders through Apple's native EventKit framework instead of AppleScript, giving you 10-200x faster CRUD operations with stable UUIDs that survive across sessions. You get 13 tools covering list management, full-text search, today/overdue queries, and complete reminder lifecycle from creation through deletion. Ships three ways: as an MCPB bundle for Claude Desktop/Cowork, a plugin for Claude Code CLI, or an npm package for any MCP client. The Swift binary is signed and notarized by high5 ventures GmbH, handles UTF-8 properly (including CJK and emoji), and runs entirely locally with sub-second latency even on databases with hundreds of reminders. Reach for this when you need reliable, production-ready Reminders integration without timeout issues or brittle positional IDs.
Fast, native Apple Reminders access for Claude — works in Claude Desktop, Claude Cowork, and Claude Code (CLI). One signed Swift/EventKit binary, three distribution packages.
No AppleScript, no unstable positional IDs, no 30-second MCP timeouts. Sub-second latency on databases with hundreds of reminders. Full UTF-8 support for German umlauts, accents, CJK characters, and emoji.
Published by high5 ventures GmbH — signed with Developer ID Application: high5 ventures GmbH and notarized by Apple.
Apple Reminders for Claude gives Claude full CRUD access to your macOS Reminders app. It wraps Apple's native EventKit framework in a signed Swift binary that returns stable UUIDs and structured JSON, and ships three ways:
| Target | Artifact | Distribution |
|---|---|---|
| Claude Desktop / Cowork | .mcpb bundle | Anthropic Desktop Extensions Directory |
| Claude Code (CLI) | Plugin with skill | Claude Code Plugin Directory |
| Any MCP client | npm package | MCP Registry (io.github.high5-ventures/apple-reminders) |
All three paths share the same Swift binary and the same MCP protocol surface, so behavior is identical everywhere.
readOnlyHint / destructiveHint so Claude clients can auto-run queries but prompt for mutations.Install from the Anthropic Desktop Extensions Directory (in-app search) or download the latest signed .mcpb from Releases and double-click it. Claude Desktop shows an install dialog; click Install, then on the first tool call, grant Reminders access in the macOS privacy prompt.
/plugin install apple-reminders@claude-plugins-official
…or add the high5 ventures marketplace directly from GitHub:
/plugin marketplace add high5-ventures/apple-reminders-for-claude
/plugin install apple-reminders@high5-apple-reminders-for-claude
npm install -g @high5ventures/apple-reminders-mcp
Then point your client at @high5ventures/apple-reminders-mcp as a stdio MCP server. See your client's documentation for configuration specifics.
git clone https://github.com/high5-ventures/apple-reminders-for-claude.git
cd apple-reminders-for-claude
./build.sh
Produces dist/reminders-eventkit (binary), dist/skill/ (Claude Code skill), and dist/apple-reminders.mcpb (Claude Desktop bundle). Builds are unsigned; see CONTRIBUTING.md for the signed release workflow.
Requirements: macOS 11+, Xcode Command Line Tools, Node.js 18+.
No configuration is required for normal use. The extension runs with these defaults:
| Setting | Default | Notes |
|---|---|---|
| Reminders permission | prompted on first use | Revocable in System Settings → Privacy & Security → Reminders |
| Binary timeout (Node wrapper) | 30 s | Hardcoded ceiling; well under any MCP client timeout |
| Response payload cap | 16 MB | Plenty for databases with thousands of reminders |
If you use the npm-distributed server with a non-standard MCP client, set REMINDERS_BINARY to the absolute path of the reminders-eventkit binary:
export REMINDERS_BINARY=/absolute/path/to/reminders-eventkit
The .mcpb and Plugin Directory installations set this variable automatically.
The skill loads automatically in Claude Code when you mention reminders. In Claude Desktop / Cowork, the tools appear under Apple Reminders. You talk to Claude naturally — these examples show what Claude does behind the scenes.
You: Was habe ich heute zu tun?
Claude (invokes
get_today):{ "status": "ok", "data": { "reminders": [ { "id": "A1B2…", "name": "Zahnarzt-Termin bestätigen", "list": "Persönlich", "due_date": "2026-04-14T10:00:00" }, { "id": "C3D4…", "name": "Rechnung #2026-0412 prüfen", "list": "Arbeit", "due_date": "2026-04-14T14:00:00" } ] } }Claude: Du hast heute zwei offene Erinnerungen: den Zahnarzt-Termin um 10:00 (Persönlich) und die Rechnungs-Prüfung um 14:00 (Arbeit).
You: Remind me to buy oat milk tomorrow at 6pm.
Claude (invokes
create_reminder):{ "list": "Groceries", "title": "Buy oat milk", "dueDate": "2026-04-15T18:00:00" }Response:
{ "status": "ok", "data": { "reminder": { "id": "E5F6…", "name": "Buy oat milk", "due_date": "2026-04-15T18:00:00" } } }Claude: Done — added "Buy oat milk" to Groceries for tomorrow at 18:00.
You: Show me everything that's overdue, then mark the Slack-DM one as done.
Claude (invokes
get_overdue):{ "status": "ok", "data": { "reminders": [ { "id": "G7H8…", "name": "Reply to Alex in Slack DM", "list": "Arbeit", "due_date": "2026-04-12T17:00:00" }, { "id": "I9J0…", "name": "Review PR #482", "list": "Arbeit", "due_date": "2026-04-13T12:00:00" } ] } }Claude (invokes
complete_reminderwithid: "G7H8…"):{ "status": "ok", "data": { "reminder": { "id": "G7H8…", "completed": true, "completion_date": "2026-04-14T18:22:01" } } }Claude: Two overdue items: Slack reply (now marked done) and PR #482 review (still open).
All 13 tools return a stable JSON envelope — { "status": "ok", "data": ... } on success, { "status": "error", "code": "...", "message": "..." } on failure.
| Tool | Annotation | Purpose |
|---|---|---|
get_lists | read-only | List all reminder lists with open/completed counts |
get_list_info | read-only | Metadata for one list by name |
list_reminders | read-only | List reminders in a list (open/completed/all) |
search_reminders | read-only | Full-text search across all lists |
get_today | read-only | Reminders due today |
get_overdue | read-only | Overdue open reminders |
get_scheduled | read-only | All open reminders with a due date |
get_reminder | read-only | Fetch one reminder by ID |
create_reminder | additive | Create a new reminder |
update_reminder | destructive, idempotent | Update an existing reminder |
complete_reminder | destructive, idempotent | Mark as completed |
uncomplete_reminder | destructive, idempotent | Unmark completed |
delete_reminder | destructive, idempotent | Permanently delete |
"Destructive" here follows the MCP specification: it means the operation mutates existing state irreversibly from the user's point of view. Claude clients use these hints to decide when to prompt for confirmation.
This extension is 100% local at runtime — no data leaves your Mac via this extension. high5 ventures GmbH operates no server and collects no telemetry. The only network activity is the one-time download of the signed Swift binary from GitHub Releases during install (verified by Apple Developer ID signature, refuses to install on mismatch).
Read the full policy: PRIVACY.md.
"Reminders access denied" — open System Settings → Privacy & Security → Reminders and enable access for Claude Desktop (or your MCP client). Then retry.
Binary quarantined on first launch — our releases are signed and notarized, so this should not happen. If it does, verify the signature:
codesign --verify --verbose /Applications/Claude.app/Contents/Resources/mcpb/apple-reminders/bin/reminders-eventkit
spctl --assess --type execute /Applications/Claude.app/Contents/Resources/mcpb/apple-reminders/bin/reminders-eventkit
If either fails, you may have downloaded a tampered copy — re-download from the official Releases page.
"List not found" or "Multiple lists with that name" — reminder lists are matched by exact name. Use get_lists first to see available names. For duplicates, the error response includes a candidates array with stable calendar_identifiers; re-call with id:<calendar_identifier> as the list argument.
Flagged reminders return empty — EventKit does not expose the flagged attribute. The Claude Code skill ships an AppleScript fallback (skills/apple-reminders/scripts/get_flagged.applescript) for users who need this query. The .mcpb bundle does not include this fallback because Claude Desktop does not have shell access.
Still stuck? Open an issue → Support.
info@h5ventures.de — see SECURITY.mdinfo@h5ventures.deClaude Desktop / Cowork Claude Code CLI Any MCP client (Cursor, Zed, …)
│ │ │
│ (stdio MCP) │ (Bash via plugin) │ (stdio MCP)
▼ ▼ ▼
Node wrapper reminders-eventkit Node wrapper
(server/index.js) (Swift binary, direct) (npm @high5ventures/…)
│ │ │
▼ │ ▼
reminders-eventkit │ reminders-eventkit
(same Swift binary) │ (downloaded on install)
│ │ │
└────────────────────────────────┴───────────────────────────────────┘
│
▼
Apple EventKit framework
│
▼
macOS Reminders database
One Swift source → one binary → three distribution paths. See CONTRIBUTING.md for build internals.
Copyright © 2026 high5 ventures GmbH. Released under the MIT License — see LICENSE.
This project is not affiliated with or endorsed by Apple Inc. or Anthropic PBC.
"Apple" and "Reminders" are trademarks of Apple Inc. "Claude" is a trademark of Anthropic PBC.
gongrzhe/office-powerpoint-mcp-server
gongrzhe/office-word-mcp-server
io.github.mindstone/mcp-server-office
greirson/mcp-todoist
henilcalagiya/mcp-apple-notes
ankimcp/anki-mcp-server-addon