WorkerKit

AI workers for Outlook Calendar

Ready-made AI workers for Outlook Calendar: preparation holds, conflict checks across shared calendars, and daily briefings that fit how Microsoft 365 scheduling actually works.

What is an AI worker for Outlook Calendar?

An AI worker for Outlook Calendar is an AI agent scoped to one scheduling job on your Microsoft 365 calendar, such as holding preparation time before a significant meeting or warning you about a day that has quietly filled up. It reads availability through your connected work account and writes only where permitted, so an invitation you have not answered stays unanswered.

What these workers do

Hold preparation time before key meetings

Looks at what is coming, judges which meetings need real preparation, and books that time before the surrounding day fills up.

Warn about days that have filled up

Flags back to back stretches with no gap for lunch or travel, early enough that something can still be moved.

Check conflicts across shared calendars

Reads your calendar alongside the team calendars you can access and surfaces the clashes that only show up when both are considered together.

Retire holds that outlived their purpose

Finds the placeholder blocks that were never cleaned up and clears the ones whose reason has passed.

How an AI worker runs in Outlook Calendar

Where it sits in Microsoft 365

Preparation time as a first class job

The line it does not cross

Outlook Calendar questions, answered.

Does this need my Microsoft 365 administrator to approve it?

Connecting a work account follows your tenant's normal consent rules, so some organisations ask an administrator to approve the connection once. Once connected, the worker's reach is set by the permissions you give it, not by the connection alone.

Will it reply to meeting invitations?

Not unless you grant that permission, and it is usually withheld. The standard setup lets a worker see that an invitation is waiting and tell you about it, while leaving the accept or decline entirely to you.

Can it see my colleagues' calendars?

Only the ones your own account can already open, and only if you scope it to them. It inherits your visibility rather than gaining any new access, so a calendar you cannot see is one the worker cannot see either.

Does it handle recurring meetings correctly?

Yes. Recurring series are read as the individual occurrences they produce, so a worker planning next week reasons about the meetings that actually fall in that week rather than the abstract pattern behind them.

What AI workers can do in Outlook Calendar

The tools a worker can be granted in Outlook Calendar once you connect it. A kit grants only the ones its job needs, and you can narrow them further on the worker.

List Calendars

List all calendars for the connected account. Returns each calendar's numeric `id` (small integer, used as `calendarId` in every other tool), `externalId`, name, provider (GOOGLE or M365), timezone, `isPrimary`, and `isOperatorOwner` (the account holder's main calendar). Works at every access level, including free-busy-only.

Search Calendar Events

Search and list calendar events. If you already have an `eventId`, use calendar_get_event; for availability questions, prefer calendar_freebusy. Returns each event's `id`, title, start/end (UTC), durationMinutes, attendees with RSVP, organizer, status, joinUrl, labels, calendarId, provider, and `currentUserCalendarEmail` (which attendee is 'you'). Paginate via `meta.hasMore`: advance `offset` by `meta.count` until false (don't infer from `events.length`). Defaults to today through today+7 days. If `accessInfo` is present, results were limited by an access rule — render it verbatim. Local time fields carry their UTC offset; use timeZoneId to select the requested display zone and check the response timezone before labeling report times. Convert values whose offset differs from the requested display zone; do not merely relabel them.

Get Calendar Event

Get full details of a single calendar event by its opaque ID. Returns title, start/end (UTC), durationMinutes, description, location, attendees with RSVP status, organizer, joinUrl, labels, calendarId, provider, and `isRecurringEvent`. The response also carries `currentUserCalendarEmail` so you can correctly identify which attendee is 'you'. A 404 means the event either does not exist OR is hidden by an access policy — the two cases are not distinguishable by design. Local time fields carry their UTC offset; use timeZoneId to select the requested display zone and check the response timezone before labeling report times. Convert values whose offset differs from the requested display zone; do not merely relabel them.

Check Calendar Availability

Check calendar availability for a date range. Returns per-calendar busy and free time blocks (no event details, ever — this is the right channel for 'is the user available?' questions). Works at every access level, including free-busy-only access that cannot read event content. Prefer this over calendar_search_events for availability questions. Local time fields carry their UTC offset; use timeZoneId to select the requested display zone and check the response timezone before labeling report times. Convert values whose offset differs from the requested display zone; do not merely relabel them.

Find Events by Contact

Find calendar events involving a specific contact, searched by email substring and/or display-name substring. At least one of `email` or `name` is required. The `name` match also falls back to the email's local-part when the upstream omits a display name (common on Google for external attendees) — so `name=alice` matches both 'Alice Chen' and a bare 'alice@example.com'. Defaults to a server-controlled window (past 90 days / next 180 days), narrowed if a timeframe restriction applies. Returns the same event shape as calendar_search_events including `currentUserCalendarEmail`, but `meta.totalCount` and `meta.hasMore` are omitted — do not paginate blindly against this endpoint. For full pagination over a contact, use calendar_search_events with `attendeeEmail` instead. Local time fields carry their UTC offset; use timeZoneId to select the requested display zone and check the response timezone before labeling report times. Convert values whose offset differs from the requested display zone; do not merely relabel them.

Create Calendar Event

Create a new calendar event. Returns the full new event on success. For all-day events, set `allDay: true` and use the date component of startTime as the inclusive start and endTime as the EXCLUSIVE end (Google convention — a single-day all-day event uses startTime=2026-07-04T00:00:00Z, endTime=2026-07-05T00:00:00Z).

Update Calendar Event

Update an existing calendar event. Only include the fields you want to change — omitted fields stay as they were. `addAttendees` / `removeAttendees` are DIFFS, not replacements: pass only the addresses to add or remove, never the full roster. Updates are atomic — if any change is rejected (e.g. a newly added attendee fails a policy rule), no field on the event is modified; correct the request and retry.

Delete Calendar Event

Hard-delete a calendar event from the provider (Google/Microsoft). There is no PortEden-side trash — the event is gone. By default a cancellation email is sent to every attendee; set `notifyAttendees: false` to suppress it.

Respond to Calendar Invite

RSVP to a calendar event invitation on behalf of the user. Two non-retryable 409 errors to surface as user-facing precondition failures, not transient errors: `CANNOT_RSVP_AS_ORGANIZER` (the user owns the event — organizers don't RSVP to themselves, drop the RSVP step) and `NOT_AN_ATTENDEE` (the user's address isn't on the invite — fix by adding them via calendar_update_event addAttendees before retrying).

Browse Outlook Calendar kits

All apps