hooks — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited hooks (Hook) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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](https://h5ventures.de) — 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-claudenpm install -g @high5ventures/apple-reminders-mcpThen 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.shProduces 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-eventkitThe .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 (invokesget_today): ``json { "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 (invokescreate_reminder): ``json { "list": "Groceries", "title": "Buy oat milk", "dueDate": "2026-04-15T18:00:00" }`**Response:**`json { "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 (invokesget_overdue): ``json { "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** (invokescomplete_reminderwithid: "G7H8…"):`json { "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-eventkitIf 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.
[email protected] — see SECURITY.md[email protected]Claude 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 databaseOne 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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.