Create an event
create_eventCreate Google Calendar events with times, attendees, reminders, recurrence, and Google Meet; avoid conflicts by checking free/busy slots first.
Instructions
Creates an event and returns it (id, htmlLink, start/end, attendees, hangoutLink when add_meet). Times: EITHER start_date_time + end_date_time (RFC3339; add time_zone for recurring events) OR start_date + end_date for all-day (end_date is EXCLUSIVE — the day after the last day). recurrence makes it a recurring series. attendees invites guests — but the API sends invitation emails ONLY with send_updates=all (the default notifies nobody). add_meet attaches a Google Meet link (may come back status=pending — re-run get_event for the final URL). This is a plain calendar write: it does not check for conflicts — call query_free_busy first to find a free slot. Never blindly re-send after a timeout or 5xx: the event may already exist — check with list_events first, or you will create a duplicate and re-invite everyone.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | Event title. | |
| add_meet | No | Attach a Google Meet conference. The returned conferenceData may be status=pending — re-run get_event for the final Meet link. | |
| color_id | No | Event color id ("1".."11"; the palette is fixed by Google). | |
| end_date | No | All-day event end date, EXCLUSIVE — the day after the last day (a one-day event on the 5th ends on the 6th). | |
| location | No | Free-form location, e.g. a room name or address. | |
| attendees | No | Guest list. On update this REPLACES the whole list — fetch the event first and send the complete new list. Invitation emails go out only with send_updates=all. | |
| reminders | No | Custom reminders (max 5). Setting this turns default reminders off for the event. | |
| time_zone | No | IANA time zone for start/end (e.g. "Europe/Berlin"). REQUIRED for recurring events; otherwise optional when the RFC3339 offsets already say everything. | |
| recurrence | No | RRULE/RDATE/EXRULE/EXDATE lines (RFC 5545) making the event recurring, e.g. ["RRULE:FREQ=WEEKLY;BYDAY=MO,WE"]. Requires the timed pair plus time_zone. | |
| start_date | No | All-day event start date (YYYY-MM-DD). Pair with end_date. | |
| visibility | No | Who can see event details on a shared calendar. | |
| calendar_id | Yes | The calendar id from list_calendars, or "primary" for the authenticated user's main calendar. | |
| description | No | Event description (plain text or simple HTML). | |
| send_updates | No | Who receives an email about this change: all guests, only guests outside your organization, or nobody. Defaults to none — attendees are NOT notified unless you pass all. | |
| transparency | No | opaque = the event blocks time in free/busy (default); transparent = it does not (shows as free). | |
| end_date_time | No | Timed event end, RFC3339. Pair with start_date_time. | |
| start_date_time | No | Timed event start, RFC3339 (e.g. 2026-09-01T10:00:00+02:00 or ...Z). Pair with end_date_time. | |
| guests_can_modify | No | Whether guests may edit the event. | |
| use_default_reminders | No | Use the calendar's default reminders (ignored when reminders[] is given). | |
| guests_can_invite_others | No | Whether guests may invite more people. | |
| guests_can_see_other_guests | No | Whether guests can see the guest list. |