Skip to main content
Glama
JoeCardoso13

Google Calendar MCP Server

by JoeCardoso13

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

# Configure your API key
mpak config set @JoeCardoso13/google-calendar access_token=your_oauth_token_here

# Run the server
mpak run @JoeCardoso13/google-calendar

Manual 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.server

Configuration

Getting Your Access Token

Google Calendar requires OAuth 2.0 access tokens (not API keys). The easiest way to get one for testing:

  1. Go to https://developers.google.com/oauthplayground/

  2. Select "Google Calendar API v3" and check the scopes you need

  3. Click "Authorize APIs" and sign in with your Google account

  4. Click "Exchange authorization code for tokens"

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

List items from the API with optional limit

get_item

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 check

License

MIT

Available Tools

10 tools
create_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).

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesEvent title
end_dateNoEnd date for all-day events (yyyy-mm-dd, exclusive)
locationNoEvent location
timezoneNoIANA timezone (e.g. 'America/New_York')
attendeesNoList of attendee email addresses
recurrenceNoRRULE strings (e.g. ['RRULE:FREQ=WEEKLY;COUNT=10'])
start_dateNoStart date for all-day events (yyyy-mm-dd)
calendar_idNoCalendar ID (default: 'primary')primary
descriptionNoEvent description
end_datetimeNoEnd time (RFC3339)
start_datetimeNoStart time (RFC3339, e.g. '2026-03-15T10:00:00-05:00')

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe event ID to delete
calendar_idNoCalendar ID (default: 'primary')primary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
calendar_idYesCalendar ID (use 'primary' for the user's primary calendar)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe event ID
calendar_idNoCalendar ID (default: 'primary')primary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
page_tokenNoToken for fetching the next page of results

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_byNoSort order: 'startTime' (default) or 'updated'startTime
time_maxNoEnd of time range (RFC3339)
time_minNoStart of time range (RFC3339, e.g. '2026-03-01T00:00:00Z')
page_tokenNoToken for next page of results
calendar_idNoCalendar ID (default: 'primary')primary
max_resultsNoMaximum number of events to return

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
time_maxYesEnd of time range (RFC3339)
time_minYesStart of time range (RFC3339)
calendar_idsNoList of calendar IDs to check (default: ['primary'])

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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"

ParametersJSON Schema
NameRequiredDescriptionDefault
textYesNatural language description of the event
calendar_idNoCalendar ID (default: 'primary')primary

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch text
time_maxNoEnd of time range (RFC3339)
time_minNoStart of time range (RFC3339)
calendar_idNoCalendar ID (default: 'primary')primary
max_resultsNoMaximum number of events to return

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryNoNew event title
end_dateNoNew end date for all-day events (yyyy-mm-dd)
event_idYesThe event ID to update
locationNoNew location
timezoneNoIANA timezone
attendeesNoNew list of attendee email addresses (replaces existing)
start_dateNoNew start date for all-day events (yyyy-mm-dd)
calendar_idNoCalendar ID (default: 'primary')primary
descriptionNoNew description
end_datetimeNoNew end time (RFC3339)
start_datetimeNoNew start time (RFC3339)

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 10 tool updatesv0.3.0
    • First observedcreate_event
    • First observeddelete_event
    • First observedget_calendar
    • First observedget_event
    • First observedlist_calendars
    • First observedlist_events
    • First observedquery_freebusy
    • First observedquick_add_event
    • First observedsearch_events
    • First observedupdate_event

TDQS

A3.7/5.0

Scored across 10 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness5/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers