Google Calendar MCP Server

Consolidated event management plus availability and working-status control.

Calendar keeps its core deliberately lean. Three tools — list_calendars, get_events, and manage_event — cover the entire event lifecycle, because every extra tool definition costs context window and gives the model another wrong option to pick.

The Extended tier adds the scheduling-assistant layer: query_freebusy checks availability across calendars before proposing a time, create_calendar spins up secondary calendars, and manage_out_of_office and manage_focus_time control the working-status events that auto-decline conflicting meetings.

What you can ask

  • “What does my week look like? Flag anything that conflicts with the Thursday offsite”
  • “Create a 30-minute design sync every Tuesday at 10am and invite the team”
  • “Find an hour next week when the whole team is free, then block it as Focus Time”

All 7 Google Calendar MCP tools

Expand any tool for its full parameter list. Tiers control how many tools the server registers: start lean with --tool-tier core and step up to extended or complete when a workflow needs more.

list_calendars Core Lists calendars accessible to the authenticated user. 2
ParameterDescription
max_results Maximum calendars to return in one page.
page_token Token for the next page, taken from a previous response. Responses include a next page token whenever more calendars remain.
get_events Core Retrieves events for a calendar and time range. 6
ParameterDescription
calendar_id Defaults to `primary`.
time_min RFC3339 or date.
time_max RFC3339 or date.
max_results Maximum events to return.
single_events Whether to expand recurring series into individual instances. Defaults to true. Set to false to retrieve recurring master events and their RFC 5545 recurrence rules.
page_token Token for the next page, taken from a previous response. With `single_events` true, also pass the response's pagination `time_min` as `time_min` (even if you omitted it on the first call) and keep every other query parameter unchanged. Ignored when `event_id` is set.
manage_event Core Consolidated create, update, and delete event operations. 5
ParameterDescription
action required`create`, `update`, or `delete`.
event_id Required for `update` and `delete`.
start_timezone IANA timezone for the start boundary, overriding the shared `timezone`.
end_timezone IANA timezone for the end boundary, overriding the shared `timezone`. Use separate boundary zones for events such as flights whose departure and arrival have different local times.
attachments Drive file IDs or share URLs to attach. On `update` the list replaces the event's existing attachments rather than adding to them, so pass the full set you want to keep.
create_calendar Extended Create a new secondary Google Calendar. 3
ParameterDescription
summary requiredName for the new calendar.
description Optional calendar description.
timezone IANA timezone (e.g., "America/New_York").
query_freebusy Extended Query free/busy information across one or more calendars. 5
ParameterDescription
time_min requiredStart of the window (RFC3339).
time_max requiredEnd of the window (RFC3339).
calendar_ids Calendar IDs to query. Defaults to `primary`.
group_expansion_max Maximum calendars to expand per group.
calendar_expansion_max Maximum calendars for which to return busy information.
manage_out_of_office Extended Create, list, update, or delete Out of Office events. 9
ParameterDescription
action required`create`, `list`, `update`, or `delete`.
start_time Start time (required for `create`).
end_time End time (required for `create`).
summary Event title.
auto_decline_mode How conflicting meetings are declined.
decline_message Message sent with auto-declines.
recurrence RRULE strings for recurring events.
event_id Required for `update` and `delete`.
calendar_id Defaults to `primary`.
manage_focus_time Extended Create, list, update, or delete Focus Time events. 10
ParameterDescription
action required`create`, `list`, `update`, or `delete`.
start_time Start time (required for `create`).
end_time End time (required for `create`).
summary Event title.
auto_decline_mode How conflicting meetings are declined.
decline_message Message sent with auto-declines.
chat_status Chat availability during focus time (e.g., "doNotDisturb").
recurrence RRULE strings for recurring events.
event_id Required for `update` and `delete`.
calendar_id Defaults to `primary`.

Every service in one reference: full API documentation →

OAuth scopes

The server requests only the scopes for the services you enable. In read-only mode it requests just the readonly variants and skips registering write tools entirely.

  • calendar.readonly list calendars and read events
  • calendar.events create and modify events
  • calendar full calendar access (implies both)

Google Calendar MCP questions

Why does the Core tier only have three Calendar tools?
Deliberate design. Every registered tool consumes context window and adds a decision point for the model. Consolidating create/update/delete into manage_event keeps the core schema small without dropping any capability; availability queries and working-status events live in the Extended tier for agents that need them.
Can an assistant check availability before proposing a meeting time?
Yes — query_freebusy returns busy intervals for any set of calendars over a time window, so a scheduling agent can find a genuinely open slot across the whole team instead of guessing from one person’s calendar.
Can it see calendars shared with me, not just my own?
Yes. list_calendars returns every calendar the authenticated account can access, including shared team calendars, and get_events works against any of them by ID.
How do time ranges work for event queries?
get_events takes an explicit time window, so an assistant can ask for "this week", "next Tuesday 9–5", or a whole quarter and only pull the events that matter rather than paging through everything.