Google Calendar MCP Server
Provides access to Google Calendar API to list and retrieve calendar events.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Calendar MCP Serverlist my upcoming events"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Calendar MCP Server
An MCP (Model Context Protocol) server that provides access to the Google Calendar API, allowing AI assistants to interact with Google Calendar data.
Features
List and retrieve items from the Google Calendar API
Async HTTP client with error handling
Typed responses with Pydantic models
Related MCP server: gcal-mcp
Installation
Using mpak (Recommended)
# Configure your API key
mpak config set @JoeCardoso13/google-calendar access_token=your_oauth_token_here
# Run the server
mpak run @JoeCardoso13/google-calendarManual Installation
# Clone the repository
git clone https://github.com/NimbleBrainInc/mcp-google-calendar.git
cd mcp-google-calendar
# Install dependencies with uv
uv sync
# Set your OAuth access token
export GOOGLE_CALENDAR_ACCESS_TOKEN=your_oauth_token_here
# Run the server
uv run python -m mcp_google_calendar.serverConfiguration
Getting Your Access Token
Google Calendar requires OAuth 2.0 access tokens (not API keys). The easiest way to get one for testing:
Select "Google Calendar API v3" and check the scopes you need
Click "Authorize APIs" and sign in with your Google account
Click "Exchange authorization code for tokens"
Copy the access token (expires after 1 hour)
Claude Desktop Configuration
Add to your ~/.claude/settings.json:
{
"mcpServers": {
"google-calendar": {
"command": "mpak",
"args": ["run", "@JoeCardoso13/google-calendar"]
}
}
}Available Tools
Tool | Description |
| List items from the API with optional limit |
| Get a single item by its ID |
Development
# Install dev dependencies
uv sync --dev
# Run tests
uv run pytest tests/ -v
# Format code
uv run ruff format src/ tests/
# Lint
uv run ruff check src/ tests/
# Type check
uv run ty check src/
# Run all checks
make checkLicense
MIT
Available Tools
10 toolscreate_eventCreate EventA
Create a new calendar event.
For timed events, provide start_datetime and end_datetime (RFC3339). For all-day events, provide start_date and end_date (yyyy-mm-dd).
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | Event title | |
| end_date | No | End date for all-day events (yyyy-mm-dd, exclusive) | |
| location | No | Event location | |
| timezone | No | IANA timezone (e.g. 'America/New_York') | |
| attendees | No | List of attendee email addresses | |
| recurrence | No | RRULE strings (e.g. ['RRULE:FREQ=WEEKLY;COUNT=10']) | |
| start_date | No | Start date for all-day events (yyyy-mm-dd) | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
| description | No | Event description | |
| end_datetime | No | End time (RFC3339) | |
| start_datetime | No | Start time (RFC3339, e.g. '2026-03-15T10:00:00-05:00') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It conveys the create semantics and the timed/all-day duality, but says nothing about whether attendees are notified, what permissions are required, duplicate handling, or side effects of creating on a shared calendar.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then the two mutually exclusive parameter modes. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation, and full schema coverage means parameters are self-documenting. The description covers the main ambiguity (timed vs all-day) but omits any note about recurrence, attendee side effects, or permissions for a mutation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents every one of the 11 parameters with formats (RFC3339, yyyy-mm-dd). The description restates the same format guidance for the two date modes, adding framing value but no information beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a new calendar event'), so an agent immediately knows the operation. It does not differentiate from siblings like quick_add_event or update_event, but the create-vs-modify distinction is unambiguous from the name and verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives conditional usage guidance: timed events need start/end_datetime, all-day events need start/end_date. That is helpful for the parameter mode, but there is no guidance on when to choose this tool over quick_add_event or update_event, so alternative routing is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventDelete EventC
Delete a calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | The event ID to delete | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a destructive mutation but does not disclose irreversibility, required permissions, effects on recurring events, or any safety considerations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single efficient sentence with zero waste and is front-loaded with the core action. It is slightly under-specified for a destructive operation but is structurally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema exists, so return values need not be explained. However, for a destructive mutation with no annotations, the description should provide more safety and usage context; it currently lacks essential behavioral completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents event_id and calendar_id clearly. The description adds no parameter information beyond what the schema provides, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Delete a calendar event'), so the agent can identify the operation. However, it does not distinguish this tool from siblings like update_event or create_event beyond the verb alone.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives, nor any prerequisites such as required permissions or confirmation steps. The agent must infer usage entirely from the name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_calendarGet CalendarB
Get metadata for a specific calendar.
| Name | Required | Description | Default |
|---|---|---|---|
| calendar_id | Yes | Calendar ID (use 'primary' for the user's primary calendar) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Get' implies a read-only, non-destructive operation, but the description does not confirm read-only semantics, does not mention permission/auth requirements, and says nothing about behavior on a missing or inaccessible calendar_id. The output schema covers the return shape, which softens the gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short, front-loaded sentence with no filler. It is efficient, though nearly minimal to the point of being terse for a tool whose behavior is otherwise undocumented.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter read tool with a fully described schema and an output schema covering return values, the description is sufficient to invoke correctly. What is missing (auth needs, error behavior) is minor at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents calendar_id including the 'primary' special value. The description adds no parameter meaning beyond the schema, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (calendar metadata), so the agent knows it retrieves one calendar's metadata rather than a list. It is clear but does not explicitly distinguish itself from siblings like get_event or list_calendars.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance, no mention of prerequisites, and no routing to alternatives such as list_calendars for enumeration or get_event for event data. Usage is only implied by the wording.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_eventGet EventB
Get a single event by ID.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | The event ID | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation through 'Get' but does not state read-only safety, error behavior, auth requirements, or whether calendar scoping affects the lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for a simple retrieval tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a simple two-parameter schema, complete parameter descriptions, and an output schema, the core retrieval contract is covered. However, the lack of annotations and any usage or behavioral context leaves the definition minimally complete rather than fully informative.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents event_id and calendar_id, including the default for calendar_id. The description only says 'by ID' and adds no further meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: retrieving a single event by ID. It clearly distinguishes the operation from list_events, create_event, and search_events, though it does not explicitly name those alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'by ID' implies the tool should be used when an event ID is known, which gives minimal usage context. However, it does not say when to prefer list_events, search_events, or get_calendar instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_calendarsList CalendarsB
List all calendars the user has access to.
| Name | Required | Description | Default |
|---|---|---|---|
| page_token | No | Token for fetching the next page of results |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It usefully discloses the access-controlled scope ("calendars the user has access to") and implies a non-destructive read, but says nothing about pagination behavior despite a page_token parameter — a real gap for a list tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single efficient sentence with the resource and scope front-loaded. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (1 optional param, output schema present, no nesting), and the description plus schema is nearly sufficient. The only shortfall is the absent note about paginated results when using page_token.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and page_token is fully documented in the schema, so the baseline is 3. The description adds no extra syntax or semantics for the single parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (calendars) with an added scope qualifier ("the user has access to"). It is clear what the tool returns, but it never contrasts itself with the closely named sibling get_calendar, leaving the list-vs-single distinction to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance, no mention of prerequisites (e.g., needing a calendar ID discovered here before calling get_calendar or list_events), and no alternatives named. The usage is only implied by the verb "List".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsList EventsC
List events from a calendar within a time range.
| Name | Required | Description | Default |
|---|---|---|---|
| order_by | No | Sort order: 'startTime' (default) or 'updated' | startTime |
| time_max | No | End of time range (RFC3339) | |
| time_min | No | Start of time range (RFC3339, e.g. '2026-03-01T00:00:00Z') | |
| page_token | No | Token for next page of results | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
| max_results | No | Maximum number of events to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It conveys only that results are scoped to a time range; it does not mention that results are paginated (a page_token parameter exists), what the default sort is, or that the default target is the 'primary' calendar when no calendar_id is given.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence with the verb and scope front-loaded and no wasted words. It is efficient, though arguably too terse to earn a top score given the tool's six parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Because an output schema exists, return values need not be explained, and the schema documents every parameter. The remaining gap is the absence of any routing guidance against search_events and no note on pagination or default calendar selection.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all six parameters are documented in the schema itself (including RFC3339 format, defaults, and sort options). The description adds only a generic time-range notion, matching the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (events) plus the scoping dimension (within a time range). It clearly separates from list_calendars and get_event, but gives no signal to distinguish it from the sibling search_events, which is the closest alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no named alternative. An agent cannot tell from this text whether to call list_events or search_events for a filtered query, nor whether a calendar_id or time range is required in practice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_freebusyQuery FreebusyA
Check free/busy status for one or more calendars in a time range.
| Name | Required | Description | Default |
|---|---|---|---|
| time_max | Yes | End of time range (RFC3339) | |
| time_min | Yes | Start of time range (RFC3339) | |
| calendar_ids | No | List of calendar IDs to check (default: ['primary']) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the behavioral burden. 'Check' implies a non-mutating read, and the output schema covers the return shape, but the description says nothing about permissions required, rate limits, or whether the query spans only the caller's accessible calendars.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence that names the resource, the scope, and the constraints with zero filler. Nothing is wasted and nothing essential is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read tool with full schema coverage and an output schema, the description supplies the essentials. The main omission is routing guidance against event-listing siblings, which a slightly longer description could resolve.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so each parameter (time_min, time_max, calendar_ids with its 'primary' default) is already documented in the schema. The description only restates 'one or more calendars in a time range' without adding format or default details, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: checking free/busy status for calendars within a time range. An agent can distinguish it from list_events or get_event because it returns availability rather than event data. It stops short of explicitly naming a sibling alternative, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing 'check free/busy status' implies the use case (availability lookup) but gives no explicit when-to-use or when-not-to-use guidance, and does not point to list_events/search_events as alternatives for retrieving actual event details. Usage is inferable rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quick_add_eventQuick Add EventB
Create an event from a natural language string.
Examples: "Lunch with Bob tomorrow at noon", "Team standup every weekday 9am"
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Natural language description of the event | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, and it discloses only that parsing is NLP-based. It says nothing about required permissions, which calendar is written to by default, whether ambiguous text fails or silently guesses, or that this is a persistent mutation. For a write tool with zero annotation coverage this is a meaningful gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence of purpose followed by two concrete examples, front-loaded and free of filler. The examples earn their place by showing the accepted phrasing style, though they are the bulk of a very short description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. But for a mutation tool with no annotations and a sibling create_event, the description omits the permission/behavior context and the disambiguation an agent needs, so it is only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented in the schema and the baseline of 3 applies. The examples do convey what kind of text the required parameter expects (recurrence and relative time phrasing), which is slight added value, but calendar_id receives no explanation beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (create an event) and pins down the distinctive input modality: a natural language string rather than structured fields. It is clearly separable from get_event/delete_event, but it never distinguishes itself from the sibling create_event, which an agent must choose between.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The two examples imply the intended usage context (loose, human-phrased scheduling text like "Lunch with Bob tomorrow at noon"), which is useful implied guidance. However there is no explicit statement of when to prefer this over create_event, nor any exclusion or precondition, leaving the routing decision to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsSearch EventsB
Full-text search across event summaries, descriptions, and locations.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text | |
| time_max | No | End of time range (RFC3339) | |
| time_min | No | Start of time range (RFC3339) | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
| max_results | No | Maximum number of events to return |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It does not disclose result ordering, pagination, case sensitivity, or whether results are ranked by relevance. For a search tool with zero annotation coverage, this is a notable gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-formed sentence that front-loads the operation and scope. Every word earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. However, with no annotations and no usage guidance, the description leaves behavioral and selection context incomplete for a 5-parameter search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema with types and formats (RFC3339, defaults). The description adds no parameter-specific meaning beyond what the schema provides, making 3 the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (search) and resource (events) with the scope of fields searched (summaries, descriptions, locations). This clearly distinguishes it from siblings like list_events, though it does not explicitly name them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this vs list_events or other siblings. The description implies full-text search but does not state exclusions or alternatives, leaving the agent to infer routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventUpdate EventA
Update an existing calendar event. Only provided fields are changed.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | No | New event title | |
| end_date | No | New end date for all-day events (yyyy-mm-dd) | |
| event_id | Yes | The event ID to update | |
| location | No | New location | |
| timezone | No | IANA timezone | |
| attendees | No | New list of attendee email addresses (replaces existing) | |
| start_date | No | New start date for all-day events (yyyy-mm-dd) | |
| calendar_id | No | Calendar ID (default: 'primary') | primary |
| description | No | New description | |
| end_datetime | No | New end time (RFC3339) | |
| start_datetime | No | New start time (RFC3339) |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It usefully discloses partial-update semantics, but omits permission/auth requirements, whether the change is reversible, and whether attendees are notified. It also doesn't surface the destructive replace semantics of the attendees field, though that is captured in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with the core action and the most important calling convention front-loaded. No filler or repetition of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is unnecessary, and the schema fully documents all 11 parameters. Still, for a mutation tool with zero annotations, the description should say more about side effects (attendee notifications, replace semantics) and any permission or conflict constraints.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in the schema, including formats (RFC3339, yyyy-mm-dd) and the attendees-replaces-existing behavior. The description adds no parameter meaning beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('update') and resource ('existing calendar event'), which clearly separates it from create_event, delete_event, and get_event siblings by name. It stops short of explicitly naming an alternative, but the purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Only provided fields are changed' implies the patch-style usage context and is a meaningful hint about how to call it. However, there is no explicit when-to-use guidance, no mention of prerequisites (e.g., event must exist, which calendar), and no routing to siblings like create_event for new events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.3.0- First observed
create_event - First observed
delete_event - First observed
get_calendar - First observed
get_event - First observed
list_calendars - First observed
list_events - First observed
query_freebusy - First observed
quick_add_event - First observed
search_events - First observed
update_event
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose: listing calendars vs. getting metadata, listing vs. getting vs. searching events, and free/busy querying. The only potential overlap is between create_event and quick_add_event, but quick_add is explicitly for natural language input, making them distinct.
All tool names follow a consistent verb_noun pattern (list_calendars, get_event, create_event, etc.), with clear and predictable naming. The pattern is uniform across all tools.
10 tools is well-scoped for a Google Calendar integration, covering core operations without bloat. Each tool earns its place by addressing a specific need.
The toolset provides full CRUD for events (create, get, update, delete, list, search), plus calendar listing/metadata and free/busy querying. This covers the essential lifecycle for calendar management, with no obvious gaps.
Maintenance
Related MCP Connectors
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
A MCP server that works with Google Calendar to manage event listing, reading, and updates.
MCP server connecting AI agents to 100+ apps (Gmail, Slack, Notion, GitHub) via one-click OAuth.
GDPR-compliant calendar access for AI assistants: read, create, edit, RSVP. Google, MS 365, Apple.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to interact with Google Calendar and Gmail, allowing users to manage events, send emails, and organize their inbox through natural language.MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for read-only Google Calendar integration, providing calendar access to AI assistants.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to manage Google Calendar events, calendars, sharing, and scheduling with full read/write access across multiple Google accounts, supporting natural language creation, recurring events, and Google Meet.40 npmMIT
- AlicenseNot gradedqualityCmaintenanceA production-ready MCP server that lets AI assistants interact with your personal Google Calendar using the Google Calendar API and OAuth 2.0.97 npmMIT