Setting up Apple Mail and Apple Calendar, connecting Claude, and staying in control.
Accounts live in Amazon Cognito; the app itself never sees your password.
Signing in is always e-mail + password + authenticator code. Forgot the password? Use Forgot your password? on the sign-in page. New phone? Security → Set up / replace authenticator shows a fresh QR code. Locked out entirely? The operator resets it on the command line (see Operations). The app has five tabs: Accounts (mailboxes), Calendars, Outbox (mail waiting for your approval), Connect Claude (tokens and connected apps), Activity (everything that happened) and Security (sessions).
Apple does not let third-party software use your Apple ID password. You need an app-specific password, which requires two-factor authentication to be on for your Apple ID (it almost certainly is).
WebMail / Private Office MCP, and copy the 16-character password (xxxx-xxxx-xxxx-xxxx). It is shown only once.You can revoke it on the same page at any time; that instantly cuts Claude off from the mailbox.
imap.mail.me.comIMAP port993SMTP hostsmtp.mail.me.comSMTP port587you@icloud.com, you@me.com or a custom domain on iCloud+). IMAP username: the full address — for custom domains use the primary iCloud address as the username. IMAP password: the app-specific password. Leave the SMTP fields empty; they inherit the IMAP values.IMAP OK — INBOX has … messages · SMTP OK — authenticated.scope: body, slower on big folders), full messages, attachment download (images shown inline, other files as attachments; 4 MB each).…/mail/<account>/<folder>/<uid>. Put it in a to-do, a note or a calendar entry: tapping it opens that one message here in the app (after sign-in, if needed). Only the account's owner can open it; everyone else sees “not found”.When Claude wants to send, the exact message is saved to your Drafts and listed in Outbox with recipients, subject and a preview. Send now puts exactly those bytes on the wire and files a copy in Sent; Discard drops the request and leaves the draft. Queued mail expires after 7 days. The switch above the list can allow direct sending — it is off by default and every change is logged and mailed to you.
Auto-approved recipients (also in the Outbox tab): addresses Claude may mail without your click, for one mailbox or all of them, at most 50. A mail goes out at once only if every recipient — To, Cc and Bcc — is on the list for the sending mailbox; one other address and the whole mail waits in the Outbox as usual. Only you can change the list, here in the app; Claude has no tool for it. Every change is logged and mailed to you, and every mail sent this way appears in your Activity log.
Ask Claude “what is important in my mail?”, “anything interesting since Monday?” or “show me all business mail”. It ranks your recent mail across all accounts with the TypeSafe AI classifier and gives you a list with a link to each message. For this, the sender, subject and the beginning of each message's text are sent to TypeSafe AI. Attachments are never sent, and nothing in your mailbox changes.
Claude can also suggest what to do with each message: archive, move, star, tag, mark read or move to Trash. Suggestions wait under Triage. Tick the ones you agree with and press Apply, or reject them. Claude cannot apply them itself. A message that has moved since the suggestion was made is skipped. Suggestions expire after seven days, and every applied action is in your Activity log.
@icloud.com address as the IMAP username and keep the custom domain as the account's e-mail address.Apple Calendar is reached over CalDAV, an open standard iCloud supports fully: reading, creating, changing and deleting events, including recurring events, reminders and invitations. Each iCloud calendar (Home, Work, Family…) is added separately so you can decide per calendar what Claude may do.
WebMail / Private Office MCP Calendar.https://caldav.icloud.comUsernameyour Apple ID addressPasswordapp-specific passwordWork), tick Read-only if Claude should only look, and Save — or press Add all calendars to add every calendar on the account in one go, each named after itself (the Label field then acts as an optional prefix). Subscribed calendars are added read-only.Events created by Claude show up in Calendar.app on all your devices within a minute, like any other iCloud change.
Any public calendar link — public holidays, school terms, a team calendar from another tool — can be added with the source ICS / webcal subscription: paste the webcal:// or https://…ics link and Save. Feeds are read-only, must be public (no passwords in the link) and at most 5 MB. To find the link of a calendar you already subscribed to in Calendar.app: right-click the calendar → Get Info → the URL field.
Europe/Berlin, America/New_York…). Wall-clock times without a zone are treated as UTC.Claude can read and add Apple Notes from two places: notes kept in one of your mail accounts, and the iCloud folders you share through the Notes relay on your Mac. It can never edit or delete a note.
The Notes app stores these as ordinary messages in the account's Notes folder, so they come along with the mailbox you already added. Claude reads and adds them live.
Apple offers no server access to iCloud notes. The small Notes relay app runs in your Mac's menu bar and does the work there:
NotesRelay.app (in the repository under mac/NotesRelay, ./scripts/bundle.sh) and open it.Every ten minutes while the Mac is awake (and right after it wakes), the relay sends new and changed notes from those folders, encrypted, and removes notes you deleted or unshared. What Claude sees is therefore as fresh as the last sync, and Claude says so. A note Claude adds to iCloud is queued and appears in Notes at the next sync. The relay puts it into the folder Claude named if that folder is shared, otherwise into a shared folder called Notes.
The Notes tab in the app shows the connected Mac, the last sync and queued notes. Its Read-only switch stops Claude from queuing new notes, and Disconnect & delete synced notes removes everything the relay sent. Signing out in the relay does the same.
A read-only mail account refuses new notes too. Every note tool call appears under Activity → Notes tools, with the account but never the note's text.
Under Guardrails you write rules, in plain language, that the server enforces on every tool call before anything happens — independent of what the model remembers or intends. Each rule applies to all tools or to the ones you tick, and has a mode:
delete_event), “No sending at all from the Private account”.Every refusal and every reminder is recorded in your Activity log (kind “Settings” for rule changes; the tool call itself shows denied with the rule id). Claude can read the current rules with list_guardrails. Guardrails complement, not replace, the structural safeguards — read-only accounts and the Outbox stay as they are.
claude mcp add --transport http --scope user private-office <MCP URL> --header "Authorization: Bearer wmcp_…"
Tokens expire after 90 days by default; revoke any time from the same tab.
Always connect to the MCP URL shown under Connect Claude. It ends in .cloudfront.net/mcp, the address that runs through the server's firewall. If the server moves (as it did when it was put behind CloudFront), the old address answers 404 Not found. Your accounts, tokens and data stay exactly as they were; only the connection needs the new address:
claude mcp remove private-office, then run claude mcp add again with the new URL. Your existing token keeps working.Clients cache the tool list when they connect. After the server is updated, toggle the connector off and on (or start a new conversation) to see new tools. A good first prompt: “What's in my inbox, and what's on my calendar this week?”
There is no administrator in the web app: everybody has the same rights over their own data and nothing else. The few things that must be done to a user happen on the command line, from the repository, with AWS credentials for the stage:
cd sst && npm run user -- <command> [email] --stage dev
list — users in the pool with status and MFA statereset-mfa <email> — clear the authenticator; the user sets up a new one at the next sign-insignout <email> — revoke every Cognito session and refresh tokendisable <email> / enable <email> — switch an account off or on (sign-in and every token stop working while disabled)Everything else — passwords (via Forgot your password?), sessions, tokens, connected apps, accounts, calendars — each user manages for themselves in the app.