Skip to content

1.1.0: native Contacts and EventKit alarms

Choose a tag to compare

@github-actions github-actions released this 10 Oct 20:39
· 10 commits to main since this release

Apple-MCPs 1.1.0 adds native Contacts access and Calendar alarms, and strengthens identity checks, native helper builds and file operations across the suite.

  • Contacts uses CNContactStore for list, get, search, create, update, delete and permission checks. Omitted phone/email collections are preserved; explicit empty collections are cleared. Nonempty notes require an entitlement and are rejected before native writes. The AppleScript backend remains available through APPLE_CONTACTS_MCP_BACKEND=applescript.
  • Calendar supports relative and absolute alarms through EventKit, including create, read, list, preserve, replace and clear. Relative alarms accept whole minutes from 0 through 525600; absolute alarms require a timezone. Responses retain location-alarm metadata.
  • Calendar batch lookups preserve request order and distinguish confirmed absence from unknown results. Fallback identities and native-ID aliases are checked before writes; ambiguous or conflicting identities cannot authorize mutation.
  • Notes reads body/plaintext in the application's context and reuses folder lookups. Notes and Contacts preserve control characters and complex Unicode in script output. Contacts deletion and matching avoid stale positional references and unnecessary scans.
  • Contacts, Calendar and Reminders compile immutable source snapshots into separate source-hash helpers. Concurrent builds cannot replace a completed helper. Cache installation can use atomic exclusive rename when hard links are unavailable.
  • Unknown safety modes fail closed. Files moves reject malformed paths, stay within their configured roots and refuse destination replacement. Writable System preference domains are restricted. Calendar/Reminders date conversion remains consistent with UTC; subjectless Mail lookup stays scoped to its requested mailbox.
  • Internal package dependencies require 1.1.0 or newer within the 1.x series. PyJWT requires 2.15.1 or newer within the 2.x series; Ruff and locked dependencies are refreshed.

Full alarm replacement and clearing require native EventKit access. Calendar automation supports initial display alerts and preservation of existing alerts. Updates combining explicit alarms with other field edits require EventKit, including explicit unchanged values or []. Unreadable alert collections and edits requiring alert removal are refused before other fields change. Failed insertions can have an unknown outcome; alerts are not deleted without proven ownership. Strict legacy identifier collision checks can time out on large stores. Grant full native Calendar access and list events again to obtain native identifiers.

Verification used owned disposable fixtures on a maintainer Mac. Native Contacts CRUD and EventKit relative/absolute alarm CRUD passed. Notes creation returned NOTE_CREATE_STATUS_UNKNOWN after a 60-second scripting timeout; an explicit Contacts AppleScript get also exceeded its 30-second deadline. Fixture cleanup was verified. Complete Notes CRUD, Contacts AppleScript parity, every Calendar provider, location-alarm configurations, reporters' macOS 26 setups and physical exFAT/SMB caches remain unverified. Issues #32, #41 and #42 remain open; #41 is partially addressed.

Thanks to Jaume Puig for the Contacts framework work, and LightSpeedSpirit for the original alarm and batch-lookup contributions. Attribution is retained in the source and history.

The release includes 12 wheels, 12 source distributions, 11 MCPB bundles, 11 exact Registry metadata files and SHA256SUMS. Full changelog · PyPI unified server · Publication workflow.

All 47 actual published files, 46 checksum entries, all 12 PyPI versions/file hashes and all 11 active/latest Registry records/bundle hashes are verified. A fresh published install passed dependency checks and 22 current/legacy protocol launches; actual published MCPBs passed 22 isolated launches. The release workflow remains failed after two upload transport errors, with Registry skipped. Publication was recovered through the documented manual process using the exact original build artifact. No tag moved or published file was replaced. Published verification, recovery receipts and all package/Registry links.