Skip to content

Commit b7d30c8

Browse files
authored
feat(google-calendar): wire freebusy, align tools with API v3, add calendar + sharing tools (#5084)
* feat(google-calendar): wire freebusy, align tools with API v3, add calendar + sharing tools * fix(google-calendar): address review — trust offset timezones, make list_acl showDeleted usable, harden unshare error parse, clarify update attendees * fix(google-calendar): wire list q/pageToken into block, harden invite PUT error parse * fix(google-calendar): make list orderBy user-selectable, clarify update timeZone applies to start/end * fix(google-calendar): require timeZone for recurring timed events, clarify recurrence replace semantics * fix(google-calendar): validate grantee before building share ACL body Throw a clear error when scopeType is user/group/domain but scopeValue is missing or blank, instead of POSTing a scope-type-only body that the Calendar ACL API rejects with an opaque error.
1 parent 06f1e72 commit b7d30c8

18 files changed

Lines changed: 1579 additions & 441 deletions

File tree

apps/docs/content/docs/en/integrations/google_calendar.mdx

Lines changed: 125 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,12 @@ Create a new event in Google Calendar. Returns API-aligned fields only.
4848
| `summary` | string | Yes | Event title/summary |
4949
| `description` | string | No | Event description |
5050
| `location` | string | No | Event location |
51-
| `startDateTime` | string | Yes | Start date and time. MUST include timezone offset \(e.g., 2025-06-03T10:00:00-08:00\) OR provide timeZone parameter |
52-
| `endDateTime` | string | Yes | End date and time. MUST include timezone offset \(e.g., 2025-06-03T11:00:00-08:00\) OR provide timeZone parameter |
51+
| `startDateTime` | string | Yes | Start time. Use a datetime with timezone offset \(2025-06-03T10:00:00-08:00\) or a date \(2025-06-03\) for an all-day event |
52+
| `endDateTime` | string | Yes | End time. Use a datetime with timezone offset \(2025-06-03T11:00:00-08:00\) or a date \(2025-06-04\) for an all-day event |
5353
| `timeZone` | string | No | Time zone \(e.g., America/Los_Angeles\). Required if datetime does not include offset. Defaults to America/Los_Angeles if not provided. |
5454
| `attendees` | array | No | Array of attendee email addresses |
55+
| `recurrence` | string | No | Recurrence rule\(s\) in RFC 5545 format \(e.g., RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR\). Separate multiple rules with newlines. |
56+
| `addGoogleMeet` | boolean | No | Attach a Google Meet video conference link to the event |
5557
| `sendUpdates` | string | No | How to send updates to attendees: all, externalOnly, or none |
5658

5759
#### Output
@@ -60,10 +62,12 @@ Create a new event in Google Calendar. Returns API-aligned fields only.
6062
| --------- | ---- | ----------- |
6163
| `id` | string | Event ID |
6264
| `htmlLink` | string | Event link |
65+
| `hangoutLink` | string | Google Meet link |
6366
| `status` | string | Event status |
6467
| `summary` | string | Event title |
6568
| `description` | string | Event description |
6669
| `location` | string | Event location |
70+
| `recurrence` | json | Recurrence rules |
6771
| `start` | json | Event start |
6872
| `end` | json | Event end |
6973
| `attendees` | json | Event attendees |
@@ -81,7 +85,10 @@ List events from Google Calendar. Returns API-aligned fields only.
8185
| `calendarId` | string | No | Google Calendar ID \(e.g., primary or calendar@group.calendar.google.com\) |
8286
| `timeMin` | string | No | Lower bound for events \(RFC3339 timestamp, e.g., 2025-06-03T00:00:00Z\) |
8387
| `timeMax` | string | No | Upper bound for events \(RFC3339 timestamp, e.g., 2025-06-04T00:00:00Z\) |
84-
| `orderBy` | string | No | Order of events returned \(startTime or updated\) |
88+
| `q` | string | No | Free-text search across event summary, description, location, attendees, and organizer |
89+
| `maxResults` | number | No | Maximum number of events to return \(max 2500\) |
90+
| `pageToken` | string | No | Token for retrieving the next page of results |
91+
| `orderBy` | string | No | Order of events returned \(startTime or updated\). Defaults to startTime. |
8592
| `showDeleted` | boolean | No | Include deleted events |
8693

8794
#### Output
@@ -132,10 +139,12 @@ Update an existing event in Google Calendar. Returns API-aligned fields only.
132139
| `summary` | string | No | New event title/summary |
133140
| `description` | string | No | New event description |
134141
| `location` | string | No | New event location |
135-
| `startDateTime` | string | No | New start date and time. MUST include timezone offset \(e.g., 2025-06-03T10:00:00-08:00\) OR provide timeZone parameter |
136-
| `endDateTime` | string | No | New end date and time. MUST include timezone offset \(e.g., 2025-06-03T11:00:00-08:00\) OR provide timeZone parameter |
142+
| `startDateTime` | string | No | New start time. Use a datetime with timezone offset \(2025-06-03T10:00:00-08:00\) or a date \(2025-06-03\) for an all-day event |
143+
| `endDateTime` | string | No | New end time. Use a datetime with timezone offset \(2025-06-03T11:00:00-08:00\) or a date \(2025-06-04\) for an all-day event |
137144
| `timeZone` | string | No | Time zone \(e.g., America/Los_Angeles\). Required if datetime does not include offset. |
138-
| `attendees` | array | No | Array of attendee email addresses \(replaces existing attendees\) |
145+
| `attendees` | array | No | Array of attendee email addresses \(replaces the existing attendee list\) |
146+
| `recurrence` | string | No | Recurrence rule\(s\) in RFC 5545 format \(e.g., RRULE:FREQ=WEEKLY;BYDAY=MO,WE,FR\). Separate multiple rules with newlines. |
147+
| `addGoogleMeet` | boolean | No | Attach a Google Meet video conference link to the event |
139148
| `sendUpdates` | string | No | How to send updates to attendees: all, externalOnly, or none |
140149

141150
#### Output
@@ -144,10 +153,12 @@ Update an existing event in Google Calendar. Returns API-aligned fields only.
144153
| --------- | ---- | ----------- |
145154
| `id` | string | Event ID |
146155
| `htmlLink` | string | Event link |
156+
| `hangoutLink` | string | Google Meet link |
147157
| `status` | string | Event status |
148158
| `summary` | string | Event title |
149159
| `description` | string | Event description |
150160
| `location` | string | Event location |
161+
| `recurrence` | json | Recurrence rules |
151162
| `start` | json | Event start |
152163
| `end` | json | Event end |
153164
| `attendees` | json | Event attendees |
@@ -298,7 +309,7 @@ Invite attendees to an existing Google Calendar event. Returns API-aligned field
298309
| `calendarId` | string | No | Google Calendar ID \(e.g., primary or calendar@group.calendar.google.com\) |
299310
| `eventId` | string | Yes | Google Calendar event ID to invite attendees to |
300311
| `attendees` | array | Yes | Array of attendee email addresses to invite |
301-
| `sendUpdates` | string | No | How to send updates to attendees: all, externalOnly, or none |
312+
| `sendUpdates` | string | No | How to send updates to attendees: all, externalOnly, or none \(defaults to all\) |
302313
| `replaceExisting` | boolean | No | Whether to replace existing attendees or add to them \(defaults to false\) |
303314

304315
#### Output
@@ -317,6 +328,113 @@ Invite attendees to an existing Google Calendar event. Returns API-aligned field
317328
| `creator` | json | Event creator |
318329
| `organizer` | json | Event organizer |
319330

331+
### `google_calendar_freebusy`
332+
333+
Query free/busy information for one or more Google Calendars. Returns API-aligned fields only.
334+
335+
#### Input
336+
337+
| Parameter | Type | Required | Description |
338+
| --------- | ---- | -------- | ----------- |
339+
| `calendarIds` | string | Yes | Comma-separated calendar IDs to query \(e.g., "primary,other@example.com"\) |
340+
| `timeMin` | string | Yes | Start of the time range \(RFC3339 timestamp, e.g., 2025-06-03T00:00:00Z\) |
341+
| `timeMax` | string | Yes | End of the time range \(RFC3339 timestamp, e.g., 2025-06-04T00:00:00Z\) |
342+
| `timeZone` | string | No | IANA time zone \(e.g., "UTC", "America/New_York"\). Defaults to UTC. |
343+
344+
#### Output
345+
346+
| Parameter | Type | Description |
347+
| --------- | ---- | ----------- |
348+
| `timeMin` | string | Start of the queried time range |
349+
| `timeMax` | string | End of the queried time range |
350+
| `calendars` | json | Per-calendar free/busy data with busy periods and any errors |
351+
352+
### `google_calendar_create_calendar`
353+
354+
Create a new secondary calendar. Returns API-aligned fields only.
355+
356+
#### Input
357+
358+
| Parameter | Type | Required | Description |
359+
| --------- | ---- | -------- | ----------- |
360+
| `summary` | string | Yes | Title of the new calendar |
361+
| `description` | string | No | Description of the new calendar |
362+
| `location` | string | No | Geographic location of the calendar as free-form text |
363+
| `timeZone` | string | No | Time zone of the calendar as an IANA name \(e.g., America/Los_Angeles\) |
364+
365+
#### Output
366+
367+
| Parameter | Type | Description |
368+
| --------- | ---- | ----------- |
369+
| `id` | string | Calendar ID |
370+
| `summary` | string | Calendar title |
371+
| `description` | string | Calendar description |
372+
| `location` | string | Calendar location |
373+
| `timeZone` | string | Calendar time zone |
374+
375+
### `google_calendar_share_calendar`
376+
377+
Grant a user, group, or domain access to a calendar. Returns API-aligned fields only.
378+
379+
#### Input
380+
381+
| Parameter | Type | Required | Description |
382+
| --------- | ---- | -------- | ----------- |
383+
| `calendarId` | string | No | Calendar ID to share \(e.g., primary or calendar@group.calendar.google.com\) |
384+
| `role` | string | Yes | Access role to grant: freeBusyReader, reader, writer, or owner |
385+
| `scopeType` | string | Yes | Type of grantee: user, group, domain, or default \(public\) |
386+
| `scopeValue` | string | No | Email \(user/group\), domain name \(domain\), or empty for default. Required unless scope type is default. |
387+
| `sendNotifications` | boolean | No | Whether to send a notification email about the change. Defaults to true. |
388+
389+
#### Output
390+
391+
| Parameter | Type | Description |
392+
| --------- | ---- | ----------- |
393+
| `id` | string | ACL rule ID |
394+
| `role` | string | Granted access role |
395+
| `scope` | json | Grantee scope \(type and value\) |
396+
397+
### `google_calendar_list_acl`
398+
399+
List the access control rules (sharing) for a calendar. Returns API-aligned fields only.
400+
401+
#### Input
402+
403+
| Parameter | Type | Required | Description |
404+
| --------- | ---- | -------- | ----------- |
405+
| `calendarId` | string | No | Calendar ID to inspect \(e.g., primary or calendar@group.calendar.google.com\) |
406+
| `maxResults` | number | No | Maximum number of ACL rules to return |
407+
| `pageToken` | string | No | Token for retrieving subsequent pages of results |
408+
| `showDeleted` | boolean | No | Include deleted ACL rules \(with role "none"\) |
409+
410+
#### Output
411+
412+
| Parameter | Type | Description |
413+
| --------- | ---- | ----------- |
414+
| `nextPageToken` | string | Next page token |
415+
| `rules` | array | List of ACL rules |
416+
|`id` | string | ACL rule ID |
417+
|`role` | string | Access role |
418+
|`scope` | json | Grantee scope \(type and value\) |
419+
420+
### `google_calendar_unshare_calendar`
421+
422+
Revoke an access control rule (sharing) from a calendar. Returns API-aligned fields only.
423+
424+
#### Input
425+
426+
| Parameter | Type | Required | Description |
427+
| --------- | ---- | -------- | ----------- |
428+
| `calendarId` | string | No | Calendar ID to modify \(e.g., primary or calendar@group.calendar.google.com\) |
429+
| `ruleId` | string | Yes | ACL rule ID to remove \(e.g., user:person@example.com\) |
430+
431+
#### Output
432+
433+
| Parameter | Type | Description |
434+
| --------- | ---- | ----------- |
435+
| `ruleId` | string | Removed ACL rule ID |
436+
| `deleted` | boolean | Whether removal was successful |
437+
320438

321439

322440
## Triggers

0 commit comments

Comments
 (0)