Google Calendar Automation via Rube MCP
Automate Google Calendar workflows including event creation, scheduling, availability checks, attendee management, and calendar browsing through Composio's Google Calendar toolkit.
Toolkit docs: composio.dev/toolkits/googlecalendar
Prerequisites
- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
- Active Google Calendar connection via
RUBE_MANAGE_CONNECTIONS with toolkit googlecalendar
- Always call
RUBE_SEARCH_TOOLS first to get current tool schemas
Setup
Get Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
- Verify Rube MCP is available by confirming
RUBE_SEARCH_TOOLS responds
- Call
RUBE_MANAGE_CONNECTIONS with toolkit googlecalendar
- If connection is not ACTIVE, follow the returned auth link to complete Google OAuth
- Confirm connection status shows ACTIVE before running any workflows
Core Workflows
1. Create and Manage Events
When to use: User wants to create, update, or delete calendar events
Tool sequence:
GOOGLECALENDAR_LIST_CALENDARS - Identify target calendar ID [Prerequisite]
GOOGLECALENDAR_GET_CURRENT_DATE_TIME - Get current time with proper timezone [Optional]
GOOGLECALENDAR_FIND_FREE_SLOTS - Check availability before booking [Optional]
GOOGLECALENDAR_CREATE_EVENT - Create the event [Required]
GOOGLECALENDAR_PATCH_EVENT - Update specific fields of an existing event [Alternative]
GOOGLECALENDAR_UPDATE_EVENT - Full replacement update of an event [Alternative]
GOOGLECALENDAR_DELETE_EVENT - Delete an event [Optional]
Key parameters:
calendar_id: Use 'primary' for main calendar, or specific calendar ID
start_datetime: ISO 8601 format 'YYYY-MM-DDTHH:MM:SS' (NOT natural language)
timezone: IANA timezone name (e.g., 'America/New_York', NOT 'EST' or 'PST')
event_duration_hour: Hours (0+)
event_duration_minutes: Minutes (0-59 only; NEVER use 60+)
summary: Event title
attendees: Array of email addresses (NOT names)
location: Free-form text for event location
Pitfalls:
start_datetime must be ISO 8601; natural language like 'tomorrow' is rejected
event_duration_minutes max is 59; use event_duration_hour=1 instead of event_duration_minutes=60
timezone must be IANA identifier; abbreviations like 'EST', 'PST' are NOT valid
attendees only accepts email addresses, not names; resolve names first
- Google Meet link creation defaults to true; may fail on personal Gmail accounts (graceful fallback)
- Organizer is auto-added as attendee unless
exclude_organizer=true
2. List and Search Events
When to use: User wants to find or browse events on their calendar
Tool sequence:
GOOGLECALENDAR_LIST_CALENDARS - Get available calendars [Prerequisite]
GOOGLECALENDAR_FIND_EVENT - Search by title/keyword with time bounds [Required]
GOOGLECALENDAR_EVENTS_LIST - List events in a time range [Alternative]
GOOGLECALENDAR_EVENTS_INSTANCES - List instances of a recurring event [Optional]
Key parameters:
query / q: Free-text search (matches summary, description, location, attendees)
timeMin: Lower bound (RFC3339 with timezone offset, e.g., '2024-01-01T00:00:00-08:00')
timeMax: Upper bound (RFC3339 with timezone offset)
singleEvents: true to expand recurring events into instances
orderBy: 'startTime' (requires singleEvents=true) or 'updated'
maxResults: Results per page (max 2500)
Pitfalls:
- Timezone warning: UTC timestamps (ending in 'Z') don't align with local dates; use local timezone offsets instead
- Example: '2026-01-19T00:00:00Z' covers 2026-01-18 4pm to 2026-01-19 4pm in PST
- Omitting
timeMin/timeMax scans the full calendar and can be slow
pageToken in response means more results; paginate until absent
orderBy='startTime' requires singleEvents=true
3. Manage Attendees and Invitations
When to use: User wants to add, remove, or update event attendees
Tool sequence:
GOOGLECALENDAR_FIND_EVENT or GOOGLECALENDAR_EVENTS_LIST - Find the event [Prerequisite]
GOOGLECALENDAR_PATCH_EVENT - Add attendees (replaces entire attendees list) [Required]
GOOGLECALENDAR_REMOVE_ATTENDEE - Remove a specific attendee by email [Required]
Key parameters:
event_id: Unique event identifier (opaque string, NOT the event title)
attendees: Full list of attendee emails (PATCH replaces entire list)
attendee_email: Email to remove
send_updates: 'all', 'externalOnly', or 'none'
Pitfalls:
event_id is a technical identifier, NOT the event title; always search first to get the ID
PATCH_EVENT attendees field replaces the entire list; include existing attendees to avoid removing them
- Attendee names cannot be resolved; always use email addresses
- Use
GMAIL_SEARCH_PEOPLE to resolve names to emails before managing attendees
4. Check Availability and Free/Busy Status
When to use: User wants to find available time slots or check busy periods
Tool sequence:
GOOGLECALENDAR_LIST_CALENDARS - Identify calendars to check [Prerequisite]
GOOGLECALENDAR_GET_CURRENT_DATE_TIME - Get current time with timezone [Optional]
GOOGLECALENDAR_FIND_FREE_SLOTS - Find free intervals across calendars [Required]
GOOGLECALENDAR_FREE_BUSY_QUERY - Get raw busy periods for computing gaps [Fallback]
GOOGLECALENDAR_CREATE_EVENT - Book a confirmed slot [Required]
Key parameters:
items: List of calendar IDs to check (e.g., ['primary'])
time_min/time_max: Query interval (defaults to current day if omitted)
timezone: IANA timezone for interpreting naive timestamps
calendarExpansionMax: Max calendars (1-50)
groupExpansionMax: Max members per group (1-100)
Pitfalls:
- Maximum span ~90 days per Google Calendar freeBusy API limit
- Very long ranges or inaccessible calendars yield empty/invalid results
- Only calendars with at least freeBusyReader access are visible
- Free slots responses may normalize to UTC ('Z'); check offsets
GOOGLECALENDAR_FREE_BUSY_QUERY requires RFC3339 timestamps with timezone
Common Patterns
ID Resolution
- Calendar name -> calendar_id:
GOOGLECALENDAR_LIST_CALENDARS to enumerate all calendars
- Event title -> event_id:
GOOGLECALENDAR_FIND_EVENT or GOOGLECALENDAR_EVENTS_LIST
- Attendee name -> email:
GMAIL_SEARCH_PEOPLE
Timezone Handling
- Always use IANA timezone identifiers (e.g., 'America/Los_Angeles')
- Use
GOOGLECALENDAR_GET_CURRENT_DATE_TIME to get current time in user's timezone
- When querying events for a local date, use timestamps with local offset, NOT UTC
- Example: '2026-01-19T00:00:00-08:00' for PST, NOT '2026-01-19T00:00:00Z'
Pagination
GOOGLECALENDAR_EVENTS_LIST returns nextPageToken; iterate until absent
GOOGLECALENDAR_LIST_CALENDARS also paginates; use page_token
Known Pitfalls
- Natural language dates: NOT supported; all dates must be ISO 8601 or RFC3339
- Timezone mismatch: UTC timestamps don't align with local dates for filtering
- Duration limits:
event_duration_minutes max 59; use hours for longer durations
- IANA timezones only: 'EST', 'PST', etc. are NOT valid; use 'America/New_York'
- Event IDs are opaque: Always search to get event_id; never guess or construct
- Attendees as emails: Names cannot be used; resolve with GMAIL_SEARCH_PEOPLE
- PATCH replaces attendees: Include all desired attendees in the array, not just new ones
- Conference limitations: Google Meet may fail on personal accounts (graceful fallback)
- Rate limits: High-volume searches can trigger 403/429; throttle between calls
Quick Reference
| Task |
Tool Slug |
Key Params |
| List calendars |
GOOGLECALENDAR_LIST_CALENDARS |
max_results |
| Create event |
GOOGLECALENDAR_CREATE_EVENT |
start_datetime, timezone, summary |
| Update event |
GOOGLECALENDAR_PATCH_EVENT |
calendar_id, event_id, fields to update |
| Delete event |
GOOGLECALENDAR_DELETE_EVENT |
calendar_id, event_id |
| Search events |
GOOGLECALENDAR_FIND_EVENT |
query, timeMin, timeMax |
| List events |
GOOGLECALENDAR_EVENTS_LIST |
calendarId, timeMin, timeMax |
| Recurring instances |
GOOGLECALENDAR_EVENTS_INSTANCES |
calendarId, eventId |
| Find free slots |
GOOGLECALENDAR_FIND_FREE_SLOTS |
items, time_min, time_max, timezone |
| Free/busy query |
GOOGLECALENDAR_FREE_BUSY_QUERY |
timeMin, timeMax, items |
| Remove attendee |
GOOGLECALENDAR_REMOVE_ATTENDEE |
event_id, attendee_email |
| Get current time |
GOOGLECALENDAR_GET_CURRENT_DATE_TIME |
timezone |
| Get calendar |
GOOGLECALENDAR_GET_CALENDAR |
calendar_id |
Powered by Composio
Source: davepoon/buildwithclaude → plugins/all-skills/skills/google-calendar-automation/SKILL.md
1---2name: google-calendar-automation-23description: Automate Google Calendar events, scheduling, availability checks, and attendee management via Rube MCP (Composio). Create events, find free slots, manage attendees, and list calendars programmatically.4---5
6
7# Google Calendar Automation via Rube MCP
8
9Automate Google Calendar workflows including event creation, scheduling, availability checks, attendee management, and calendar browsing through Composio's Google Calendar toolkit.
10
11**Toolkit docs**: [composio.dev/toolkits/googlecalendar](https://composio.dev/toolkits/googlecalendar)
12
13## Prerequisites
14
15- Rube MCP must be connected (RUBE_SEARCH_TOOLS available)
16- Active Google Calendar connection via `RUBE_MANAGE_CONNECTIONS` with toolkit `googlecalendar`
17- Always call `RUBE_SEARCH_TOOLS` first to get current tool schemas
18
19## Setup
20
21**Get Rube MCP**: Add `https://rube.app/mcp` as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
22
23
241. Verify Rube MCP is available by confirming `RUBE_SEARCH_TOOLS` responds
252. Call `RUBE_MANAGE_CONNECTIONS` with toolkit `googlecalendar`
263. If connection is not ACTIVE, follow the returned auth link to complete Google OAuth
274. Confirm connection status shows ACTIVE before running any workflows
28
29## Core Workflows
30
31### 1. Create and Manage Events
32
33**When to use**: User wants to create, update, or delete calendar events
34
35**Tool sequence**:
361. `GOOGLECALENDAR_LIST_CALENDARS` - Identify target calendar ID [Prerequisite]
372. `GOOGLECALENDAR_GET_CURRENT_DATE_TIME` - Get current time with proper timezone [Optional]
383. `GOOGLECALENDAR_FIND_FREE_SLOTS` - Check availability before booking [Optional]
394. `GOOGLECALENDAR_CREATE_EVENT` - Create the event [Required]
405. `GOOGLECALENDAR_PATCH_EVENT` - Update specific fields of an existing event [Alternative]
416. `GOOGLECALENDAR_UPDATE_EVENT` - Full replacement update of an event [Alternative]
427. `GOOGLECALENDAR_DELETE_EVENT` - Delete an event [Optional]
43
44**Key parameters**:
45- `calendar_id`: Use 'primary' for main calendar, or specific calendar ID
46- `start_datetime`: ISO 8601 format 'YYYY-MM-DDTHH:MM:SS' (NOT natural language)
47- `timezone`: IANA timezone name (e.g., 'America/New_York', NOT 'EST' or 'PST')
48- `event_duration_hour`: Hours (0+)
49- `event_duration_minutes`: Minutes (0-59 only; NEVER use 60+)
50- `summary`: Event title
51- `attendees`: Array of email addresses (NOT names)
52- `location`: Free-form text for event location
53
54**Pitfalls**:
55- `start_datetime` must be ISO 8601; natural language like 'tomorrow' is rejected
56- `event_duration_minutes` max is 59; use `event_duration_hour=1` instead of `event_duration_minutes=60`
57- `timezone` must be IANA identifier; abbreviations like 'EST', 'PST' are NOT valid
58- `attendees` only accepts email addresses, not names; resolve names first
59- Google Meet link creation defaults to true; may fail on personal Gmail accounts (graceful fallback)
60- Organizer is auto-added as attendee unless `exclude_organizer=true`
61
62### 2. List and Search Events
63
64**When to use**: User wants to find or browse events on their calendar
65
66**Tool sequence**:
671. `GOOGLECALENDAR_LIST_CALENDARS` - Get available calendars [Prerequisite]
682. `GOOGLECALENDAR_FIND_EVENT` - Search by title/keyword with time bounds [Required]
693. `GOOGLECALENDAR_EVENTS_LIST` - List events in a time range [Alternative]
704. `GOOGLECALENDAR_EVENTS_INSTANCES` - List instances of a recurring event [Optional]
71
72**Key parameters**:
73- `query` / `q`: Free-text search (matches summary, description, location, attendees)
74- `timeMin`: Lower bound (RFC3339 with timezone offset, e.g., '2024-01-01T00:00:00-08:00')
75- `timeMax`: Upper bound (RFC3339 with timezone offset)
76- `singleEvents`: true to expand recurring events into instances
77- `orderBy`: 'startTime' (requires singleEvents=true) or 'updated'
78- `maxResults`: Results per page (max 2500)
79
80**Pitfalls**:
81- **Timezone warning**: UTC timestamps (ending in 'Z') don't align with local dates; use local timezone offsets instead
82- Example: '2026-01-19T00:00:00Z' covers 2026-01-18 4pm to 2026-01-19 4pm in PST
83- Omitting `timeMin`/`timeMax` scans the full calendar and can be slow
84- `pageToken` in response means more results; paginate until absent
85- `orderBy='startTime'` requires `singleEvents=true`
86
87### 3. Manage Attendees and Invitations
88
89**When to use**: User wants to add, remove, or update event attendees
90
91**Tool sequence**:
921. `GOOGLECALENDAR_FIND_EVENT` or `GOOGLECALENDAR_EVENTS_LIST` - Find the event [Prerequisite]
932. `GOOGLECALENDAR_PATCH_EVENT` - Add attendees (replaces entire attendees list) [Required]
943. `GOOGLECALENDAR_REMOVE_ATTENDEE` - Remove a specific attendee by email [Required]
95
96**Key parameters**:
97- `event_id`: Unique event identifier (opaque string, NOT the event title)
98- `attendees`: Full list of attendee emails (PATCH replaces entire list)
99- `attendee_email`: Email to remove
100- `send_updates`: 'all', 'externalOnly', or 'none'
101
102**Pitfalls**:
103- `event_id` is a technical identifier, NOT the event title; always search first to get the ID
104- `PATCH_EVENT` attendees field replaces the entire list; include existing attendees to avoid removing them
105- Attendee names cannot be resolved; always use email addresses
106- Use `GMAIL_SEARCH_PEOPLE` to resolve names to emails before managing attendees
107
108### 4. Check Availability and Free/Busy Status
109
110**When to use**: User wants to find available time slots or check busy periods
111
112**Tool sequence**:
1131. `GOOGLECALENDAR_LIST_CALENDARS` - Identify calendars to check [Prerequisite]
1142. `GOOGLECALENDAR_GET_CURRENT_DATE_TIME` - Get current time with timezone [Optional]
1153. `GOOGLECALENDAR_FIND_FREE_SLOTS` - Find free intervals across calendars [Required]
1164. `GOOGLECALENDAR_FREE_BUSY_QUERY` - Get raw busy periods for computing gaps [Fallback]
1175. `GOOGLECALENDAR_CREATE_EVENT` - Book a confirmed slot [Required]
118
119**Key parameters**:
120- `items`: List of calendar IDs to check (e.g., ['primary'])
121- `time_min`/`time_max`: Query interval (defaults to current day if omitted)
122- `timezone`: IANA timezone for interpreting naive timestamps
123- `calendarExpansionMax`: Max calendars (1-50)
124- `groupExpansionMax`: Max members per group (1-100)
125
126**Pitfalls**:
127- Maximum span ~90 days per Google Calendar freeBusy API limit
128- Very long ranges or inaccessible calendars yield empty/invalid results
129- Only calendars with at least freeBusyReader access are visible
130- Free slots responses may normalize to UTC ('Z'); check offsets
131- `GOOGLECALENDAR_FREE_BUSY_QUERY` requires RFC3339 timestamps with timezone
132
133## Common Patterns
134
135### ID Resolution
136- **Calendar name -> calendar_id**: `GOOGLECALENDAR_LIST_CALENDARS` to enumerate all calendars
137- **Event title -> event_id**: `GOOGLECALENDAR_FIND_EVENT` or `GOOGLECALENDAR_EVENTS_LIST`
138- **Attendee name -> email**: `GMAIL_SEARCH_PEOPLE`
139
140### Timezone Handling
141- Always use IANA timezone identifiers (e.g., 'America/Los_Angeles')
142- Use `GOOGLECALENDAR_GET_CURRENT_DATE_TIME` to get current time in user's timezone
143- When querying events for a local date, use timestamps with local offset, NOT UTC
144- Example: '2026-01-19T00:00:00-08:00' for PST, NOT '2026-01-19T00:00:00Z'
145
146### Pagination
147- `GOOGLECALENDAR_EVENTS_LIST` returns `nextPageToken`; iterate until absent
148- `GOOGLECALENDAR_LIST_CALENDARS` also paginates; use `page_token`
149
150## Known Pitfalls
151
152- **Natural language dates**: NOT supported; all dates must be ISO 8601 or RFC3339
153- **Timezone mismatch**: UTC timestamps don't align with local dates for filtering
154- **Duration limits**: `event_duration_minutes` max 59; use hours for longer durations
155- **IANA timezones only**: 'EST', 'PST', etc. are NOT valid; use 'America/New_York'
156- **Event IDs are opaque**: Always search to get event_id; never guess or construct
157- **Attendees as emails**: Names cannot be used; resolve with GMAIL_SEARCH_PEOPLE
158- **PATCH replaces attendees**: Include all desired attendees in the array, not just new ones
159- **Conference limitations**: Google Meet may fail on personal accounts (graceful fallback)
160- **Rate limits**: High-volume searches can trigger 403/429; throttle between calls
161
162## Quick Reference
163
164| Task | Tool Slug | Key Params |
165|------|-----------|------------|
166| List calendars | `GOOGLECALENDAR_LIST_CALENDARS` | `max_results` |
167| Create event | `GOOGLECALENDAR_CREATE_EVENT` | `start_datetime`, `timezone`, `summary` |
168| Update event | `GOOGLECALENDAR_PATCH_EVENT` | `calendar_id`, `event_id`, fields to update |
169| Delete event | `GOOGLECALENDAR_DELETE_EVENT` | `calendar_id`, `event_id` |
170| Search events | `GOOGLECALENDAR_FIND_EVENT` | `query`, `timeMin`, `timeMax` |
171| List events | `GOOGLECALENDAR_EVENTS_LIST` | `calendarId`, `timeMin`, `timeMax` |
172| Recurring instances | `GOOGLECALENDAR_EVENTS_INSTANCES` | `calendarId`, `eventId` |
173| Find free slots | `GOOGLECALENDAR_FIND_FREE_SLOTS` | `items`, `time_min`, `time_max`, `timezone` |
174| Free/busy query | `GOOGLECALENDAR_FREE_BUSY_QUERY` | `timeMin`, `timeMax`, `items` |
175| Remove attendee | `GOOGLECALENDAR_REMOVE_ATTENDEE` | `event_id`, `attendee_email` |
176| Get current time | `GOOGLECALENDAR_GET_CURRENT_DATE_TIME` | `timezone` |
177| Get calendar | `GOOGLECALENDAR_GET_CALENDAR` | `calendar_id` |
178
179---
180*Powered by [Composio](https://composio.dev)*
181
182---
183
184**Source:** [`davepoon/buildwithclaude`](https://github.com/davepoon/buildwithclaude) → `plugins/all-skills/skills/google-calendar-automation/SKILL.md`