Connects Claude to the Google Calendar API with full OAuth proxy support, letting you list, create, update, and delete events without storing credentials server-side. Handles the complete calendar workflow: RSVP to invites, find free/busy times, manage recurring events, control calendar sharing via ACLs, and even subscribe to shared calendars. The architecture is clever: it proxies OAuth flows to Google while encoding your callback URL in state, so tokens stay between you and Google. Ships with 15+ tools covering calendars, events, availability queries, and color customization. Reach for this when you want Claude to schedule meetings, block focus time, or answer "what's free Thursday afternoon" without leaving the conversation.
Public tool metadata for what this MCP can expose to an agent.
GOOGLECALENDAR_ACL_PATCHUpdates an access control rule for a calendar using patch semantics (partial update). This allows modifying specific fields without affecting other properties. Note: Each patch request consumes three quota units. For domain-type ACL rules, if PATCH fails with 500 error, this a...5 paramsUpdates an access control rule for a calendar using patch semantics (partial update). This allows modifying specific fields without affecting other properties. Note: Each patch request consumes three quota units. For domain-type ACL rules, if PATCH fails with 500 error, this a...
rolestringscopevaluerule_idstringcalendar_idstringsend_notificationsbooleanGOOGLECALENDAR_CALENDAR_LIST_INSERTInserts an existing calendar into the user's calendar list.10 paramsInserts an existing calendar into the user's calendar list.
idstringhiddenbooleancolor_idstringselectedbooleanbackground_colorstringcolor_rgb_formatbooleanforeground_colorstringsummary_overridestringdefault_remindersvaluenotification_settingsvalueGOOGLECALENDAR_CALENDAR_LIST_UPDATEUpdates an existing entry on the user\'s calendar list.10 paramsUpdates an existing entry on the user\'s calendar list.
hiddenbooleancolorIdstringselectedbooleancalendar_idstringcolorRgbFormatbooleanbackgroundColorstringforegroundColorstringsummaryOverridestringdefaultRemindersvaluenotificationSettingsvalueGOOGLECALENDAR_CALENDARS_DELETEDeletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.1 paramsDeletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.
calendar_idstringGOOGLECALENDAR_CALENDARS_UPDATEUpdates metadata for a calendar.5 paramsUpdates metadata for a calendar.
summarystringlocationstringtimeZonestringcalendarIdstringdescriptionstringGOOGLECALENDAR_CLEAR_CALENDARClears a primary calendar. This operation deletes all events associated with the primary calendar of an account.1 paramsClears a primary calendar. This operation deletes all events associated with the primary calendar of an account.
calendar_idstringGOOGLECALENDAR_CREATE_EVENTCreate a Google Calendar event using `start_datetime` plus `event_duration_hour` and `event_duration_minutes` fields to derive the end time. Requires calendar write access. The organizer is added as an attendee unless `exclude_organizer` is True. Example request to create even...23 paramsCreate a Google Calendar event using `start_datetime` plus `event_duration_hour` and `event_duration_minutes` fields to derive the end time. Requires calendar write access. The organizer is added as an attendee unless `exclude_organizer` is True. Example request to create even...
summarystringlocationstringtimezonestringattendeesvalueeventTypestringbirthday · default · focusTime · outOfOffice · workingLocationdefault: defaultrecurrencevaluevisibilitystringdefault · public · private · confidentialdefault: defaultcalendar_idstringdescriptionstringsend_updatesbooleantransparencystringopaque · transparentdefault: opaquestart_datetimestringexclude_organizerbooleanguests_can_modifybooleanbirthdayPropertiesvaluecreate_meeting_roombooleanevent_duration_hourintegerfocusTimePropertiesvalueguestsCanInviteOthersbooleanoutOfOfficePropertiesvalueevent_duration_minutesintegerguestsCanSeeOtherGuestsbooleanworkingLocationPropertiesvalueGOOGLECALENDAR_DELETE_EVENTDeletes a specified event by `event_id` from a Google Calendar (`calendar_id`); this action is idempotent and raises a 404 error if the event is not found.2 paramsDeletes a specified event by `event_id` from a Google Calendar (`calendar_id`); this action is idempotent and raises a 404 error if the event is not found.
event_idstringcalendar_idstringGOOGLECALENDAR_DUPLICATE_CALENDARCreates a new, empty Google Calendar with the specified title (summary).1 paramsCreates a new, empty Google Calendar with the specified title (summary).
summarystringGOOGLECALENDAR_EVENTS_INSTANCESReturns instances of the specified recurring event.10 paramsReturns instances of the specified recurring event.
eventIdstringtimeMaxstringtimeMinstringtimeZonestringpageTokenstringcalendarIdstringmaxResultsvalueshowDeletedbooleanmaxAttendeesvalueoriginalStartstringGOOGLECALENDAR_EVENTS_LISTReturns events on the specified calendar.19 paramsReturns events on the specified calendar.
qstringiCalUIDstringorderBystringtimeMaxstringtimeMinstringtimeZonestringpageTokenstringsyncTokenstringcalendarIdstringeventTypesstringmaxResultsvalueupdatedMinstringshowDeletedbooleanmaxAttendeesvaluesingleEventsbooleanalwaysIncludeEmailbooleanshowHiddenInvitationsbooleansharedExtendedPropertystringprivateExtendedPropertystringGOOGLECALENDAR_EVENTS_MOVEMoves an event to another calendar, i.e., changes an event's organizer.4 paramsMoves an event to another calendar, i.e., changes an event's organizer.
event_idstringcalendar_idstringdestinationstringsend_updatesvalueGOOGLECALENDAR_EVENTS_WATCHWatch for changes to Events resources.7 paramsWatch for changes to Events resources.
idstringtypestringtokenstringparamsvalueaddressstringpayloadbooleancalendarIdstringGOOGLECALENDAR_FIND_EVENTFinds events in a specified Google Calendar using text query, time ranges (event start/end, last modification), and event types; ensure `timeMin` is not chronologically after `timeMax` if both are provided.11 paramsFinds events in a specified Google Calendar using text query, time ranges (event start/end, last modification), and event types; ensure `timeMin` is not chronologically after `timeMax` if both are provided.
querystringtimeMaxstringtimeMinstringorder_bystringpage_tokenstringcalendar_idstringevent_typesarraymax_resultsintegerupdated_minstringshow_deletedbooleansingle_eventsbooleanGOOGLECALENDAR_FIND_FREE_SLOTSFinds both free and busy time slots in Google Calendars for specified calendars within a defined time range (defaults to the current day UTC if `time_min`/`time_max` are omitted). Returns busy intervals enriched with event details and calculates free slots by finding gaps betw...6 paramsFinds both free and busy time slots in Google Calendars for specified calendars within a defined time range (defaults to the current day UTC if `time_min`/`time_max` are omitted). Returns busy intervals enriched with event details and calculates free slots by finding gaps betw...
itemsarraytime_maxstringtime_minstringtimezonestringgroup_expansion_maxintegercalendar_expansion_maxintegerGOOGLECALENDAR_FREE_BUSY_QUERYReturns free/busy information for a set of calendars.6 paramsReturns free/busy information for a set of calendars.
itemsarraytimeMaxstringtimeMinstringtimeZonestringgroupExpansionMaxvaluecalendarExpansionMaxvalueGOOGLECALENDAR_GET_CALENDARRetrieves a specific Google Calendar, identified by `calendar_id`, to which the authenticated user has access.1 paramsRetrieves a specific Google Calendar, identified by `calendar_id`, to which the authenticated user has access.
calendar_idstringGOOGLECALENDAR_GET_CURRENT_DATE_TIMEGets the current date and time, allowing for a specific timezone offset.1 paramsGets the current date and time, allowing for a specific timezone offset.
timezonenumberGOOGLECALENDAR_LIST_ACL_RULESRetrieves the list of access control rules (ACLs) for a specified calendar, providing the necessary 'rule_id' values required for updating specific ACL rules.5 paramsRetrieves the list of access control rules (ACLs) for a specified calendar, providing the necessary 'rule_id' values required for updating specific ACL rules.
page_tokenstringsync_tokenstringcalendar_idstringmax_resultsvalueshow_deletedbooleanGOOGLECALENDAR_LIST_CALENDARSRetrieves a paginated list of calendars from the user's calendar list, with optional filtering and sync capabilities.6 paramsRetrieves a paginated list of calendars from the user's calendar list, with optional filtering and sync capabilities.
pageTokenstringsyncTokenstringmaxResultsintegershowHiddenbooleanshowDeletedbooleanminAccessRolevalueGOOGLECALENDAR_PATCH_CALENDARPartially updates (PATCHes) an existing Google Calendar, modifying only the fields provided; `summary` is mandatory and cannot be an empty string, and an empty string for `description` or `location` clears them.5 paramsPartially updates (PATCHes) an existing Google Calendar, modifying only the fields provided; `summary` is mandatory and cannot be an empty string, and an empty string for `description` or `location` clears them.
summarystringlocationstringtimezonestringcalendar_idstringdescriptionstringGOOGLECALENDAR_PATCH_EVENTUpdate specified fields of an existing event in a Google Calendar using patch semantics (array fields like `attendees` are fully replaced if provided); ensure the `calendar_id` and `event_id` are valid and the user has write access to the calendar.14 paramsUpdate specified fields of an existing event in a Google Calendar using patch semantics (array fields like `attendees` are fully replaced if provided); ensure the `calendar_id` and `event_id` are valid and the user has write access to the calendar.
summarystringend_timestringevent_idstringlocationstringtimezonestringattendeesvaluestart_timestringcalendar_idstringdescriptionstringsend_updatesstringmax_attendeesvaluersvp_responsestringsupports_attachmentsbooleanconference_data_versionvalueGOOGLECALENDAR_QUICK_ADDParses natural language text to quickly create a basic Google Calendar event with its title, date, and time, suitable for simple scheduling; does not support direct attendee addition or recurring events, and `calendar_id` must be valid if not 'primary'.3 paramsParses natural language text to quickly create a basic Google Calendar event with its title, date, and time, suitable for simple scheduling; does not support direct attendee addition or recurring events, and `calendar_id` must be valid if not 'primary'.
textstringcalendar_idstringsend_updatesstringall · externalOnly · nonedefault: noneGOOGLECALENDAR_REMOVE_ATTENDEERemoves an attendee from a specified event in a Google Calendar; the calendar and event must exist.3 paramsRemoves an attendee from a specified event in a Google Calendar; the calendar and event must exist.
event_idstringcalendar_idstringattendee_emailstringGOOGLECALENDAR_SETTINGS_LISTReturns all user settings for the authenticated user.3 paramsReturns all user settings for the authenticated user.
pageTokenstringsyncTokenstringmaxResultsvalueGOOGLECALENDAR_SETTINGS_WATCHWatch for changes to Settings resources.5 paramsWatch for changes to Settings resources.
idstringtypestringtokenstringparamsvalueaddressstringGOOGLECALENDAR_SYNC_EVENTSSynchronizes Google Calendar events, performing a full sync if no `sync_token` is provided or if a 410 GONE error (due to an expired token) necessitates it, otherwise performs an incremental sync for events changed since the `sync_token` was issued.6 paramsSynchronizes Google Calendar events, performing a full sync if no `sync_token` is provided or if a 410 GONE error (due to an expired token) necessitates it, otherwise performs an incremental sync for events changed since the `sync_token` was issued.
pageTokenstringsync_tokenstringcalendar_idstringevent_typesvaluemax_resultsvaluesingle_eventsbooleanGOOGLECALENDAR_UPDATE_ACL_RULEUpdates an access control rule for the specified calendar.4 paramsUpdates an access control rule for the specified calendar.
rolestringrule_idstringcalendar_idstringsend_notificationsbooleanGOOGLECALENDAR_UPDATE_EVENTUpdates an existing event by `event_id` in a Google Calendar; this is a full PUT replacement, so provide all desired fields as unspecified ones may be cleared or reset.23 paramsUpdates an existing event by `event_id` in a Google Calendar; this is a full PUT replacement, so provide all desired fields as unspecified ones may be cleared or reset.
summarystringevent_idstringlocationstringtimezonestringattendeesvalueeventTypestringbirthday · default · focusTime · outOfOffice · workingLocationdefault: defaultrecurrencevaluevisibilitystringdefault · public · private · confidentialdefault: defaultcalendar_idstringdescriptionstringsend_updatesbooleantransparencystringopaque · transparentdefault: opaquestart_datetimestringguests_can_modifybooleanbirthdayPropertiesvaluecreate_meeting_roombooleanevent_duration_hourintegerfocusTimePropertiesvalueguestsCanInviteOthersbooleanoutOfOfficePropertiesvalueevent_duration_minutesintegerguestsCanSeeOtherGuestsbooleanworkingLocationPropertiesvalueMCP server for Google Calendar - list, create, update, and manage calendar events.
Schedule meetings: "Set up a 30-min sync with Sarah next week" → finds a free slot, creates the event with a Meet link, and sends the invite.
RSVP to invites: "Accept the team offsite but decline the vendor demo" → responds to pending invitations automatically.
Find availability: "When am I free this Thursday afternoon?" → queries your calendar and returns open slots.
Reschedule events: "Move my 1:1 with Alex to Friday at 2pm" → updates the event and notifies attendees.
Daily briefing: "What's on my calendar today?" → lists all events with times, locations, and attendees.
Block focus time: "Block 2 hours tomorrow morning for deep work" → creates a calendar event to protect your time.
(These are just examples - any workflow that needs calendar access can use this.)
http://localhost:3000/callback to Authorized redirect URIsGOOGLE_CLIENT_ID='your-client-id' \
GOOGLE_CLIENT_SECRET='your-client-secret' \
MCP_TRANSPORT=http \
npm start
The server runs on http://localhost:3000 by default. Change with PORT=3001.
claude mcp add --transport http google-cal-mcp http://localhost:3000/mcp
This server acts as an OAuth proxy to Google:
graph LR
A[MCP client] <--> B[google-cal-mcp] <--> C[Google OAuth/API]
/.well-known/oauth-authorization-server/register returns the Google OAuth client credentials/authorize redirects to Google, encoding the client's callback URL in state/callback receives the code from Google and forwards to the client's callback/token proxies token requests to Google, injecting client credentials/mcp handles MCP requests, using the bearer token to call Calendar APIThe server holds no tokens or state - it just proxies OAuth to Google.
| Tool | Description |
|---|---|
| Calendars | |
calendars_list | List all calendars the user has access to |
calendarlist_insert | Subscribe to a shared calendar |
calendarlist_update | Update calendar settings (color, visibility, reminders) |
calendarlist_delete | Unsubscribe from a calendar |
| Events | |
events_list | List events in a time range with search/filter |
event_get | Get details of a specific event |
event_create | Create a new event with attendees and Meet link |
event_update | Update an existing event |
event_delete | Delete an event |
event_respond | RSVP to an invitation (accept/decline/tentative) |
event_move | Move event to a different calendar |
event_instances | Get instances of a recurring event |
| Availability | |
freebusy_query | Find free/busy times for scheduling |
| Sharing | |
acl_list | List who has access to a calendar |
| Colors | |
colors_get | Get available color palette for calendars/events |
calendar - Full access to calendarscalendar.events - Read/write eventsPull requests are welcomed on GitHub! To get started:
npm installnpm run test to run testsnpm run buildVersions follow the semantic versioning spec.
To release:
npm version <major | minor | patch> to bump the versiongit push --follow-tags to push with tagsGOOGLE_ACCESS_TOKEN*secretGoogle OAuth access token with Calendar scopes.
MCP_TRANSPORT*Transport type.
GOOGLE_CLIENT_ID*Google OAuth client ID.
GOOGLE_CLIENT_SECRET*secretGoogle OAuth client secret.
gongrzhe/office-powerpoint-mcp-server
gongrzhe/office-word-mcp-server
io.github.mindstone/mcp-server-office
greirson/mcp-todoist
henilcalagiya/mcp-apple-notes
ankimcp/anki-mcp-server-addon