CCM
/MCP
SkillsMCPMarketplacesDigestToolsAdvertise

This week in Claude

Every Monday: Claude Code, Agent SDK, MCP, and the Anthropic platform moves worth your time.

Skills by Category
Frontend DevelopmentBackend & APIsTesting & QASecurityDevOps & CI/CDGit & Pull RequestsDocumentationCode Review & QualityAI & Agent BuildingSkill Development
MCP Servers by Category
Sales & MarketingWeb & Browser AutomationDatabasesAI & LLM ToolsCloud & InfrastructureCommunication & MessagingDeveloper ToolsDesign & CreativeDocuments & KnowledgeSearch & Web Crawling
Marketplaces by Category
AI Agents & OrchestrationLLM IntegrationDevelopment ToolsFrontend & UIBackend & APIsDatabasesTesting & Code QualityDevOps & CloudSecurity & ComplianceGit & Version Control

Claude Code Marketplaces

Discover Claude Code plugins, extensions, and tools. Automatically updated directory of Anthropic Claude AI marketplaces with development tools, productivity plugins, and integrations.

Resources

  • Browse Skills
  • Browse MCP Servers
  • Browse Marketplaces
  • Skill index
  • MCP index
  • Marketplace index
  • Plugins Reference

Community

  • About
  • Tools
  • Feedback
  • Privacy Policy
  • Advertise

Built for the Claude Code community with Claude Code by mertbuilds.com

Independent project, not affiliated with Anthropic
domdomegg avatar

Google Calendar

domdomegg/google-calendar-mcp
129 toolsauthSTDIO, HTTPregistry active
Summary

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.

CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
inference shell
inference shell
create and run specialised agents in minutes
build now →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
inference shell
inference shell
create and run specialised agents in minutes
build now →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →

Tools

Public tool metadata for what this MCP can expose to an agent.

29 tools
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 params

Updates 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...

