Cupertino 1.0.0
Version 1.0.0 ·
First signed release of Cupertino.app. The @mgcrea/mcp-apple-* packages are not on npm yet — the servers ship inside the bundle, and a host that would rather run them directly can build them from source.
Added
Mail, Notes and Reminders MCP servers — 41 tools total, reads always registered and writes invisible unless enabled.
packages/core— the shared osascript boundary, TCC-aware error taxonomy, read-only SQLite ladder and stdio server runner.Cupertino.app— a menu bar app holding one Full Disk Access grant on behalf of every server, withcupertino-bridgerelaying stdio to a per-user unix socket.scripts/audit-network.sh, gating the "no network connections" claim in CI and runnable by anyone against the.appthey downloaded.Phase-0 probes for Messages, Calendar and Safari.
LICENSE(MIT,packages/*) andapps/apple/LICENSE(source-available), plusapps/apple/EULAand the succession commitments indocs/succession.mdthat it incorporates by reference.Offline licence keys — Ed25519, verified locally against a public key compiled into the app, with no activation server and no phone-home. The relay refuses without a key or an open trial window;
allowWritesis untouched in every state, because writes are a safety control and never the paywall.A 30-minute trial, started by hand from the licence pane or the menu bar and never armed on its own. Every surface at full function, with the write toggles behaving exactly as they will after paying — it answers whether Cupertino works against your own mail, which is a different question from whether it is worth the money and is asked first. The deadline is held in memory and never written to disk, so quitting and reopening starts another one and nothing pretends otherwise. When the window closes the servers it started are stopped: an MCP host opens one stdio connection and holds it for the life of the editor, so refusing only new connections would have handed out a half hour that really expired whenever somebody next quit their editor.
apps/api— a Cloudflare Worker turning a Stripe payment into a key, storing which key went to whom in D1, and emailing it. Refunds and lost disputes revoke; a won dispute restores.make revocations— regenerates the revocation list baked into each build. Revocation lands at build time because the app is not allowed to ask anyone anything at run time.Client wiring beyond Claude — one-click config for Claude Desktop, Cursor, LM Studio and Windsurf, and a copyable command for Claude Code, Visual Studio Code and Codex. The split is not about popularity: the app merges only into strict JSON it can rewrite without destroying something, and hands over a line to paste for JSONC, TOML, and the one file running sessions write to concurrently. Claude Code also gained a status of its own, read-only — it is how a config left behind by a new surface becomes visible instead of silently incomplete.
make wiring-check— a standaloneswiftcgate overClientWiringMerge, asserting that a merge keeps every unrelated key, leaves a recoverable backup, migrates a legacyapple-*entry only when this app wrote it, and cannot leave a truncated config or a stray temp file.[unreleased]: https://github.com/mgcrea/cupertino/compare/app-v1.26.0...HEAD [1.26.0]: https://github.com/mgcrea/cupertino/compare/app-v1.25.0...app-v1.26.0 [1.25.0]: https://github.com/mgcrea/cupertino/compare/app-v1.24.1...app-v1.25.0 [1.24.1]: https://github.com/mgcrea/cupertino/compare/app-v1.24.0...app-v1.24.1 [1.24.0]: https://github.com/mgcrea/cupertino/compare/app-v1.23.0...app-v1.24.0 [1.23.0]: https://github.com/mgcrea/cupertino/compare/app-v1.22.1...app-v1.23.0 [1.22.1]: https://github.com/mgcrea/cupertino/compare/app-v1.22.0...app-v1.22.1 [1.22.0]: https://github.com/mgcrea/cupertino/compare/app-v1.21.1...app-v1.22.0 [1.21.1]: https://github.com/mgcrea/cupertino/compare/app-v1.21.0...app-v1.21.1 [1.21.0]: https://github.com/mgcrea/cupertino/compare/app-v1.20.1...app-v1.21.0 [1.20.1]: https://github.com/mgcrea/cupertino/compare/app-v1.20.0...app-v1.20.1 [1.20.0]: https://github.com/mgcrea/cupertino/compare/app-v1.19.1...app-v1.20.0 [1.19.1]: https://github.com/mgcrea/cupertino/compare/app-v1.19.0...app-v1.19.1 [1.19.0]: https://github.com/mgcrea/cupertino/compare/app-v1.18.0...app-v1.19.0 [1.18.0]: https://github.com/mgcrea/cupertino/compare/app-v1.17.0...app-v1.18.0 [1.17.0]: https://github.com/mgcrea/cupertino/compare/app-v1.16.0...app-v1.17.0 [1.16.0]: https://github.com/mgcrea/cupertino/compare/app-v1.15.0...app-v1.16.0 [1.15.0]: https://github.com/mgcrea/cupertino/compare/app-v1.14.0...app-v1.15.0 [1.14.0]: https://github.com/mgcrea/cupertino/compare/app-v1.13.0...app-v1.14.0 [1.13.0]: https://github.com/mgcrea/cupertino/compare/app-v1.12.0...app-v1.13.0 [1.12.0]: https://github.com/mgcrea/cupertino/compare/app-v1.11.0...app-v1.12.0 [1.11.0]: https://github.com/mgcrea/cupertino/compare/app-v1.10.0...app-v1.11.0 [1.10.0]: https://github.com/mgcrea/cupertino/compare/app-v1.9.0...app-v1.10.0 [1.9.0]: https://github.com/mgcrea/cupertino/compare/app-v1.8.0...app-v1.9.0 [1.8.0]: https://github.com/mgcrea/cupertino/compare/app-v1.7.0...app-v1.8.0 [1.7.0]: https://github.com/mgcrea/cupertino/compare/app-v1.6.0...app-v1.7.0 [1.6.0]: https://github.com/mgcrea/cupertino/compare/app-v1.5.0...app-v1.6.0 [1.5.0]: https://github.com/mgcrea/cupertino/compare/app-v1.4.0...app-v1.5.0 [1.4.0]: https://github.com/mgcrea/cupertino/compare/app-v1.3.1...app-v1.4.0 [1.3.1]: https://github.com/mgcrea/cupertino/compare/app-v1.3.0...app-v1.3.1 [1.3.0]: https://github.com/mgcrea/cupertino/compare/app-v1.2.2...app-v1.3.0 [1.2.2]: https://github.com/mgcrea/cupertino/compare/app-v1.2.1...app-v1.2.2 [1.2.1]: https://github.com/mgcrea/cupertino/compare/app-v1.2.0...app-v1.2.1 [1.2.0]: https://github.com/mgcrea/cupertino/compare/app-v1.1.0...app-v1.2.0 [1.1.0]: https://github.com/mgcrea/cupertino/compare/app-v1.0.0...app-v1.1.0 [1.0.0]: https://github.com/mgcrea/cupertino/releases/tag/app-v1.0.0