{"name":"io.github.mgcrea/mcp-apple-calendar","slug":"mgcrea-mcp-apple-calendar","title":"Apple Calendar","description":"Search, read and act on Apple Calendar — ranges, free-time lookup, writes off by default","url":"https://mcp.market/server/mgcrea-mcp-apple-calendar","rating":null,"grade":"A","score":92,"certified":false,"status":"active","category":"productivity","tags":["productivity","search"],"presence":{"score":37,"stars":3,"forks":0,"downloads_week":456,"last_push_at":"2026-09-19T09:15:42.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/mgcrea/cupertino","website":"https://cupertino.mgcrea.io","version":"1.23.0","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"@mgcrea/mcp-apple-calendar","version":"1.23.0","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Register the mutating tools. Off by default, and the gate decides whether the write tools exist at all rather than merely refusing — an agent with writes off cannot see them.","name":"APPLE_CALENDAR_ALLOW_WRITES"},{"description":"Restrict every read and write to these calendars, by name.","name":"APPLE_CALENDAR_CALENDARS"}]}],"tools":[{"name":"apple_calendar_create_event","description":"Create an event. THIS IS A REAL EVENT ON A REAL CALENDAR: on an iCloud, CalDAV or Exchange calendar it syncs within seconds and there is no draft state and no undo. Check apple_calendar_list_calendars first — writing to one where `isShared` is true is visible to everyone else on that calendar, so prefer a personal one unless the user meant to share it. Read-only calendars are refused. This tool ca","write_action":true,"price_micros":0,"input_schema":null},{"name":"apple_calendar_delete_events","description":"Delete whole events. Each result says whether the event ACTUALLY went — Calendar silently declines to delete a repeating event, reporting no error, so `deleted` is decided by re-reading the calendar rather than by the call succeeding. A ref naming ONE occurrence of a repeating event is refused: Calendar's scripting interface cannot remove a single occurrence, and deleting the series instead would ","write_action":true,"price_micros":0,"input_schema":null},{"name":"apple_calendar_diagnostics","description":"Report which lanes are live, which macOS permissions are granted, and what each missing one is blocking. Start here when a tool fails or reports nothing — it names the exact System Settings pane to open.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_find_availability","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_get_event","description":"Full detail for one event: notes, location, URL, conference link, and whether it has attendees or repeats. A ref naming one occurrence reports that occurrence's times and carries a `seriesRef` pointing at the whole series.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_list_accounts","description":"List the accounts Calendar syncs, with how many calendars each holds. Use this to scope a search when the same calendar name exists in more than one account.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_list_calendars","description":"List every calendar with the account it belongs to, whether it is SHARED with other people, and whether it looks writable. Two cautions. `isShared` means anything you write there is visible to the others on it. And `isSubscribed` catches URL-subscribed calendars but not every read-only one — Birthdays and Siri Suggestions are also read-only — so a write can still be refused by Calendar itself.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_list_events","description":"List events in a date range, earliest first. Occurrences of repeating events are expanded, so a weekly standup appears once per week rather than once. The result carries a `coverage` block naming the window the expansion is known to cover; if your range runs past it, `truncated` is set and says what is missing rather than returning a short list silently. `hasMore` is the other reason a list can be","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_search_events","description":"Search events by text, most recent first. Unbounded in time unless you give `from` or `to`. Matches each event ONCE at its series start — it does not expand occurrences, so use list_events with a range to see individual instances of a repeating event.","write_action":false,"price_micros":0,"input_schema":null},{"name":"apple_calendar_update_event","description":"Change an existing event. On a shared calendar the change is visible to everyone else on it. Note that Apple Events has no transaction: if a change is refused part-way through, earlier fields may already have been written, so the result is the truth about what the event now looks like. Only whole events can be edited: a ref naming ONE occurrence of a repeating event is refused, because Calendar's ","write_action":true,"price_micros":0,"input_schema":null}],"scan":{"score":92,"grade":"A","scanned_at":"2026-09-19T19:31:33.797Z","report":{"scannerVersion":"0.1.5","scannedAt":"2026-09-19T19:31:33.833Z","components":{"code":{"score":25,"max":25,"notes":["6 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 0 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@mgcrea/mcp-apple-calendar","version":"1.23.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-09-19T09:21:19.880Z","repositoryUrl":"git+https://github.com/mgcrea/cupertino.git","weeklyDownloads":456}],"repo":{"found":true,"owner":"mgcrea","repo":"cupertino","archived":false,"pushedAt":"2026-09-19T09:15:42Z","stars":3,"forks":0,"openIssues":2,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/108273?v=4","ownerCreatedAt":"2009-07-24T09:50:40Z","license":"MIT"},"icon":{"url":"https://cupertino.mgcrea.io/apple-touch-icon.png","source":"registry","width":180,"height":180},"presence":{"stars":3,"forks":0,"downloadsWeek":456,"license":"MIT","lastPushAt":"2026-09-19T09:15:42.000Z","score":37}}}},"grade_history":[],"reviews":[]}