Parameters* required
calendar_idstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Examples: "...
rolestring
The role assigned to the scope. Possible values are: "none" - Provides no access; "freeBusyReader" - Provides read access to free/busy information; "reader" - Provides read access to the calendar (...
rule_idstring
ACL rule identifier. This is typically in the format 'type:value', such as 'user:email@example.com' or 'group:group@example.com'. Examples: "user:test.user@example.com" "group:team@example.com"...
scopevalue
The extent to which calendar access is granted by this ACL rule. Optional for patch operations.
send_notificationsboolean
Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True. Examples: true false
GOOGLECALENDAR_CALENDAR_LIST_INSERTInserts an existing calendar into the user's calendar list.10 params

Inserts an existing calendar into the user's calendar list.

Parameters* required
background_colorstring
The background color of the calendar in the Web UI. (Hexadecimal color code) Example: "#000000"
color_idstring
The color of the calendar. This is an ID referring to an entry in the calendarCore color palette. Example: "1"
color_rgb_formatboolean
Whether to use the foregroundColor and backgroundColor fields to write the calendar colors (RGB). If this feature is used, the index-based colorId field will be set to the best matching option auto...
default_remindersvalue
The default reminders that the authenticated user has for this calendar.
foreground_colorstring
The foreground color of the calendar in the Web UI. (Hexadecimal color code) Example: "#FFFFFF"
hiddenboolean
Whether the calendar has been hidden from the list. Default is False.
idstring
The identifier of the calendar to insert. Example: "examplecalendar@group.calendar.google.com"
notification_settingsvalue
The notifications that the authenticated user is receiving for this calendar.
selectedboolean
Whether the calendar is selected and visible in the calendar list. Default is True.
summary_overridestring
The summary that the authenticated user has set for this calendar.
GOOGLECALENDAR_CALENDAR_LIST_UPDATEUpdates an existing entry on the user\'s calendar list.10 params

Updates an existing entry on the user\'s calendar list.

Parameters* required
backgroundColorstring
Hex color for calendar background. Example: "#0088aa"
calendar_idstring
Calendar identifier. Must be an actual calendar ID (e.g., calendar email address like "examplecalendar@group.calendar.google.com"). The "primary" alias is not valid for calendarList.update - use th...
colorIdstring
ID for calendar color from colors endpoint. Example: "17"
colorRgbFormatboolean
Whether to use RGB for foreground/background colors. Examples: true false
defaultRemindersvalue
List of default reminders.
foregroundColorstring
Hex color for calendar foreground. Example: "#ffffff"
hiddenboolean
Whether calendar is hidden. Examples: true false
notificationSettingsvalue
Notification settings for the calendar.
selectedboolean
Whether calendar content shows in UI. Examples: true false
summaryOverridestring
User-set summary for the calendar. Example: "My Work Calendar"
GOOGLECALENDAR_CALENDARS_DELETEDeletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.1 params

Deletes a secondary calendar. Use calendars.clear for clearing all events on primary calendars.

Parameters* required
calendar_idstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Examples: "...
GOOGLECALENDAR_CALENDARS_UPDATEUpdates metadata for a calendar.5 params

Updates metadata for a calendar.

Parameters* required
calendarIdstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword.
descriptionstring
Description of the calendar. Optional.
locationstring
Geographic location of the calendar as free-form text. Optional.
summarystring
Title of the calendar.
timeZonestring
The time zone of the calendar. (Formatted as an IANA Time Zone Database name, e.g. "Europe/Zurich".) Optional.
GOOGLECALENDAR_CLEAR_CALENDARClears a primary calendar. This operation deletes all events associated with the primary calendar of an account.1 params

Clears a primary calendar. This operation deletes all events associated with the primary calendar of an account.

Parameters* required
calendar_idstring
Calendar identifier. To retrieve calendar IDs call the `calendarList.list` method. If you want to access the primary calendar of the currently logged in user, use the "`primary`" keyword. Example:...
GOOGLECALENDAR_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 params

Create 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...

Parameters* required
attendeesvalue
List of attendee emails (strings).
birthdayPropertiesvalue
Properties for birthday events.
calendar_idstring
Target calendar: 'primary' for the user's main calendar, or the calendar's email address. Must be provided in snake_case format. Examples: "primary" "user@example.com" "abcdefghijklmnopqrstuv...default: primary
create_meeting_roomboolean
If true, a Google Meet link is created and added to the event. CRITICAL: As of 2024, this REQUIRES a paid Google Workspace account ($13+/month). Personal Gmail accounts will fail with 'Invalid conf...
descriptionstring
Description of the event. Can contain HTML. Optional. Must be omitted for 'birthday' event type.
eventTypestring
Type of the event, immutable post-creation. 'workingLocation' (REQUIRES Google Workspace Enterprise). Note: 'fromGmail' events cannot be created via API.one of birthday · default · focusTime · outOfOffice · workingLocationdefault: default
event_duration_hourinteger
Number of hours (0-24). Increase by 1 here rather than passing 60 in `event_duration_minutes`default: 0
event_duration_minutesinteger
Duration in minutes (0-59 ONLY). NEVER use 60+ minutes - use event_duration_hour=1 instead. Maximum value is 59. Combined duration (hours + minutes) must be greater than 0.default: 30
exclude_organizerboolean
If True, the organizer will NOT be added as an attendee. Default is False (organizer is included).default: false
focusTimePropertiesvalue
Properties for focusTime events. REQUIRES Google Workspace Enterprise account with Focus Time feature enabled.
guestsCanInviteOthersboolean
Whether attendees other than the organizer can invite others to the event.
guestsCanSeeOtherGuestsboolean
Whether attendees other than the organizer can see who the event's attendees are.
guests_can_modifyboolean
If True, guests can modify the event.default: false
locationstring
Geographic location of the event as free-form text.
outOfOfficePropertiesvalue
Properties for outOfOffice events.
recurrencevalue
List of RRULE, EXRULE, RDATE, EXDATE lines for recurring events. Supported frequencies: DAILY, WEEKLY, MONTHLY, YEARLY. For recurring events, start.timeZone and end.timeZone must be present. Provid...
send_updatesboolean
Defaults to True. Whether to send updates to the attendees.
start_datetimestring
Event start time in format YYYY-MM-DDTHH:MM:SS (no fractional seconds, no 'Z', no timezone offsets). Examples: '2025-01-16T13:00:00' or '2025-01-16T13:00'. Timezone info (Z, +, -) will be automatic...
summarystring
Summary (title) of the event.
timezonestring
IANA timezone name (e.g., 'America/New_York'). Required if datetime is naive. For recurring events, start and end must include a timeZone. If not provided, UTC is used. If datetime includes timezon...

+3 more parameters. See the server's own documentation for the full schema.

GOOGLECALENDAR_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 params

Deletes 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.

Parameters* required
calendar_idstring
Identifier of the Google Calendar (e.g., email address, specific ID, or 'primary' for the authenticated user's main calendar) from which the event will be deleted. Examples: "primary" "user@exa...default: primary
event_idstring
Unique identifier of the event to delete, typically obtained upon event creation.
GOOGLECALENDAR_DUPLICATE_CALENDARCreates a new, empty Google Calendar with the specified title (summary).1 params

Creates a new, empty Google Calendar with the specified title (summary).

Parameters* required
summarystring
Title for the new Google Calendar to be created. Required and must be a non-empty string. Examples: "Project Alpha Tasks" "Marketing Team Q4" "Personal Appointments"
GOOGLECALENDAR_EVENTS_INSTANCESReturns instances of the specified recurring event.10 params

Returns instances of the specified recurring event.

Parameters* required
calendarIdstring
Calendar identifier. To retrieve calendar IDs call the `calendarList.list` method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Examples:...
eventIdstring
Recurring event identifier. Example: "a1b2c3d4e5f6g7h8i9j0k1l2m3"
maxAttendeesvalue
The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional. Examples: 5 10
maxResultsvalue
Maximum number of events returned on one result page. By default the value is 250 events. The page size can never be larger than 2500 events. Optional. Examples: 100 250
originalStartstring
The original start time of the instance in the result. Optional. Example: "2024-07-15T10:00:00Z"
pageTokenstring
Token specifying which result page to return. Optional.
showDeletedboolean
Whether to include deleted events (with status equals "cancelled") in the result. Cancelled instances of recurring events will still be included if `singleEvents` is False. Optional. The default is...
timeMaxstring
Upper bound (exclusive) for an event's start time to filter by. Optional. The default is not to filter by start time. Must be an RFC3339 timestamp with mandatory time zone offset. Example: "2024-07...
timeMinstring
Lower bound (inclusive) for an event's end time to filter by. Optional. The default is not to filter by end time. Must be an RFC3339 timestamp with mandatory time zone offset. Example: "2024-07-01T...
timeZonestring
Time zone used in the response. Optional. The default is the time zone of the calendar. Examples: "America/Los_Angeles" "Europe/London"
GOOGLECALENDAR_EVENTS_LISTReturns events on the specified calendar.19 params

Returns events on the specified calendar.

Parameters* required
alwaysIncludeEmailboolean
Deprecated and ignored.
calendarIdstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Example: "pri...
eventTypesstring
Event types to return. Optional. This parameter can be repeated multiple times to return events of different types. If unset, returns all event types. Acceptable values are: "birthday", "default",...
iCalUIDstring
Specifies an event ID in the iCalendar format to be provided in the response. Optional. Use this if you want to search for an event by its iCalendar ID.
maxAttendeesvalue
The maximum number of attendees to include in the response. If there are more than the specified number of attendees, only the participant is returned. Optional. Must be >= 1 if provided.
maxResultsvalue
Maximum number of events returned on one result page. The number of events in the resulting page may be less than this value, or none at all, even if there are more events matching the query. Incom...
orderBystring
The order of the events returned in the result. Optional. The default is an unspecified, stable order. Acceptable values are: "startTime", "updated". When set to "startTime", singleEvents must be t...
pageTokenstring
Token specifying which result page to return. Optional.
privateExtendedPropertystring
Extended properties constraint specified as propertyName=value. Matches only private properties. This parameter might be repeated multiple times to return events that match all given constraints.
qstring
Free text search terms to find events that match these terms in various fields. Optional.
sharedExtendedPropertystring
Extended properties constraint specified as propertyName=value. Matches only shared properties. This parameter might be repeated multiple times to return events that match all given constraints.
showDeletedboolean
Include cancelled events (status="cancelled"). Optional; default is false. This surfaces cancelled (soft-deleted) events, not items in the Trash. When syncToken or updatedMin is used, deletions sin...
showHiddenInvitationsboolean
Whether to include hidden invitations in the result. Optional. The default is False. Hidden invitations are events where your attendee entry has responseStatus='needsAction' and attendees[].self==t...
singleEventsboolean
Whether to expand recurring events into instances and only return single one-off events and instances of recurring events. Optional. The default is False.
syncTokenstring
Token from nextSyncToken to return only entries changed since the last list. Cannot be combined with iCalUID, orderBy, privateExtendedProperty, q, sharedExtendedProperty, timeMin, timeMax, or updat...
timeMaxstring
Upper bound (exclusive) for an event's start time to filter by. Optional. If unset, no start-time upper bound is applied. Must be an RFC3339 timestamp with mandatory time zone offset (e.g., 2011-06...
timeMinstring
Lower bound (exclusive) for an event's end time to filter by. Optional. If unset, no end-time lower bound is applied. Must be an RFC3339 timestamp with mandatory time zone offset (e.g., 2011-06-03T...
timeZonestring
Time zone used in the response. Optional. Use an IANA time zone identifier (e.g., America/Los_Angeles). Defaults to the user's primary time zone. Offsets (e.g., '-03:00', 'UTC+0') and abbreviations...
updatedMinstring
Lower bound for an event's last modification time (RFC3339). When specified, entries deleted since this time are always included regardless of showDeleted. Optional.
GOOGLECALENDAR_EVENTS_MOVEMoves an event to another calendar, i.e., changes an event's organizer.4 params

Moves an event to another calendar, i.e., changes an event's organizer.

Parameters* required
calendar_idstring
Calendar identifier of the source calendar. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary"...
destinationstring
Calendar identifier of the destination calendar. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "pri...
event_idstring
Event identifier. To retrieve event identifiers call the events.list method. Example: "7cbh8j70fer2s71jgm1bmeb0f1"
send_updatesvalue
Guests who should receive notifications about the change of the event's organizer. Acceptable values are: "all": Notifications are sent to all guests. "externalOnly": Notifications are sent to non-...
GOOGLECALENDAR_EVENTS_WATCHWatch for changes to Events resources.7 params

Watch for changes to Events resources.

Parameters* required
addressstring
The address where notifications are delivered for this channel. Example: "https://example.com/notifications"
calendarIdstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Example: "pri...
idstring
A UUID or similar unique string that identifies this channel. Example: "01234567-89ab-cdef-0123456789ab"
paramsvalue
Additional parameters controlling delivery channel behavior. Optional.
payloadboolean
A Boolean value to indicate whether payload is wanted. Optional.
tokenstring
An arbitrary string delivered to the target address with each notification delivered over this channel. Optional. Example: "target=myApp-myCalendarChannelDest"
typestring
The type of delivery mechanism used for this channel. Example: "web_hook"default: web_hook
GOOGLECALENDAR_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 params

Finds 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.

Parameters* required
calendar_idstring
Identifier of the Google Calendar to query. Use 'primary' for the primary calendar of the authenticated user, an email address for a specific user's calendar, or a calendar ID for other calendars....default: primary
event_typesarray
Event types to include. Supported values: 'birthday', 'default', 'focusTime', 'outOfOffice', 'workingLocation'. Examples: "default" "focusTime" "outOfOffice" "birthday" "workingLocation"
max_resultsinteger
Maximum number of events per page (1-2500).default: 10
order_bystring
Order of events: 'startTime' (ascending by start time) or 'updated' (ascending by last modification time). Note: 'startTime' requires single_events=true. Use 'updated' if you need to include recurr...
page_tokenstring
Token from a previous response's `nextPageToken` to fetch the subsequent page of results.
querystring
Free-text search terms to find events. This query is matched against various event fields including summary, description, location, attendees' details (displayName, email), and organizer's details....
show_deletedboolean
Include events whose status is 'cancelled'. This surfaces cancelled/deleted events, not a separate 'trash' view. Behavior with recurring events: when single_events=true, only individual cancelled i...
single_eventsboolean
When true, recurring event series are expanded into their individual instances. When false, only the recurring master events are returned. Note: Ordering by 'startTime' requires singleEvents=true....default: true
timeMaxstring
Upper bound (exclusive) for an event's start time to filter by. Only events starting before this time are included. Accepts multiple formats: 1. RFC3339 timestamp (e.g., '2024-12-06T13:00:00Z') 2....
timeMinstring
Lower bound (exclusive) for an event's end time to filter by. Only events ending after this time are included. Accepts multiple formats: 1. RFC3339 timestamp (e.g., '2024-12-06T13:00:00Z') 2. Comma...
updated_minstring
Lower bound (exclusive) for an event's last modification time to filter by. Only events updated after this time are included. When specified, events deleted since this time are also included, regar...
GOOGLECALENDAR_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 params

Finds 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...

Parameters* required
calendar_expansion_maxinteger
Maximum calendars for which FreeBusy information is provided. Max allowed: 50.default: 50
group_expansion_maxinteger
Maximum calendar identifiers to return for a single group; exceeding this causes an error. Max allowed: 100.default: 100
itemsarray
List of calendar identifiers to query for free/busy information. Each item must be a valid calendar identifier: 'primary' for the user's main calendar, a user/calendar email (e.g., user@example.com...
time_maxstring
End datetime for the query interval. Accepts ISO, comma-separated, or simple datetime formats. If provided without an explicit timezone, it is interpreted in the specified `timezone`. Maximum span...
time_minstring
Start datetime for the query interval. Accepts ISO, comma-separated, or simple datetime formats. If provided without an explicit timezone, it is interpreted in the specified `timezone`. Maximum spa...
timezonestring
IANA timezone identifier (e.g., 'America/New_York', 'Europe/London'). Determines how naive `time_min`/`time_max` are interpreted and the timezone used in the response for `timeMin`, `timeMax`, busy...default: UTC
GOOGLECALENDAR_FREE_BUSY_QUERYReturns free/busy information for a set of calendars.6 params

Returns free/busy information for a set of calendars.

Parameters* required
calendarExpansionMaxvalue
Maximal number of calendars for which FreeBusy information is to be provided. Optional. Maximum value is 50.
groupExpansionMaxvalue
Maximal number of calendar identifiers to be provided for a single group. Optional. An error is returned for a group with more members than this value. Maximum value is 100.
itemsarray
List of calendars and/or groups to query.
timeMaxstring
The end of the interval for the query formatted as per RFC3339.
timeMinstring
The start of the interval for the query formatted as per RFC3339.
timeZonestring
Time zone used in the response. Optional. The default is UTC.
GOOGLECALENDAR_GET_CALENDARRetrieves a specific Google Calendar, identified by `calendar_id`, to which the authenticated user has access.1 params

Retrieves a specific Google Calendar, identified by `calendar_id`, to which the authenticated user has access.

Parameters* required
calendar_idstring
Identifier of the Google Calendar to retrieve. 'primary' (the default) represents the user's main calendar; other valid identifiers include the calendar's email address. Examples: "primary" "us...default: primary
GOOGLECALENDAR_GET_CURRENT_DATE_TIMEGets the current date and time, allowing for a specific timezone offset.1 params

Gets the current date and time, allowing for a specific timezone offset.

Parameters* required
timezonenumber
Timezone offset from UTC in hours. Use positive values for east of UTC, negative for west. Examples: Paris/Berlin: 1 (winter) or 2 (summer), London: 0 (winter) or 1 (summer), New York: -5 (winter)...default: 0
GOOGLECALENDAR_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 params

Retrieves the list of access control rules (ACLs) for a specified calendar, providing the necessary 'rule_id' values required for updating specific ACL rules.

Parameters* required
calendar_idstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Example: "pri...
max_resultsvalue
Maximum number of entries returned on one result page. Optional. The default is 100. Example: 10
page_tokenstring
Token specifying which result page to return. Optional. Example: " nextPageToken_value"
show_deletedboolean
Whether to include deleted ACLs in the result. Optional. The default is False. Example: false
sync_tokenstring
Token obtained from the nextSyncToken field returned on the last page of a previous list operation. It makes the result of this list operation contain only entries that have changed since then. Opt...
GOOGLECALENDAR_LIST_CALENDARSRetrieves a paginated list of calendars from the user's calendar list, with optional filtering and sync capabilities.6 params

Retrieves a paginated list of calendars from the user's calendar list, with optional filtering and sync capabilities.

Parameters* required
maxResultsinteger
Maximum number of calendars to return per page. Maximum allowed value is 250.default: 100
minAccessRolevalue
Minimum access role the user must have for the returned calendars. Examples: "freeBusyReader" "owner" "reader" "writer"
pageTokenstring
Token for retrieving a specific page of results from a previous list operation.
showDeletedboolean
Include calendar list entries deleted from the user's list. Deleted entries are returned with the 'deleted' field set to true. When using 'syncToken', deleted (and hidden) entries changed since the...default: false
showHiddenboolean
Include calendars hidden in the user interface. When using 'syncToken', hidden (and deleted) entries changed since the previous list are always included, and this parameter must not be set to false.default: false
syncTokenstring
Sync token from a previous list request's 'nextSyncToken' to retrieve only entries changed since the last sync. When provided, only 'syncToken' and optionally 'pageToken' are used; other filters ar...
GOOGLECALENDAR_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 params

Partially 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.

Parameters* required
calendar_idstring
Identifier of the Google Calendar to update; use 'primary' for the main calendar or a specific ID. Examples: "primary" "secondaryCalendarIdAbc..." "example@group.calendar.google.com"
descriptionstring
New description for the calendar.
locationstring
New geographic location of the calendar (e.g., 'Paris, France'). Examples: "Paris, France" "London"
summarystring
New title for the calendar; cannot be an empty string. Examples: "Team Meetings" "Project Alpha Milestones"
timezonestring
New IANA Time Zone Database name for the calendar (e.g., 'Europe/Zurich', 'America/New_York'). Examples: "Europe/Zurich" "America/New_York" "Asia/Tokyo"
GOOGLECALENDAR_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 params

Update 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.

Parameters* required
attendeesvalue
List of email addresses for attendees. Replaces existing attendees. Provide an empty list to remove all. Examples: ["user1@example.com","user2@example.com"] []
calendar_idstring
Identifier of the calendar. Use 'primary' for the primary calendar of the logged-in user. To find other calendar IDs, use the `calendarList.list` method. Must be provided in snake_case format. Exam...
conference_data_versionvalue
API client's conference data support version. Set to 1 to manage conference details (e.g., Google Meet links); 0 (default) ignores conference data. Examples: 0 1
descriptionstring
New description for the event; can include HTML. Example: "Weekly team sync meeting to discuss project updates."
end_timestring
New end time (RFC3339 timestamp, e.g., '2024-07-01T11:00:00-07:00'). Uses `timezone` if provided, otherwise UTC. For all-day events, use YYYY-MM-DD format (exclusive end date). Examples: "2024-07...
event_idstring
Identifier of the event to update. Must be provided in snake_case format. Example: "abc123xyz"
locationstring
New geographic location (physical address or virtual meeting link). Examples: "Conference Room B" "https://hangouts.google.com/foo"
max_attendeesvalue
Maximum attendees in response; does not affect invited count. If more, response includes organizer only. Must be positive. Examples: 10 100
rsvp_responsestring
RSVP response status for the authenticated user. Updates only the current user's response status without affecting other attendees. Possible values: 'needsAction', 'declined', 'tentative', 'accepte...
send_updatesstring
Whether to send update notifications to attendees: 'all', 'externalOnly', or 'none'. Uses default user behavior if unspecified. Examples: "all" "externalOnly" "none"
start_timestring
New start time (RFC3339 timestamp, e.g., '2024-07-01T10:00:00-07:00'). Uses `timezone` if provided, otherwise UTC. For all-day events, use YYYY-MM-DD format. Examples: "2024-07-01T10:00:00-07:00"...
summarystring
New title for the event. Example: "Updated Team Meeting"
supports_attachmentsboolean
Client application supports event attachments. Set to `True` if so. Examples: true false
timezonestring
IANA Time Zone Database name for start/end times (e.g., 'America/Los_Angeles'). Used if `start_time` and `end_time` are provided and not all-day dates; defaults to UTC if unset. Examples: "Americ...
GOOGLECALENDAR_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 params

Parses 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'.

Parameters* required
calendar_idstring
Identifier of the calendar for the event. Use 'primary' for the main calendar, or provide a specific calendar ID (e.g., email address). Examples: "primary" "user@example.com" "xxxxxxxxxxxxxxx...default: primary
send_updatesstring
Controls whether email notifications about the event creation are sent to attendees.one of all · externalOnly · nonedefault: none
textstring
Natural language input describing the event; Google Calendar parses this for event details like title, date, and time. Examples: "Appointment at Somewhere on June 3rd 10am-10:25am" "Dentist app...default:
GOOGLECALENDAR_REMOVE_ATTENDEERemoves an attendee from a specified event in a Google Calendar; the calendar and event must exist.3 params

Removes an attendee from a specified event in a Google Calendar; the calendar and event must exist.

Parameters* required
attendee_emailstring
Email address of the attendee to remove. Must match an attendee email present on the event. Example: "john@gmail.com"
calendar_idstring
Identifier of the Google Calendar to which the event belongs; 'primary' signifies the user's main calendar.default: primary
event_idstring
Unique identifier of the event.
GOOGLECALENDAR_SETTINGS_LISTReturns all user settings for the authenticated user.3 params

Returns all user settings for the authenticated user.

Parameters* required
maxResultsvalue
Maximum number of entries returned on one result page. By default the value is 100 entries. The page size can never be larger than 250 entries.
pageTokenstring
Token specifying which result page to return.
syncTokenstring
Token obtained from the nextSyncToken field returned on the last page of results from the previous list request. It makes the result of this list request contain only entries that have changed sinc...
GOOGLECALENDAR_SETTINGS_WATCHWatch for changes to Settings resources.5 params

Watch for changes to Settings resources.

Parameters* required
addressstring
The address where notifications are delivered for this channel. Example: "https://example.com/notifications"
idstring
A UUID or similar unique string that identifies this channel. Example: "channel-ID-1"
paramsvalue
Additional parameters controlling delivery channel behavior.
tokenstring
An arbitrary string delivered to the target address with each notification delivered over this channel. Example: "token-string"
typestring
The type of delivery mechanism used for this channel. Valid values are "web_hook" (or "webhook"). Example: "web_hook"
GOOGLECALENDAR_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 params

Synchronizes 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.

Parameters* required
calendar_idstring
Google Calendar identifier; 'primary' refers to the authenticated user's main calendar. Examples: "primary" "your.email@example.com" "xxxxxxxxxx@group.calendar.google.com"default: primary
event_typesvalue
Filters events by specified types (e.g., 'default', 'focusTime', 'outOfOffice', 'workingLocation'). All types returned if omitted. Examples: "['default', 'focusTime']" "['outOfOffice']" "['de...
max_resultsvalue
Max events per page (max 2500); Google Calendar's default is used if unspecified. Examples: "100" "2500"
pageTokenstring
Token for paginating results, from a previous response's `nextPageToken`. Example: "RANDOM_PAGE_TOKEN_STRING"
single_eventsboolean
If True, expands recurring events into individual instances (excluding master event); otherwise, Google's default handling applies. Examples: true false
sync_tokenstring
Token for incremental sync, retrieving only changes since issued. A 410 GONE response indicates an expired token, requiring a full sync. Example: "RANDOM_SYNC_TOKEN_STRING_FROM_PREVIOUS_CALL"
GOOGLECALENDAR_UPDATE_ACL_RULEUpdates an access control rule for the specified calendar.4 params

Updates an access control rule for the specified calendar.

Parameters* required
calendar_idstring
Calendar identifier. To retrieve calendar IDs call the calendarList.list method. If you want to access the primary calendar of the currently logged in user, use the "primary" keyword. Example: "pri...
rolestring
The role assigned to the scope. Possible values are: - "none" - Provides no access. - "freeBusyReader" - Provides read access to free/busy information. - "reader" - Provides read access to the c...
rule_idstring
ACL rule identifier. Example: "user:test.user@example.com"
send_notificationsboolean
Whether to send notifications about the calendar sharing change. Note that there are no notifications on access removal. Optional. The default is True.default: true
GOOGLECALENDAR_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 params

Updates 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.

Parameters* required
attendeesvalue
List of attendee emails (strings).
birthdayPropertiesvalue
Properties for birthday events.
calendar_idstring
Identifier of the Google Calendar where the event resides. The value 'primary' targets the user's primary calendar. Examples: "primary" "user@example.com" "long_calendar_id@group.calendar.goo...default: primary
create_meeting_roomboolean
If true, a Google Meet link is created and added to the event. CRITICAL: As of 2024, this REQUIRES a paid Google Workspace account ($13+/month). Personal Gmail accounts will fail with 'Invalid conf...
descriptionstring
Description of the event. Can contain HTML. Optional. Must be omitted for 'birthday' event type.
eventTypestring
Type of the event, immutable post-creation. 'workingLocation' (REQUIRES Google Workspace Enterprise). Note: 'fromGmail' events cannot be created via API.one of birthday · default · focusTime · outOfOffice · workingLocationdefault: default
event_duration_hourinteger
Number of hours (0-24). Increase by 1 here rather than passing 60 in `event_duration_minutes`default: 0
event_duration_minutesinteger
Duration in minutes (0-59 ONLY). NEVER use 60+ minutes - use event_duration_hour=1 instead. Maximum value is 59. Combined duration (hours + minutes) must be greater than 0.default: 30
event_idstring
The unique identifier of the event to be updated. Example: "a1b2c3d4e5f6g7h8i9j0k1l2m3"
focusTimePropertiesvalue
Properties for focusTime events. REQUIRES Google Workspace Enterprise account with Focus Time feature enabled.
guestsCanInviteOthersboolean
Whether attendees other than the organizer can invite others to the event.
guestsCanSeeOtherGuestsboolean
Whether attendees other than the organizer can see who the event's attendees are.
guests_can_modifyboolean
If True, guests can modify the event.default: false
locationstring
Geographic location of the event as free-form text.
outOfOfficePropertiesvalue
Properties for outOfOffice events.
recurrencevalue
List of RRULE, EXRULE, RDATE, EXDATE lines for recurring events. Supported frequencies: DAILY, WEEKLY, MONTHLY, YEARLY. For recurring events, start.timeZone and end.timeZone must be present. Provid...
send_updatesboolean
Defaults to True. Whether to send updates to the attendees.
start_datetimestring
Event start time in format YYYY-MM-DDTHH:MM:SS (no fractional seconds, no 'Z', no timezone offsets). Examples: '2025-01-16T13:00:00' or '2025-01-16T13:00'. Timezone info (Z, +, -) will be automatic...
summarystring
Summary (title) of the event.
timezonestring
IANA timezone name (e.g., 'America/New_York'). Required if datetime is naive. For recurring events, start and end must include a timeZone. If not provided, UTC is used. If datetime includes timezon...

+3 more parameters. See the server's own documentation for the full schema.

google-cal-mcp

MCP server for Google Calendar - list, create, update, and manage calendar events.

Use Cases

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.)

Setup

1. Create Google OAuth credentials

  1. Go to Google Cloud Console
  2. Create a new project (or use existing)
  3. Enable the Google Calendar API
  4. Go to APIs & Services → OAuth consent screen, set up consent screen
  5. Go to APIs & Services → Credentials → Create Credentials → OAuth client ID
  6. Choose Web application
  7. Add http://localhost:3000/callback to Authorized redirect URIs
  8. Note your Client ID and Client Secret

2. Run the server

GOOGLE_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.

3. Add to your MCP client

With the server running, follow the instructions on install-mcp, which generates the right config for your MCP client (Claude Code, Claude Desktop, Cursor, Cline, VS Code, and more).

Architecture

This server acts as an OAuth proxy to Google:

graph LR
    A[MCP client] <--> B[google-cal-mcp] <--> C[Google OAuth/API]
  1. Server advertises itself as an OAuth authorization server via /.well-known/oauth-authorization-server
  2. /register returns the Google OAuth client credentials
  3. /authorize redirects to Google, encoding the client's callback URL in state
  4. /callback receives the code from Google and forwards to the client's callback
  5. /token proxies token requests to Google, injecting client credentials
  6. /mcp handles MCP requests, using the bearer token to call Calendar API

The server holds no tokens or state - it just proxies OAuth to Google.

Tools

ToolDescription
Calendars
calendars_listList all calendars the user has access to
calendarlist_insertSubscribe to a shared calendar
calendarlist_updateUpdate calendar settings (color, visibility, reminders)
calendarlist_deleteUnsubscribe from a calendar
Events
events_listList events in a time range with search/filter
event_getGet details of a specific event
event_createCreate a new event with attendees and Meet link
event_updateUpdate an existing event
event_deleteDelete an event
event_respondRSVP to an invitation (accept/decline/tentative)
event_moveMove event to a different calendar
event_instancesGet instances of a recurring event
Availability
freebusy_queryFind free/busy times for scheduling
Sharing
acl_listList who has access to a calendar
Colors
colors_getGet available color palette for calendars/events

Calendar API Scopes

  • calendar - Full access to calendars
  • calendar.events - Read/write events

Contributing

Pull requests are welcomed on GitHub! To get started:

  1. Install Git and Node.js
  2. Clone the repository
  3. Install dependencies with npm install
  4. Run npm run test to run tests
  5. Build with npm run build

Releases

Versions follow the semantic versioning spec.

To release:

  1. Use npm version <major | minor | patch> to bump the version
  2. Run git push --follow-tags to push with tags
  3. Wait for GitHub Actions to publish to the NPM registry.
Featured
CodeRabbit
CodeRabbit
AI writes the code. CodeRabbit catches the slop.
Try For Free →
inference shell
inference shell
create and run specialised agents in minutes
build now →
MCP-ready Email SendingMCP-ready Email Sending
MCP-ready Email Sending
Plug Mailtrap into your AI workflow and let it handle the email.
Connect Mailtrap MCP →
Make your agent a DeFi expert
Make your agent a DeFi expert
Agent, run crypto. Access onchain data & trade routes via 1inch.
Install now →
Capacitor - Shared memory for your team’s coding agents.
Capacitor - Shared memory for your team’s coding agents.
Make coding agent sessions - Searchable, Shareable, Vendor-neutral & Scored.
Try For Free →
CodeScene MCP ServerCodeScene MCP Server
CodeScene MCP Server
Your agent targets a perfect 10 Code Health score. Deterministic. Every commit.
Try For Free →
Give your AI the whole web as clean markdownGive your AI the whole web as clean markdown
Give your AI the whole web as clean markdown
Integrate web data into your AI product. One API to scrape website & brand data.
Get API Key Now →
belt - the only tool your agent needs
belt - the only tool your agent needs
belt cli automatically finds the best tools and skills for your agent. image, video, music, tts...
one prompt install →

Configuration

GOOGLE_ACCESS_TOKEN*secret

Google OAuth access token with Calendar scopes.

MCP_TRANSPORT*

Transport type.

GOOGLE_CLIENT_ID*

Google OAuth client ID.

GOOGLE_CLIENT_SECRET*secret

Google OAuth client secret.

Categories
Productivity & Office
Registryactive
Packagegoogle-cal-mcp
TransportSTDIO, HTTP
AuthRequired
UpdatedMay 25, 2026
View on GitHub

More from domdomegg

  • Google Maps Places1
  • Starling Bank1
  • Downdetector1
  • Google Docs1
  • Time MCP Server4
  • Barcode Scanner
  • Filesystem1
  • Time MCP Server
  • Airtable447
  • Computer Use300
  • Gmail7
  • Defuddle Fetch6
  • Google Drive4
  • Shell Exec5
  • Google Contacts2
  • Google Sheets2
  • Open Food Facts3

Related Productivity & Office MCP Servers

View all →
nicoletterankin avatar
Orb Platform

io.github.nicoletterankin/orb-platform

162K English words, 74K lessons, knowledge graph, semantic reverse-dictionary search.
1
ccstt-dev avatar
Callable

io.github.ccstt-dev/callable

API for AI agents to delegate tasks to real humans.
steipete avatar
macOS Automator

steipete/macos-automator-mcp

An MCP server to run AppleScript and JXA (JavaScript for Automation) to macOS.
797
hald avatar
Things

hald/things-mcp

Enables Claude to access and manipulate Things 3 data via MCP with task creation, project management, and advanced searches.
467
ryaker avatar
Modular Outlook

ryaker/outlook-mcp

Provides OAuth-authenticated access to Outlook data via MCP enabling email and calendar actions.
372
omar-v2 avatar
MCP iCal

omar-v2/mcp-ical

A Model Context Protocol Server that allows you to interact with your MacOS Calendar through natural language.
311