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.
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.readonlylist calendars and read eventscalendar.eventscreate and modify eventscalendarfull 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.
Works alongside
All services: Gmail MCP Google Drive MCP Google Calendar MCP Google Docs MCP Google Sheets MCP Google Slides MCP Google Forms MCP Google Tasks MCP Google Contacts MCP Google Chat MCP Google Custom Search MCP Google Apps Script MCP