WorkerKit

AI workers for Google Calendar

Ready-made AI workers for Google Calendar: protected focus blocks, travel buffers, and a morning agenda that is placed and rechecked on its own, under scheduling rules you set.

What is an AI worker for Google Calendar?

An AI worker for Google Calendar is an AI agent scoped to one scheduling job, such as defending focus time or briefing you on the day ahead. It reads your events and free time through your connected Google account and can place or move events only where you have granted write access, so meetings other people booked stay exactly as they left them.

What these workers do

Defend focus time every morning

Finds the real gaps in the coming days and places protected blocks inside your working hours, instead of scattering them wherever there is space.

Add travel buffers around offsite meetings

Spots the events you physically have to reach and holds the door to door time on both sides so you are not scheduled to be in two places.

Send a morning agenda

Summarizes the day ahead, names the double bookings, and points at the meetings that still need a decision from you before they start.

Keep a recurring planning slot honest

Checks each week that the planning hold survived, and rebooks it when something else has taken the slot.

How an AI worker runs in Google Calendar

It works in your timezone, not UTC

What it can place, and what it must not touch

Running early, then checking again

Google Calendar questions, answered.

Can an AI worker create events in my Google Calendar?

Yes, when you grant create access, and only then. You can allow it to add its own blocks while withholding permission to edit attendees, which means it can protect your time but can never add or remove people from a meeting.

Will it move meetings I have with other people?

Only if you grant permission to edit event times, and many calendar workers are deliberately set up without it. A worker limited to creating its own events can defend your week without touching a single meeting somebody else booked.

Can it accept or decline invitations for me?

Not unless you grant that specific permission, which is usually withheld. Responding to an invitation is a social act with consequences a worker cannot judge, so the normal setup lets it flag what needs an answer and leaves the answer to you.

Does it work across several calendars?

Yes, and reading and writing are separate choices per calendar. That lets a worker plan around a shared team calendar, or around a colleague's calendar you already have access to, while only ever placing its own blocks on the one calendar you nominated for it.

What AI workers can do in Google Calendar

The tools a worker can be granted in Google 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 Google Calendar kits

All apps