Composio Google Calendar

Skill
v1.0.0

Per-app playbook for driving Google Calendar through Composio (toolkit slug `googlecalendar`). Verified GOOGLECALENDAR_* tool slugs and argument shapes for listing, finding, creating, and updating events plus free/busy. Use alongside the `composio` hub skill. CRITICAL — covers the "events from a year ago" trap: GOOGLECALENDAR_EVENTS_LIST has no default timeMin, so you MUST pass timeMin/orderBy/singleEvents to get upcoming events.

composio
google-calendar
calendar

Template Content

Composio · Google Calendar

Toolkit slug: googlecalendar. Read the [[composio]] hub first for the call model. calendarId defaults to "primary". Times are RFC3339 (2026-06-02T15:00:00Z or with offset).

agent-swarm x composio POST /tools/execute/<SLUG> \
  --body '{"user_id":"<connected-account-email>","connected_account_id":"<active-connected-account-id>","arguments":{ … }}'

Follow the hub's Resolve the user and connected account procedure, then select the resolved user's googlecalendar account whose status is ACTIVE.

Headline tools

SlugWhatKey args
GOOGLECALENDAR_EVENTS_LISTList events on a calendarcalendarId (def primary), timeMin, timeMax, singleEvents, orderBy, q, maxResults, timeZone, pageToken
GOOGLECALENDAR_EVENTS_LIST_ALL_CALENDARSList across all calendarstimeMin, timeMax, singleEvents, orderBy
GOOGLECALENDAR_FIND_EVENTSearch for an eventquery, timeMin, timeMax
GOOGLECALENDAR_EVENTS_GETOne event by idcalendar_id, event_id
GOOGLECALENDAR_CREATE_EVENTCreate eventstart_datetime (required), end_datetime / event_duration_minutes (def 30), summary, description, location, attendees, timezone, calendar_id, send_updates, create_meeting_room (def true)
GOOGLECALENDAR_QUICK_ADDNL event ("lunch tmrw 1pm")calendar_id, text
GOOGLECALENDAR_UPDATE_EVENT / GOOGLECALENDAR_PATCH_EVENTEdit eventcalendar_id, event_id, fields
GOOGLECALENDAR_DELETE_EVENTDeletecalendar_id, event_id
GOOGLECALENDAR_FIND_FREE_SLOTSFree slotsitems (def ["primary"]), time_min, time_max, timezone
GOOGLECALENDAR_LIST_CALENDARSList the user's calendars
GOOGLECALENDAR_GET_CURRENT_DATE_TIMEServer "now" (use for timeMin)timezone

Full set: 48 tools — agent-swarm x composio GET "/tools?toolkit_slug=googlecalendar&limit=100" | jq -r '.items[]|"\(.slug)\t\(.name)"'.

⚠️ The "events from a year ago" trap

GOOGLECALENDAR_EVENTS_LIST has no default timeMin. Calling it with no time window returns old/arbitrary events (this is exactly how "what's on my calendar?" came back with stuff from a year ago). To get upcoming events you MUST set the window and ordering explicitly:

NOW=$(date -u +%Y-%m-%dT%H:%M:%SZ)
agent-swarm x composio POST /tools/execute/GOOGLECALENDAR_EVENTS_LIST \
  --body "{\"connected_account_id\":\"ca_…\",\"arguments\":{
    \"calendarId\":\"primary\",
    \"timeMin\":\"$NOW\",
    \"singleEvents\":true,
    \"orderBy\":\"startTime\",
    \"maxResults\":10
  }}"
  • timeMin = now (or the start of the window you care about).
  • singleEvents:true expands recurring events into individual instances — required for orderBy:"startTime" to be valid.
  • Add timeMax to bound the window (e.g. next 7 days).
  • For "today/this week" prefer computing timeMin/timeMax locally, or call GOOGLECALENDAR_GET_CURRENT_DATE_TIME first to anchor to the server's clock.

Create an event

agent-swarm x composio POST /tools/execute/GOOGLECALENDAR_CREATE_EVENT \
  --body '{"connected_account_id":"ca_…","arguments":{
    "summary":"Project planning",
    "start_datetime":"2026-06-05T15:00:00+02:00",
    "event_duration_minutes":30,
    "timezone":"Europe/Madrid",
    "attendees":["someone@example.com"],
    "send_updates":"all"
  }}'
  • Either end_datetime OR event_duration_minutes (default 30).
  • create_meeting_room defaults true (adds Google Meet) — set false to skip.
  • Create/update/delete are write actions — only on explicit request.

Gotchas

  • The year-ago trap above is the #1 issue. timeMin is not optional in practice.
  • orderBy:"startTime" requires singleEvents:true or the API errors.
  • Output uses the event's own timezone; pass timeZone to normalize display.