Install
openclaw skills install microsoft-calendarSecure Outlook Calendar / Microsoft 365 calendar API CLI. Use when the user wants to list, search, or read Outlook / Microsoft 365 calendar events; creating,...
openclaw skills install microsoft-calendarUse porteden calendar to list, search, and read Outlook / Microsoft 365 calendar events in the active account. Use -jc flags for AI-optimized output.
If porteden is not installed: brew install porteden/tap/porteden (or go install github.com/porteden/cli/cmd/porteden@latest).
porteden auth login — opens browser, sign in with the Microsoft account (personal, work, or school), credentials stored in system keyringporteden auth login --token <key> — stored in system keyringporteden auth statusPE_API_KEY is set in the environment, the CLI uses it automatically (no login needed).create, update, delete, and respond change shared state and often send notifications to attendees. Before running any of them, echo back the target profile/account, the calendar ID and event ID (or summary + time for create), the attendee list if it's changing, and the intended change, then wait for the user to confirm. Be especially careful with --notify (sends meeting invites) and delete without --no-notify (sends cancellations to all attendees).--profile (or PE_PROFILE) to isolate Outlook calendar accounts so a task touches only the calendar it needs. Prefer the narrowest Microsoft Graph scope at login. When a task is done — especially on a shared machine — run porteden auth logout to clear the keyring entry, and revoke access from the Microsoft account's security page (account.microsoft.com → Privacy → Apps and services with access to your data; for work/school accounts, myaccount.microsoft.com → Apps you've allowed) if a token may have been exposed.porteden calendar calendars -jcporteden calendar events --today -jcporteden calendar events --from 2026-02-01 --to 2026-02-07 -jcporteden calendar events --week --all -jcporteden calendar events -q "meeting" --today -jcporteden calendar by-contact "user@example.com" -jc (or --name "John Smith")porteden calendar event <eventId> -jcporteden calendar create --calendar <id> --summary "Meeting" --from "..." --to "..." --location "Room A" --attendees "a@b.com,c@d.com"porteden calendar update <eventId> --summary "New Title" (also: --from, --to, --location)porteden calendar update <eventId> --add-attendees "new@example.com" (or --remove-attendees; add --notify to send notifications)porteden calendar delete <eventId> (add --no-notify to skip attendee notifications)porteden calendar respond <eventId> accepted (or: declined, tentative)confirmed - Accepted/scheduledtentative - Maybe attendingneedsAction - Requires response from usercancelled - Event was cancelled2026-02-01T10:00:00Z--all-day flagstartUtc, endUtc, durationMinutes fieldsPE_PROFILE=work to avoid repeating --profile.-jc is shorthand for --json --compact: filters noise, truncates descriptions, limits attendees, reduces tokens.--all to auto-fetch all pages; check meta.hasMore and meta.totalCount in JSON output.--limit 100 --offset 0, then --offset 100, etc.AAMkAGI2...AAA=). The default user calendar is exposed as primary. Group, shared, and resource calendars each have their own ID. Get them via porteden calendar calendars -jc.My Calendars, Other Calendars, Shared Calendars, Birthdays, country-specific holiday calendars).by-contact supports partial matching: "@acme.com" for email domain, --name "Smith" for name.porteden calendar calendars -jc.PE_API_KEY, PE_PROFILE, PE_TIMEZONE, PE_FORMAT, PE_COLOR, PE_VERBOSE.brew install porteden/tap/portedengo install github.com/porteden/cli/cmd/porteden@latest