Google Calendar
Calendar Adapter Architecture
GoogleCalendarService → GoogleCalendarAdapter → Google Calendar API v3
What & Why
Google Calendar integration gives your agents and workflows direct access to schedule and availability data. Key use cases:
- Availability checking — call
get_free_busybefore booking any meeting; supports querying multiple users in one request - Meeting creation — create events with attendees, location, description, and recurrence rules
- Calendar sync — list all calendars for a user, enumerate events across a date range, and keep downstream systems in sync
- Recurring event management — full RRULE support; create, update, or delete recurring series
Auth uses Google OAuth 2.0. The adapter attaches the access token in the Authorization: Bearer header on every request. All datetimes follow RFC 3339 (e.g. 2026-05-13T09:00:00+00:00). All-day events use a plain date value instead of dateTime.
Event Data Model
dateTime — includes time + timezone. RFC 3339 format required.
date only — no time, no timezone. End date is exclusive (non-inclusive).
Returns busy blocks per email. Use to check availability before booking.
Methods Reference
| Method | Description | Key Parameters |
|---|---|---|
list_calendars | List all calendars accessible by the authenticated user | — |
get_calendar | Get metadata for a specific calendar | calendar_id |
create_calendar | Create a new calendar | summary, time_zone |
delete_calendar | Delete a calendar permanently | calendar_id |
list_events | List events in a calendar, optionally filtered by date range | calendar_id, time_min, time_max, max_results, single_events, order_by |
get_event | Get a single event by ID | calendar_id, event_id |
create_event | Create a new event with attendees, recurrence, and reminders | calendar_id, summary, start, end, attendees, recurrence, description, location, reminders |
update_event | Update an existing event (full or partial update) | calendar_id, event_id, plus any fields to update |
delete_event | Delete an event | calendar_id, event_id |
move_event | Move an event to a different calendar | calendar_id, event_id, destination_calendar_id |
get_free_busy | Query free/busy blocks for one or more users over a time range | emails, time_min, time_max, time_zone |
list_colors | List all available colors for calendars and events | — |
CLI Examples
# List all calendars for the authenticated user
constellation google-calendar list-calendars
# List events in the primary calendar from May 1st onwards
constellation google-calendar list-events \
--calendar-id primary \
--time-min 2026-05-01
# Get a specific event
constellation google-calendar get-event \
--calendar-id primary \
--event-id abc123xyz
# Create a recurring daily standup with attendees
constellation google-calendar create-event \
--summary "Team standup" \
--start "2026-05-13T09:00:00" \
--end "2026-05-13T09:30:00" \
--attendees "a@co.com,b@co.com" \
--recurrence "RRULE:FREQ=DAILY;BYDAY=MO,TU,WE,TH,FR"
# Update an existing event summary
constellation google-calendar update-event \
--calendar-id primary \
--event-id abc123xyz \
--summary "Team standup (updated)"
# Move an event to a different calendar
constellation google-calendar move-event \
--calendar-id primary \
--event-id abc123xyz \
--destination-calendar-id work@group.calendar.google.com
# Delete an event
constellation google-calendar delete-event \
--calendar-id primary \
--event-id abc123xyz
# Check availability for two users over a full day
constellation google-calendar get-free-busy \
--emails "a@co.com,b@co.com" \
--time-min "2026-05-13T00:00:00Z" \
--time-max "2026-05-14T00:00:00Z"
# List all available colors for calendars and events
constellation google-calendar list-colors
Auth Scopes
| Scope | Purpose |
|---|---|
calendar.readonly | Read-only access to all calendars and events |
calendar.events | Full read/write access to events (create, update, delete) |
calendar.events.readonly | Read-only access to events only |
The adapter requests the minimum scopes needed for the operations being performed. For full CRUD access, calendar.events is required. For availability-only workflows, calendar.readonly is sufficient.
Notes
- RFC 3339 datetimes — all
start/endfields must use RFC 3339 format. The adapter handles timezone normalization automatically. - All-day events — use
date(e.g."2026-06-01") instead ofdateTime. The end date is exclusive (a one-day event ends the following day). - Recurring events — use
RRULEstrings in therecurrencefield. The Google Calendar API expands recurring instances; setsingle_events=trueinlist_eventsto retrieve expanded instances rather than the master event. - Primary calendar — use the string
"primary"as thecalendar_idto refer to the authenticated user's default calendar without needing the full calendar ID. get_free_busy— accepts a list of email addresses and returns per-user busy blocks. This is the recommended way to check scheduling conflicts before creating events with attendees.