{"id":"fcfcd2ab-d773-4c1a-b1d3-000336c51ec6","entityType":"agent","slug":"clawhub-chrischall-apple-swift-mcp","name":"Tmp.XHiujoxYyE","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-apple-swift-mcp","canonicalPath":"/agent/clawhub-chrischall-apple-swift-mcp","generatedAt":"2026-10-10T00:21:39.804Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":null},"description":"This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant. Skill: Tmp.XHiujoxYyE Owner: chrischall Summary: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my pl","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 2.3K downloads reported by the source. Last updated 10/9/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:apple-swift-mcp","sourceUrl":"https://clawhub.ai/chrischall/apple-swift-mcp","homepage":"https://clawhub.ai/chrischall/skills/apple-swift-mcp","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/apple-swift-mcp","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/apple-swift-mcp","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":67,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos,"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":null},"stars":null,"forks":null,"downloads":2311,"packageName":null,"latestVersion":"2.4.3","tractionLabel":"2.3K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":null},"lastUpdatedAt":"2026-10-09T16:27:46.784Z","lastCrawledAt":"2026-10-09T16:27:46.784Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-10T16:27:46.784Z","lastVerifiedAt":null,"highlights":[{"version":"2.4.3","createdAt":"2026-10-07T16:34:09.027Z","changelog":"- Removed the sample file skill-card.md. - No changes to core functionality or documentation except file cleanup.","fileCount":3,"zipByteSize":6445},{"version":"2.4.2","createdAt":"2026-10-02T15:02:19.592Z","changelog":"- Removed the file: skill-card.md - No changes to functionality or documentation in SKILL.md - No new features or bug fixes in this release","fileCount":3,"zipByteSize":6417},{"version":"2.4.1","createdAt":"2026-09-30T17:33:49.775Z","changelog":"- Removed the skill-card.md file. - No changes to functionality or documentation otherwise.","fileCount":3,"zipByteSize":6286},{"version":"2.4.0","createdAt":"2026-09-30T14:04:01.653Z","changelog":"- Removed the sample file skill-card.md. - No changes to functionality or documentation beyond the file removal.","fileCount":3,"zipByteSize":6456},{"version":"2.3.0","createdAt":"2026-09-29T22:37:46.200Z","changelog":"- Removed the file: skill-card.md - No functional or user-facing changes; internal documentation updated.","fileCount":3,"zipByteSize":6358},{"version":"2.2.0","createdAt":"2026-09-29T20:06:55.134Z","changelog":"- Removed the skill card documentation file (skill-card.md). - No other functional changes included in this version.","fileCount":3,"zipByteSize":6436},{"version":"2.1.0","createdAt":"2026-09-28T00:57:42.727Z","changelog":"**Apple Music playlist management added.** - Added support for managing Apple Music playlists in the local Music.app library: read, create, update, reorder, add/remove tracks, and delete playlists or folders. - Expanded description and trigger phrases to include music/playlist features. - Introduced `music_*` tools with corresponding details and usage instructions. - Updated calendar tools to support `freeTime` slot searching across calendars. - Adjusted install and permissions notes for Music Automation access. - Removed obsolete file `skill-card.md`.","fileCount":3,"zipByteSize":6319},{"version":"2.0.1","createdAt":"2026-09-25T15:56:52.630Z","changelog":"- Added user confirmation requirement for irreversible actions: sending mail/messages and deleting calendar events or contacts now require explicit confirmation before proceeding. - Described the new confirmation workflow, including `confirmation-required` status, preview, and `confirmToken`. - Documented environment variable `MCP_CONFIRM_MODE` to set confirmation fallback behavior. - Removed documentation for the old multiplexed tool invocation (no functional change, already deprecated). - Deleted the obsolete skill-card.md file.","fileCount":3,"zipByteSize":5041}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:apple-swift-mcp","setupComplexity":"low","setupSteps":["Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T00:21:39.800Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-apple-swift-mcp/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":null},"readme":"Skill: Tmp.XHiujoxYyE\n\nOwner: chrischall\n\nSummary: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n\nTags: latest:2.4.3\n\nVersion history:\n\nv2.4.3 | 2026-10-07T16:34:09.027Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to core functionality or documentation except file cleanup.\n\nv2.4.2 | 2026-10-02T15:02:19.592Z | auto\n\n- Removed the file: skill-card.md\n- No changes to functionality or documentation in SKILL.md\n- No new features or bug fixes in this release\n\nv2.4.1 | 2026-09-30T17:33:49.775Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or documentation otherwise.\n\nv2.4.0 | 2026-09-30T14:04:01.653Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to functionality or documentation beyond the file removal.\n\nv2.3.0 | 2026-09-29T22:37:46.200Z | auto\n\n- Removed the file: skill-card.md\n- No functional or user-facing changes; internal documentation updated.\n\nv2.2.0 | 2026-09-29T20:06:55.134Z | auto\n\n- Removed the skill card documentation file (skill-card.md).\n- No other functional changes included in this version.\n\nv2.1.0 | 2026-09-28T00:57:42.727Z | auto\n\n**Apple Music playlist management added.**\n\n- Added support for managing Apple Music playlists in the local Music.app library: read, create, update, reorder, add/remove tracks, and delete playlists or folders.\n- Expanded description and trigger phrases to include music/playlist features.\n- Introduced `music_*` tools with corresponding details and usage instructions.\n- Updated calendar tools to support `freeTime` slot searching across calendars.\n- Adjusted install and permissions notes for Music Automation access.\n- Removed obsolete file `skill-card.md`.\n\nv2.0.1 | 2026-09-25T15:56:52.630Z | auto\n\n- Added user confirmation requirement for irreversible actions: sending mail/messages and deleting calendar events or contacts now require explicit confirmation before proceeding.\n- Described the new confirmation workflow, including `confirmation-required` status, preview, and `confirmToken`.\n- Documented environment variable `MCP_CONFIRM_MODE` to set confirmation fallback behavior.\n- Removed documentation for the old multiplexed tool invocation (no functional change, already deprecated).\n- Deleted the obsolete skill-card.md file.\n\nv2.0.0 | 2026-09-24T15:13:17.979Z | auto\n\n**Major update: All app tools have been split into separate read and write functions, replacing the previous all-in-one tools.**\n\n- Refactored all major tool endpoints: \"calendar\", \"reminders\", \"contacts\", \"mail\", \"messages\", \"notes\", and \"photos\" now replaced by distinct `*_read` and write-specific tools (e.g., `calendar_read`, `calendar_create`, etc.)\n- Removed the multiplexed tool interfaces; calling these returns an error message with replacement tool names.\n- Enhanced tool permission granularity so clients can enable read-only access without allowing edits or sends.\n- Updated documentation to clarify the new tool structure and provide migration guidance from v1.x.\n- Removed obsolete file: `skill-card.md`.\n\nv1.8.3 | 2026-09-23T21:41:41.227Z | auto\n\n- Improved handling of recurring calendar events: each occurrence now gets its own id, with clear behavior for `get`, `update`, and `delete` actions.\n- Added support for updating all future occurrences of a recurring event using `span: \"futureEvents\"`.\n- Removed the file: skill-card.md.\n\nv1.8.2 | 2026-09-21T04:17:55.716Z | auto\n\n- Removed the skill-card.md file to streamline documentation.\n- No user-facing changes to functionality or interface in this version.\n\nv1.8.1 | 2026-09-08T02:52:10.136Z | auto\n\n- Calendar tool now restricts `list` and `search` to a defined date window, with defaults and maximums enforced (7/30 days, max 366).\n- Calendar responses include searched window details and paging info; empty results now only indicate nothing scheduled in the current window.\n- A window longer than the allowed maximum is refused rather than silently adjusted.\n- Removed outdated skill-card.md documentation.\n\nv1.8.0 | 2026-09-08T01:42:59.285Z | auto\n\nVersion 1.8.0 of apple-swift-mcp includes improved handling of Contacts with notes fields through automation, plus minor documentation updates.\n\n- Contacts with notes fields can now be updated or deleted via Contacts.app automation, supporting name, organization, job title, and note.\n- Edits to emails, phones, addresses, or birthdays on such contacts are now declined instead of partially writing changes.\n- Behavior is now clearly described in the documentation, and responses will indicate when Contacts.app automation is used.\n- Removed the redundant skill-card.md file.\n\nv1.7.0 | 2026-09-04T18:10:09.870Z | auto\n\n- Added support for creating, updating, and deleting contacts, with fine-grained editing for emails, phones, and addresses.\n- Updated Contacts tool documentation to clarify write restrictions (full Contacts access required; cards with Notes field require an additional entitlement).\n- Removed the sample skill-card.md file.\n\nv1.6.0 | 2026-08-15T04:05:19.971Z | auto\n\n- Added detailed usage notes for the `mail` tool, including support for multi-term searches, field scoping (from:, to:, subject:), quoted phrases, and logical operators (AND, OR).\n- Clarified that `mail search` accesses Mail’s Envelope Index directly for faster results and returns newest messages first.\n- Updated error handling description: timeouts are now explicit errors, distinguishing them from empty results.\n- Removed the file `skill-card.md` from the project.\n\nv1.5.0 | 2026-08-13T21:02:02.163Z | auto\n\n- Removed the file: skill-card.md\n- No user-facing functionality changed; documentation file was deleted.\n\nv1.4.5 | 2026-08-11T14:26:48.581Z | auto\n\n- Removed the skill-card.md file.  \n- No changes to functionality or documentation in SKILL.md.\n\nv1.4.4 | 2026-08-10T22:31:30.688Z | auto\n\n- Removed the skill card file (skill-card.md).\n- No changes to main functionality or documentation in SKILL.md.\n\nv1.4.3 | 2026-08-09T18:32:07.727Z | auto\n\n- Removed the file skill-card.md.\n- No changes to features or functionality.\n\nv1.4.2 | 2026-08-09T17:57:04.546Z | auto\n\n- Removed the file: skill-card.md\n- No user-facing functionality changes; documentation and skill features remain the same.\n\nv1.4.1 | 2026-07-31T13:08:42.031Z | auto\n\n- Expanded the Notes tool: can now search with bodies inline, retrieve a full note with paging, handle folders, and create, update, or delete notes.\n- Removed the skill-card.md file.\n- Documentation updated to reflect new notes functionality.\n\nv1.2.1 | 2026-07-09T18:33:20.073Z | auto\n\n- Removed the skill-card.md file.\n- No changes to functionality or user-facing features.\n\nv1.2.0 | 2026-07-03T14:04:19.341Z | auto\n\n- Added full Photos app support: list/search assets and albums, get/photo details, organize, export/import, edit metadata, and perform free-text searches.\n- Updated description and triggers to include Photos-related actions.\n- Removed skill-card.md (no longer needed).\n- General documentation improvements in SKILL.md for new features and structure.\n\nv1.1.8 | 2026-06-13T01:14:56.694Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to functionality or documentation in this update.\n\nv1.1.7 | 2026-05-29T21:41:28.790Z | auto\n\n- Clarified native Swift MCP integration for Calendar, Reminders, Contacts, and Maps using EventKit, Contacts, and MapKit.\n- Detailed fallback to in-process AppleScript (`NSAppleScript`) for Mail, Messages, and Notes operations for improved speed and reliability over spawning external processes.\n- Updated installation instructions, permission prompts, and hardware requirements (macOS 14+ on Apple Silicon).\n- Added tool-by-tool usage breakdown and notes on configuration options and binary compatibility.\n- Emphasized performance improvements compared to AppleScript-backed alternatives.\n\nArchive index:\n\nArchive v2.4.3: 3 files, 6445 bytes\n\nFiles: skill-card.md (2078b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.4.3:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.4.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.4.3\",\n  \"publishedAt\": 1791390849027\n}\n\nFile v2.4.3:skill-card.md\n\n## Description:\n\nHelps an agent read and manage local Apple app data, including calendars, reminders, contacts, mail, messages, notes, photos, and Music playlists on macOS.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nmacOS users and their agents use this skill to find information in Apple apps and perform requested updates, such as scheduling events, sending messages, organizing photos, and editing local playlists.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to sensitive local mail, messages, contacts, notes, photos, and calendars.\n\nMitigation: Grant access only if needed and allow read-only tools where possible.\n\nRisk: Sending messages or deleting and changing personal data can have irreversible effects.\n\nMitigation: Keep confirmation mode on ask-user and review each proposed action before approving it.\n\nRisk: The reviewed artifact does not include the installable binary.\n\nMitigation: Verify the linked GitHub release before installing the binary.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [GitHub project linked by skill documentation](https://github.com/chrischall/apple-swift-mcp)\n- [GitHub releases linked by skill documentation](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, API Calls]\n\n**Output Format:** [Natural-language responses and structured MCP tool results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can perform requested changes to local Apple app data when write tools are enabled.]\n\n## Skill Version(s):\n\n2.4.3 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.2: 3 files, 6417 bytes\n\nFiles: skill-card.md (1942b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.4.2:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.4.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.4.2\",\n  \"publishedAt\": 1790953339592\n}\n\nFile v2.4.2:skill-card.md\n\n## Description:\n\nHelps an agent read and manage local Apple app data on macOS through a native Swift MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nMac users and developers use this skill to find and manage calendar events, reminders, contacts, messages, mail, notes, photos, and local Music playlists through an agent. It requires macOS 14 or later and is distributed for Apple Silicon Macs.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to private Apple app data can expose sensitive personal information.\n\nMitigation: Review macOS permission prompts carefully and allow read-only tools where possible.\n\nRisk: Sends, deletions, and playlist rewrites can make consequential or irreversible changes.\n\nMitigation: Require user confirmation and review the proposed action before granting write access.\n\nRisk: Installing the MCP package grants an agent powerful local app access.\n\nMitigation: Verify the GitHub release before installing the package.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [MCP package releases](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Text and structured MCP tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only lookups and permission-gated actions; selected sends, deletes, and playlist changes require confirmation.]\n\n## Skill Version(s):\n\n2.4.2 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.1: 3 files, 6286 bytes\n\nFiles: skill-card.md (1595b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.4.1:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.4.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.4.1\",\n  \"publishedAt\": 1790789629775\n}\n\nFile v2.4.1:skill-card.md\n\n## Description:\n\nHelps agents read and manage Apple app data and Music playlists through a native macOS Swift MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nMac users and developers use this skill to find and manage calendars, reminders, contacts, messages, mail, notes, photos, and local Music playlists through an agent.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can read and modify sensitive local Apple app data.\n\nMitigation: Review access before installing and enable only the read tools unless writes are needed.\n\nRisk: Notes deletion is not covered by the skill's stated extra confirmation safeguard.\n\nMitigation: Require client-side approval for Notes writes and deletes unless explicitly needed.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, API Calls]\n\n**Output Format:** [Text and structured MCP tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires macOS 14 or later; the distributed binary targets Apple Silicon.]\n\n## Skill Version(s):\n\n2.4.1 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.4.0: 3 files, 6456 bytes\n\nFiles: skill-card.md (1980b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.4.0:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.4.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.4.0\",\n  \"publishedAt\": 1790777041653\n}\n\nFile v2.4.0:skill-card.md\n\n## Description:\n\nGuides agents using a native Swift MCP server to read and manage Apple app data on macOS, including calendars, reminders, contacts, mail, messages, notes, photos, maps, and Music playlists.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and macOS users can have an agent search personal Apple app data, manage schedules and reminders, send messages, and edit photos or local Music playlists through a Swift MCP server.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Broad app permissions can expose sensitive personal data.\n\nMitigation: Grant Full Disk Access, Contacts, Photos, Messages, Mail, and Automation permissions only for needed workflows; prefer read-only tools.\n\nRisk: Some write and delete actions may not require explicit confirmation.\n\nMitigation: Review proposed changes and keep confirmation mode at ask-user or refuse where possible.\n\nRisk: The external installer binary is not included in the reviewed skill artifact.\n\nMitigation: Verify the external .mcpb release source before installing it.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [Installation downloads linked by the skill](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Markdown guidance for MCP tool use]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires macOS 14+; the distributed binary targets Apple Silicon.]\n\n## Skill Version(s):\n\n2.4.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.3.0: 3 files, 6358 bytes\n\nFiles: skill-card.md (1902b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.3.0:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.3.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.3.0\",\n  \"publishedAt\": 1790721466200\n}\n\nFile v2.3.0:skill-card.md\n\n## Description:\n\nHelps an agent access and manage local Apple app data on macOS, including calendars, reminders, contacts, mail, messages, notes, photos, and Music playlists.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nMac users and their agents use this skill to find information in Apple apps and, with approval, create or modify events, reminders, contacts, messages, photos, and playlists.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to sensitive local mail, messages, contacts, notes, photos, and other Apple app data.\n\nMitigation: Grant only necessary macOS permissions and prefer read-only tool approval where possible.\n\nRisk: Sending, editing, or deleting data may have irreversible effects.\n\nMitigation: Review each action preview and approve sends, edits, deletions, and playlist changes only when intended.\n\nRisk: Installing an unverified compiled release may expose local app data.\n\nMitigation: Verify the GitHub release before installing its compiled binary.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [GitHub releases for installation](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Markdown]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can initiate tool actions that read or change local Apple app data.]\n\n## Skill Version(s):\n\n2.3.0 (source: server-resolved release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.2.0: 3 files, 6436 bytes\n\nFiles: skill-card.md (1990b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.2.0:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.2.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.2.0\",\n  \"publishedAt\": 1790712415134\n}\n\nFile v2.2.0:skill-card.md\n\n## Description:\n\nHelps agents read and manage Apple app data through a native Swift MCP integration on macOS.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nMac users and their agents use this skill to find and manage calendars, reminders, contacts, mail, messages, notes, photos, and local music playlists. It requires macOS 14 or later; the downloadable binary targets Apple Silicon.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to personal mail, messages, contacts, notes, photos, and calendars can expose sensitive data.\n\nMitigation: Install only from a release source you trust and grant macOS permissions selectively.\n\nRisk: Sending messages or mail, deleting records, and changing playlists may have lasting effects.\n\nMitigation: Keep the default ask-user confirmation setting for high-impact actions and review the proposed change before approving.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [Project repository (linked in skill instructions; import provenance unavailable)](https://github.com/chrischall/apple-swift-mcp)\n- [Installation releases (linked in skill instructions)](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, MCP tool calls]\n\n**Output Format:** [Markdown responses and structured tool results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Responses may contain personal app data; some actions require user confirmation.]\n\n## Skill Version(s):\n\n2.2.0 (source: server-resolved release)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.1.0: 3 files, 6319 bytes\n\nFiles: skill-card.md (1765b), SKILL.md (11197b), _meta.json (134b)\n\nFile v2.1.0:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one with\n  `calendarName`. `workdayStart`/`workdayEnd` (default `09:00`–`17:00`),\n  `weekdaysOnly` (default true), `minDurationMinutes` (default 30); window\n  default today plus 7 days, maximum 31. A day the window cuts short says\n  so. Busy means not marked free, not cancelled and\n  not declined by you; all-day events block only with `includeAllDay: true`.\n  Nothing before now is offered. Times are wall-clock times in the Mac's\n  zone, which is how `calendar_create` reads an offset-less time, so a slot\n  can be booked by passing its date and time straight back.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Music (playlists in the local Music.app library)\n- `music_read` — `playlists` (default; every playlist and folder with its\n  kind, track count and folder; filter with `query` or `folderId`, `\"root\"`\n  for the top level), `playlist` (one playlist's tracks in order, with\n  positions, ids and a `revision`), `search` (library tracks matching\n  `query` — find the ids to add). Ids are Music persistent IDs (16 hex\n  characters, shown as `[id …]`).\n- `music_create_playlist` (optionally in a folder and already holding\n  `trackIds`), `music_create_folder`, `music_add_tracks` (appends; skips\n  tracks already there unless `skipDuplicates: false`),\n  `music_update_playlist` (rename, description, move into a folder).\n- `music_remove_tracks` (`trackIds` removes every copy; `positions` removes\n  exactly those rows), `music_reorder_playlist` (`mode`: `move`, `sort`,\n  `reverse`, `dedupe`, `replace`), `music_delete_playlist` (a playlist, or an\n  empty folder). All three are confirmation-gated.\n- Local library only: a song that is only in the Apple Music catalog cannot\n  be added (add it to the library in Music first). Only plain playlists have\n  editable tracks — smart playlists and ones Music manages are read-only.\n- Reordering rebuilds the playlist in place (Music has no reorder command):\n  it keeps its id, name and folder, but each track's \"date added\" resets.\n- Pass the `revision` from `music_read` as `expectedRevision` to have an edit\n  refused if the playlist changed in between. Every write reports whether a\n  re-read confirmed it; with iCloud Music Library on, Music can revert edits\n  to synced playlists, so \"not verified yet\" means check again, not retry.\n- The first call asks to let the app running the server control Music\n  (Automation).\n\n### With apple-icloud-mcp\nWhen both servers are connected, prefer this one for Calendar, Contacts and\nMail on the Mac (it sees every account, not only iCloud) and for Reminders,\nNotes, Messages, Photos and Music.app playlist edits. Use apple-icloud-mcp for\nthe Apple Music catalog, Apple Maps and WeatherKit. Change one thing through\none server at a time: both can edit the same iCloud event, contact or synced\nplaylist. To put a catalog song in a local playlist, add it with\n`apple_music_add_to_library` first, wait for Music.app to sync it, then\n`music_read` search and `music_add_tracks`. If the search is empty, wait\nrather than adding the song again. The reorder tools name their arguments\ndifferently: `mode`/`sortBy` here, `operation`/`by` there.\n\n### Confirmation (sends, deletes and playlist rewrites)\n\n`mail_send`, `messages_send`, `calendar_delete`, `contacts_delete`,\n`music_remove_tracks`, `music_reorder_playlist` and `music_delete_playlist`.\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.1.0\",\n  \"publishedAt\": 1790557062727\n}\n\nFile v2.1.0:skill-card.md\n\n## Description:\n\nHelps an agent read and manage local Apple app data, including calendars, reminders, contacts, mail, messages, notes, photos, and Music playlists on macOS.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople using an agent on macOS can look up information in Apple apps and, with suitable permissions, manage events, reminders, contacts, messages, notes, photos, and local Music playlists.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to sensitive local Apple app data can expose private information.\n\nMitigation: Review macOS permission prompts and allow only the read-only tools needed for the task.\n\nRisk: Write-capable tools can send messages or modify and delete personal data.\n\nMitigation: Keep confirmation mode at ask-user and approve each sensitive action before execution.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [Installation releases](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, API calls]\n\n**Output Format:** [Text and structured MCP tool responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Access depends on macOS permissions; sensitive changes can require user confirmation.]\n\n## Skill Version(s):\n\n2.1.0 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.0.1: 3 files, 5041 bytes\n\nFiles: skill-card.md (2360b), SKILL.md (7557b), _meta.json (134b)\n\nFile v2.0.1:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, or Photos on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search.\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email. Confirmation-gated (see below).\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Confirmation-gated (see below).\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Confirmation (mail_send, messages_send, calendar_delete, contacts_delete)\n\nThese cannot be undone, so none acts on its first call. A client with MCP\nelicitation prompts the user. Otherwise the first call returns\n`status: \"confirmation-required\"` with a preview and a `confirmToken`: show\nthe preview to the user, and only after they approve call again with the same\narguments plus `confirmToken`. The token is single-use and bound to exactly\nthose arguments. `MCP_CONFIRM_MODE` (`ask-user` default / `auto` / `refuse`)\nsets the fallback.\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.0.1\",\n  \"publishedAt\": 1790351812630\n}\n\nFile v2.0.1:skill-card.md\n\n## Description:\n\nHelps agents access and manage Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, and Photos on macOS through a native Swift MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and macOS users can use this skill to help an agent find personal app data, manage calendars and reminders, and perform approved actions such as sending messages or updating contacts and photos. The packaged server requires macOS 14 or later on Apple Silicon.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to Mail, Messages, Notes, Contacts, and Photos may expose sensitive personal data.\n\nMitigation: Grant only necessary permissions and favor read-only tool access; treat Full Disk Access and photo export or import with particular care.\n\nRisk: Installation relies on a downloadable binary whose version is not pinned in the skill instructions.\n\nMitigation: Review the GitHub release and requested permissions before installing.\n\nRisk: Confirmation does not cover every write or export action, and automatic confirmation can send or delete without a user prompt.\n\nMitigation: Review write and export requests before execution, and avoid MCP_CONFIRM_MODE=auto unless automatic sends and deletes are explicitly acceptable.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [GitHub project linked in skill documentation](https://github.com/chrischall/apple-swift-mcp)\n- [GitHub releases linked in skill documentation](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, Structured tool results]\n\n**Output Format:** [Markdown guidance and structured MCP responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Results may include sensitive personal data; write tools may send messages or change app data.]\n\n## Skill Version(s):\n\n2.0.1 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v2.0.0: 3 files, 4686 bytes\n\nFiles: skill-card.md (2148b), SKILL.md (6948b), _meta.json (134b)\n\nFile v2.0.0:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, or Photos on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search.\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_create`, `calendar_update` (passing `calendarName` moves the\n  event), `calendar_delete` — `update`/`delete` take `span: \"futureEvents\"`\n  to change that occurrence and every later one.\n- `reminders_read` — `lists`, `list`, `search`, `get` (paged, soonest due first)\n- `reminders_create`, `reminders_update`, `reminders_complete`,\n  `reminders_reopen`, `reminders_delete`\n\n### Contacts / Maps\n- `contacts_read` — `search` (default) and `get`.\n- `contacts_create`, `contacts_update`, `contacts_delete`. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An update or\n  delete on such a card is replayed automatically through Contacts.app, which\n  does hold the entitlement; it needs Automation access to Contacts.app, and\n  the reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`contacts_create` with a note is still refused outright) — those\n  cannot be expressed faithfully in AppleScript, so a declined edit writes\n  nothing rather than part of itself. `contacts_delete` takes `contactId` only,\n  never a name.\n- `maps` — place search (default) and `directions`. Read-only.\n\n### Mail / Messages / Notes\n- `mail_read` — `accounts`, `mailboxes`, `unread`, `search`, `get`. Search\n  reads Mail's Envelope Index directly (needs Full Disk Access), so it is\n  fast on large accounts and returns results **newest first**.\n- `mail_send` — send an email.\n- `messages_read` — `chats` and `read` (history from `chat.db`, group chats).\n- `messages_send` — send an iMessage / SMS, optionally with an attachment.\n  Attachments inside hidden directories or dotfiles, `~/Library` and system\n  locations are refused.\n- `notes_read` — `list`, `search` (optionally with bodies inline), `get` (a\n  full note, pageable), `folders`.\n- `notes_create`, `notes_update`, `notes_delete`\n\n### Photos (PhotoKit + AppleScript)\n- `photos_read` — `albums`, `list`, `search`, `searchText` (free text),\n  `asset` (detail), `imageData` (a JPEG rendition)\n- `photos_export` (originals to a directory), `photos_import`,\n  `photos_create_album`, `photos_add_to_album`, `photos_remove_from_album`,\n  `photos_update` (`setFavorite` / `setTitle` / `setDescription` /\n  `setKeywords`)\n\n### Upgrading from the multiplexed tools (2.0)\n\nThe old `calendar`, `reminders`, `contacts`, `mail`, `messages`, `notes` and\n`photos` tools are gone. Calling one returns an error naming its\nreplacements. The same `operation` values carry over to the `*_read` tools;\neach write operation became its own tool (`messages` `send` →\n`messages_send`, `contacts` `delete` → `contacts_delete`, `reminders`\n`complete` → `reminders_complete`, `photos` `setTitle` → `photos_update`\nwith `operation: \"setTitle\"`, and so on).\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- `messages_read` reads `chat.db` directly for history; `messages_send` uses AppleScript.\n- `mail_read` `search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail_read` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v2.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.0.0\",\n  \"publishedAt\": 1790262797979\n}\n\nFile v2.0.0:skill-card.md\n\n## Description:\n\nThis skill should be used when the user asks about Apple app data via the native Swift MCP - Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, or Photos on macOS.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and end users on macOS use this skill to let an agent read, search, create, update, send, export, or delete data in native Apple apps through a Swift MCP server with separated read and write tools.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server can access private local Apple app data after macOS permissions are granted.\n\nMitigation: Install only when this access is intended, review macOS TCC prompts carefully, and grant Full Disk Access or Automation access only when the task requires it.\n\nRisk: Write, send, delete, export, and import tools can modify local Apple app data or communicate externally.\n\nMitigation: Start with read-only tools where possible and approve write-capable tools only for specific tasks that need them.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [GitHub project](https://github.com/chrischall/apple-swift-mcp)\n- [GitHub releases](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown or plain text guidance with tool usage, configuration, command, and code snippets as needed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [May include read-only or write-capable MCP tool recommendations depending on the user's Apple app task and granted macOS permissions.]\n\n## Skill Version(s):\n\n2.0.0 (source: release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.8.3: 3 files, 4246 bytes\n\nFiles: skill-card.md (2475b), SKILL.md (5344b), _meta.json (134b)\n\nFile v1.8.3:SKILL.md\n\n---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, or Photos on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search.\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\n### Calendar / Reminders\n- `calendar` — list, search, create, update, delete events. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get`/`update`/`delete` act on exactly that occurrence, and a bare series\n  id is refused for a recurring event rather than applied to its first\n  occurrence. Pass `span: \"futureEvents\"` to change that occurrence and\n  every later one.\n- `reminders` — list reminder lists and items; create, complete, delete\n\n### Contacts / Maps\n- `contacts` — search, get, create, update, delete. Emails, phones and\n  addresses are edited one entry at a time (`add` / `remove` / `replace`),\n  so an edit never rewrites the whole list. Writes need *full* Contacts\n  access. A card with anything in its Notes field cannot be written through\n  the Contacts framework at all — not just its note, **every** field —\n  without the `com.apple.developer.contacts.notes` entitlement. An `update` or `delete` on\n  such a card is now replayed automatically through Contacts.app, which does\n  hold the entitlement; it needs Automation access to Contacts.app, and the\n  reply says so when it happens. The replay covers name, organization, job\n  title and note, and **declines** an edit touching emails/phones/addresses or\n  a birthday (`create` with a note is still refused outright) — those cannot be expressed faithfully in AppleScript, so a\n  declined edit writes nothing rather than part of itself\n- `maps` — directions, search nearby places\n\n### Mail / Messages / Notes\n- `mail` — search, read, send; discover accounts/mailboxes. Search reads\n  Mail's Envelope Index directly (needs Full Disk Access), so it is fast\n  on large accounts and returns results **newest first**.\n- `messages` — send iMessage / SMS, query `chat.db` for history, group chats\n- `notes` — list, search (optionally with bodies inline), get a full note (pageable), folders, create, update, delete\n\n### Photos (PhotoKit + AppleScript)\n- `photos` — list/search assets and albums, get asset detail, favorite/organize/import/export, get a JPEG rendition, set title/description/keywords, free-text search\n\n## Environment\n\nOptional user config (set in Claude Desktop → Settings → MCP):\n\n- `APPLE_MCP_DEFAULT_CALENDAR` — default calendar name for event creation\n- `APPLE_MCP_DEFAULT_REMINDER_LIST` — default list name for reminder creation\n\n## Notes\n\n- Binary is arm64-only because some transitive MCP SDK deps (swift-collections, swift-service-lifecycle) don't declare x86_64.\n- EventKit / Contacts / MapKit-backed tools are orders of magnitude faster than the equivalent AppleScript path.\n- Messages tool reads `chat.db` directly for history; sending uses AppleScript.\n- `mail search` takes multiple terms in one call — prefer that over one call\n  per term:\n  - `invoice overdue` — both (implicit AND)\n  - `invoice OR receipt` — either (`OR` must be uppercase)\n  - `\"past due\"` — quoted phrase\n  - `from:` / `to:` / `subject:` — field scoping, combinable with AND\n- A `mail` timeout comes back as an explicit error, never as an empty result\n  list. If you see \"the search completed and matched no messages\", the search\n  really did finish and find nothing. If you see \"Timed out\", nothing was\n  retrieved and the query needs narrowing — do not report it as \"no mail\n  found\".\n\nFile v1.8.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"1.8.3\",\n  \"publishedAt\": 1790199701227\n}\n\nFile v1.8.3:skill-card.md\n\n## Description:\n\nProvides agent access to Apple app data on macOS through the native Swift MCP for Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, and Photos.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nMac users and agents use this skill to read, search, create, update, and delete supported Apple app data through a native Swift MCP server. It is intended for workflows involving personal productivity data such as calendars, reminders, contacts, mail, messages, notes, photos, maps, and related macOS app automation.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill can access and modify private Apple app data, including mail, messages, contacts, calendars, notes, and photos.\n\nMitigation: Install only from a trusted source, grant the minimum macOS permissions needed for the task, and review read and write requests before approving them.\n\nRisk: Some actions can send messages, send mail, delete records, or update contacts and recurring calendar events.\n\nMitigation: Use explicit prompts for write operations and confirm recipients, targets, recurrence spans, and deletion scope before executing changes.\n\nRisk: Full Disk Access may expose sensitive local stores such as Mail indexes or Messages history.\n\nMitigation: Avoid granting Full Disk Access unless history or indexed message search is actually required.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [Project repository](https://github.com/chrischall/apple-swift-mcp)\n- [GitHub releases](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown and natural-language tool guidance with inline commands and configuration values]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The skill may guide MCP tool calls that read or modify local Apple app data after macOS permission prompts are granted.]\n\n## Skill Version(s):\n\n1.8.3 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.","readmeExcerpt":"Skill: Tmp.XHiujoxYyE Owner: chrischall Summary: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my pl","codeSnippets":[],"executableExamples":[],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: apple-swift-mcp\ndescription: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant.\n---\n\n# apple-swift-mcp\n\nNative Swift MCP server for Apple apps. Compiled binary with embedded TCC usage descriptions — Calendar, Reminders, Contacts, and Maps talk to EventKit / Contacts / MapKit directly. Mail, Messages, Notes still go through AppleScript (no public framework exists) but run in-process via `NSAppleScript` instead of spawning `osascript`. Photos combines PhotoKit (structured search, albums, favorites, export/import) with the same in-process AppleScript for title/description/keyword metadata and free-text search. Music playlists go through Music.app's scripting dictionary in an `osascript` subprocess (MusicKit cannot edit playlists on macOS).\n\n- **GitHub:** [github.com/chrischall/apple-swift-mcp](https://github.com/chrischall/apple-swift-mcp)\n\n## Install\n\nDownload the latest `.mcpb` from [GitHub Releases](https://github.com/chrischall/apple-swift-mcp/releases) and double-click to install in Claude Desktop. First run prompts for TCC permissions (Calendar, Reminders, Contacts, full disk if reading `chat.db`, Automation for Music on the first music call).\n\nRequires **macOS 14+ on Apple Silicon**. Intel users can build from source (`swift build -c release`).\n\n## Tools\n\nReads and writes are separate tools, so a client can allow the read-only\n`*_read` tools without also allowing sends, edits or deletes. Each `*_read`\ntool takes an `operation`; every write tool does exactly one thing and takes\nno `operation`.\n\n### Calendar / Reminders\n- `calendar_read` — `calendars`, `list`, `search`, `get`. `list`/`search`\n  only ever look inside one window: `fromDate` + `toDate`, or `fromDate` +\n  `daysAhead` (pass one, not both; default 7 days for `list`, 30 for\n  `search`, maximum 366). Every response names the window it searched and,\n  when more matched than `limit` held, the total and the `offset` for the\n  next page — so an empty answer means nothing was scheduled in that window,\n  never that the calendar is clear beyond it. A window longer than the\n  maximum is refused rather than quietly shortened. Each occurrence of a\n  recurring event gets its own id (`<series id>#occ=<original start>`);\n  `get` and the write tools act on exactly that occurrence, and a bare\n  series id is refused for a recurring event rather than applied to its\n  first occurrence.\n- `calendar_read` `freeTime` — open slots within working hours across every\n  calendar on the Mac (work Exchange/Google accounts included), or one w"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"apple-swift-mcp\",\n  \"version\": \"2.4.3\",\n  \"publishedAt\": 1791390849027\n}"},{"path":"skill-card.md","content":"## Description:\n\nHelps an agent read and manage local Apple app data, including calendars, reminders, contacts, mail, messages, notes, photos, and Music playlists on macOS.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nmacOS users and their agents use this skill to find information in Apple apps and perform requested updates, such as scheduling events, sending messages, organizing photos, and editing local playlists.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Access to sensitive local mail, messages, contacts, notes, photos, and calendars.\n\nMitigation: Grant access only if needed and allow read-only tools where possible.\n\nRisk: Sending messages or deleting and changing personal data can have irreversible effects.\n\nMitigation: Keep confirmation mode on ask-user and review each proposed action before approving it.\n\nRisk: The reviewed artifact does not include the installable binary.\n\nMitigation: Verify the linked GitHub release before installing the binary.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/apple-swift-mcp)\n- [GitHub project linked by skill documentation](https://github.com/chrischall/apple-swift-mcp)\n- [GitHub releases linked by skill documentation](https://github.com/chrischall/apple-swift-mcp/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, API Calls]\n\n**Output Format:** [Natural-language responses and structured MCP tool results]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Can perform requested changes to local Apple app data when write tools are enabled.]\n\n## Skill Version(s):\n\n2.4.3 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my playlist\", \"sort my playlist\", or any macOS-native app automation. Requires macOS 14+ on Apple Silicon; faster than the AppleScript-backed Node variant. Skill: Tmp.XHiujoxYyE Owner: chrischall Summary: This skill should be used when the user asks about Apple app data via the native Swift MCP — Calendar, Reminders, Contacts, Maps, Mail, Messages, Notes, Photos, or Apple Music playlists on macOS. Triggers on phrases like \"check my calendar\", \"find contact\", \"send iMessage\", \"search my notes\", \"recent emails\", \"find photos of\", \"make a playlist\", \"add this song to my pl","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1386,"uniquenessScore":47,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-09T16:27:46.784Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:21:39.804Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}