Skip to main content
Glama
murphy360
by murphy360

Google Calendar MCP Server

A Model Context Protocol (MCP) server for Google Calendar integration, designed for personal calendar management with Home Assistant support.

Features

  • MCP Tools: Search events, list upcoming events, create/update/delete events

  • Daily Agenda: Get formatted daily agenda summaries

  • Calendar Categories: Organize calendars by type (work, personal, family, etc.)

  • REST API: Endpoints for Home Assistant integration

  • SSE Transport: Connect from Claude Desktop via mcp-remote

  • Docker Support: Easy deployment with Docker Compose

Related MCP server: Google Calendar MCP Server

Quick Start

1. Google Cloud Setup

  1. Go to Google Cloud Console

  2. Create a new project or select existing

  3. Enable the Google Calendar API

  4. Create OAuth 2.0 credentials (Desktop App type)

  5. Download the credentials

2. Configuration

# Copy example environment file
cp .env.example .env

# Edit with your credentials
# GOOGLE_CLIENT_ID=your-client-id
# GOOGLE_CLIENT_SECRET=your-client-secret

3. Initial OAuth Setup

# Run OAuth setup (opens browser for consent)
docker compose --profile setup run --rm calendar-auth

4. Start the Server

docker compose up -d

5. Claude Desktop Configuration

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "calendar": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "http://YOUR_SERVER_IP:8002/mcp/sse", "--allow-http"]
    }
  }
}

Home Assistant MCP Integration

The server exposes SSE endpoints for MCP connections:

  • /mcp/sse - Primary MCP SSE endpoint

  • /sse - Alias endpoint for Home Assistant compatibility

Each connection gets a fresh server instance for proper session isolation.

MCP Tools

Tool

Description

calendar_get_current_time

Get current date/time with reference dates for queries

calendar_list_events

List upcoming events with optional filters

calendar_search

Search events by text query

calendar_get_event

Get details of a specific event

calendar_create_event

Create a new calendar event

calendar_update_event

Update an existing event

calendar_delete_event

Delete an event

calendar_daily_agenda

Get agenda for a specific day

calendar_weekly_summary

Get 7-day overview

calendar_list_calendars

List all available calendars

calendar_free_busy

Check availability for a time range

Tool Schema Notes

All tools use Gemini-compatible schemas with explicit types:

  • Array parameters use comma-separated strings (e.g., attendees: "user1@example.com,user2@example.com")

  • Calendar IDs use comma-separated strings (e.g., calendar_ids: "primary,work@group.calendar.google.com")

  • Dates use ISO 8601 format (YYYY-MM-DD or YYYY-MM-DDTHH:MM:SS)

REST API Endpoints

Endpoint

Description

GET /health

Health check with auth status

GET /calendars

List all calendars

GET /events/today

Today's events

GET /events/upcoming

Upcoming events

GET /events/search?q=query

Search events

GET /summary/daily

Daily summary

GET /summary/weekly

Weekly summary

GET /free-time

Find free time slots

Home Assistant Integration

REST Sensor Example

sensor:
  - platform: rest
    name: "Next Calendar Event"
    resource: http://YOUR_SERVER_IP:8002/events/upcoming?days=1
    value_template: "{{ value_json[0].summary if value_json else 'No events' }}"
    scan_interval: 300

  - platform: rest
    name: "Today's Events Count"
    resource: http://YOUR_SERVER_IP:8002/events/today
    value_template: "{{ value_json | length }}"
    scan_interval: 300

MCP Integration

Home Assistant can connect via the MCP SSE endpoints:

  • http://YOUR_SERVER_IP:8002/mcp/sse

  • http://YOUR_SERVER_IP:8002/sse (alias)

Project Structure

mcp_google_calendar/
├── src/mcp_google_calendar/
│   ├── __init__.py
│   ├── auth.py              # OAuth2 authentication
│   ├── calendar_client.py   # Google Calendar API wrapper
│   ├── config.py            # Settings and configuration
│   ├── models.py            # Pydantic models
│   ├── server.py            # MCP stdio server
│   ├── sse_server.py        # MCP SSE server
│   ├── combined_server.py   # REST + SSE combined server
│   └── api.py               # REST API for Home Assistant
├── config/
│   └── calendars.yaml       # Calendar categorization
├── credentials/
│   ├── client_secrets.json  # OAuth credentials
│   └── token.json           # Stored tokens
├── docker-compose.yml
├── Dockerfile
└── README.md

License

MIT

Available Tools

11 tools
calendar_create_eventA

Create a new calendar event.

Creates an event with the specified details. At minimum, requires a title and start time. End time defaults to one hour after start if not provided.

ParametersJSON Schema
NameRequiredDescriptionDefault
summaryYesThe event title/summary. This is what appears on the calendar.
start_timeYesStart time in ISO 8601 format (e.g., '2024-12-15T14:00:00' or '2024-12-15T14:00:00-05:00').
end_timeNoEnd time in ISO 8601 format. If not provided, defaults to start time plus one hour.
descriptionNoDetailed description or notes for the event.
locationNoPhysical address or location name for the event.
attendeesNoComma-separated list of attendee email addresses (e.g., 'user1@example.com,user2@example.com').
all_dayNoSet to true for all-day events. When true, only the date portion of start_time is used.
calendar_idNoThe calendar ID to create the event in. Use 'primary' for the main calendar.

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It describes the creation action and default behavior for end time, but lacks details on permissions, error handling, rate limits, or what happens with invalid inputs. It adds some context but is incomplete for a mutation tool without annotations.

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 appropriately sized and front-loaded, with the core purpose in the first sentence and essential details in the second. Every sentence earns its place by providing critical information without redundancy or fluff, making it efficient and easy to parse.

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?

Given the complexity of a mutation tool with 8 parameters and no annotations or output schema, the description is adequate but has clear gaps. It covers the basic purpose and some defaults, but lacks information on permissions, error responses, or behavioral nuances, which are important for safe and effective use in an AI agent context.

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 input schema already documents all 8 parameters thoroughly. The description adds minimal value beyond the schema by mentioning minimum requirements and default end time behavior, but does not provide additional syntax, format details, or usage examples. Baseline 3 is appropriate as the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Create a new calendar event') and resource ('calendar event'), distinguishing it from siblings like calendar_update_event, calendar_delete_event, or calendar_list_events. It specifies the minimum requirements (title and start time), which helps differentiate it from other creation or modification tools.

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 implies usage by stating minimum requirements (title and start time) and default behavior (end time defaults to one hour after start), but it does not explicitly guide when to use this tool versus alternatives like calendar_update_event or calendar_search. No exclusions or prerequisites are mentioned, leaving gaps in contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_daily_agendaA

Get the agenda for a specific day with all events.

Returns a formatted summary of all events for the specified date, organized by all-day events and timed events. Useful for daily briefings.

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoDate in YYYY-MM-DD format (e.g., '2024-12-15'). If not provided, uses today's date.
calendar_idsNoComma-separated list of calendar IDs to include (e.g., 'primary,work@group.calendar.google.com'). If not provided, includes all calendars.

TDQS

A4/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 discloses the tool's behavior by describing the output format ('formatted summary... organized by all-day events and timed events') and its utility ('Useful for daily briefings'), which adds value beyond the schema. However, it lacks details on permissions, rate limits, or error handling, which are important for a read operation with no annotations.

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 front-loaded with the core purpose in the first sentence, followed by details on the return format and utility. Every sentence earns its place by adding value—no redundant or vague statements. It's efficiently structured in three concise sentences, making it easy to parse.

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?

Given the tool's moderate complexity (a read operation with 2 optional parameters), no annotations, and no output schema, the description is fairly complete. It covers the purpose, output format, and use case, but could improve by mentioning potential limitations (e.g., default behavior if parameters are omitted) or linking to sibling tools for broader context. It's adequate but has minor gaps in full contextual coverage.

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 fully documents both parameters (date and calendar_ids). The description does not add any parameter-specific information beyond what the schema provides, such as examples or constraints. With high schema coverage, the baseline score of 3 is appropriate, as the description doesn't compensate but also doesn't detract.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Get the agenda') and resource ('for a specific day with all events'), distinguishing it from siblings like calendar_list_events (which lists events generally) or calendar_weekly_summary (which covers a week). It explicitly mentions the output format ('formatted summary... organized by all-day events and timed events'), making the purpose distinct and well-defined.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool ('Useful for daily briefings'), but it does not explicitly state when not to use it or name alternatives. For example, it doesn't contrast with calendar_list_events for broader event queries or calendar_weekly_summary for weekly overviews, leaving some ambiguity in tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_delete_eventB

Delete a calendar event.

Permanently removes an event from the calendar. Optionally notifies attendees about the cancellation.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe unique event ID to delete.
calendar_idNoThe calendar ID where the event exists. Use 'primary' for the main calendar.
notify_attendeesNoSet to true to send cancellation emails to attendees, false to delete silently.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the permanent nature ('Permanently removes') and optional attendee notification, but lacks critical behavioral details like required permissions, error conditions (e.g., if event doesn't exist), whether deletion is reversible, or rate limits. For a destructive operation with zero annotation coverage, this is insufficient.

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?

Extremely concise with just two sentences that are front-loaded with the core purpose. Every word earns its place - first sentence states the action, second adds critical behavioral context about permanence and notification. No wasted words or redundancy.

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?

For a destructive deletion tool with no annotations and no output schema, the description is incomplete. It should address more behavioral aspects like permissions needed, error handling, confirmation requirements, or what happens to recurring events. The presence of sibling tools like calendar_update_event suggests this deletion might be irreversible compared to cancellation, but this isn't clarified.

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 all three parameters thoroughly. The description adds minimal value beyond what's in the schema - it mentions the optional attendee notification feature but doesn't elaborate on semantics beyond what the parameter description states. Baseline 3 is appropriate when schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Delete'), target resource ('a calendar event'), and distinguishes it from siblings like calendar_update_event (which modifies) or calendar_get_event (which reads). It goes beyond just restating the tool name by specifying the permanence of the action.

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 explicit guidance on when to use this tool versus alternatives like calendar_update_event (to cancel rather than delete) or calendar_get_event (to check details first). The description mentions optional attendee notification but doesn't provide context for when that should be used versus silent deletion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_free_busyB

Check free/busy status for a time range.

Returns busy time slots within the specified range for one or more calendars. Useful for finding available meeting times.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_timeYesStart of the time range in ISO 8601 format.
end_timeYesEnd of the time range in ISO 8601 format.
calendar_idsNoComma-separated list of calendar IDs to check. If not provided, checks 'primary'.

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions what the tool returns ('Returns busy time slots') but doesn't cover important aspects like authentication requirements, rate limits, error conditions, or whether this is a read-only operation (though implied by 'Check'). The behavioral context is incomplete for a tool that queries calendar data.

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 perfectly concise with three sentences that each add value: states the core function, specifies the return value, and provides usage context. No wasted words, and the information is front-loaded with the primary purpose first.

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?

For a tool with 3 parameters, 100% schema coverage, but no annotations and no output schema, the description provides basic functional context but lacks details about return format, error handling, or operational constraints. It's minimally adequate but leaves gaps that could hinder effective tool selection and invocation.

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 fully documents all three parameters. The description adds no additional parameter information beyond what's in the schema. The baseline score of 3 reflects adequate parameter documentation through the schema alone.

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 clearly states the tool's purpose with specific verbs ('Check free/busy status') and resources ('for one or more calendars'), and distinguishes it from siblings by focusing on availability rather than event management. However, it doesn't explicitly differentiate from all siblings like 'calendar_list_events' which also deals with calendar data.

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 provides implied usage context ('Useful for finding available meeting times') which suggests when to use it, but lacks explicit guidance on when to choose this tool over alternatives like 'calendar_list_events' or 'calendar_search'. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_get_current_timeA

Get the current date and time in the user's timezone.

Use this tool to understand what 'today', 'tomorrow', 'this week' means before making calendar queries. Returns current time, date, and reference dates for the week.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does well by disclosing key behavioral traits: it returns current time, date, and reference dates for the week, which helps the agent understand the output format and utility. However, it doesn't mention potential limitations like timezone accuracy or update frequency.

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 front-loaded with the core purpose in the first sentence, followed by usage guidance and output details in two concise sentences, with zero wasted words or redundancy.

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?

Given the tool's simplicity (0 parameters, no output schema, no annotations), the description is nearly complete by covering purpose, usage, and return values. A minor gap is the lack of explicit mention of any error conditions or timezone source, but it's sufficient for effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on output semantics, adding value by explaining what the tool returns beyond just the schema's absence.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verbs ('Get the current date and time') and resource ('in the user's timezone'), distinguishing it from siblings like calendar_list_events or calendar_create_event that handle calendar data manipulation rather than time reference.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use this tool ('before making calendar queries') and provides context for interpreting relative terms like 'today' or 'this week', offering clear guidance on its role versus other calendar tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_get_eventA

Get detailed information about a specific calendar event.

Returns full event details including title, description, start/end times, location, attendees, and meeting links. Requires the event ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe unique event ID. Obtain this from calendar_list_events or calendar_search.
calendar_idNoThe calendar ID where the event exists. Use 'primary' for the main calendar.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the tool 'Returns full event details' and 'Requires the event ID', which are useful behavioral traits. However, it lacks information about permissions, rate limits, error handling, or whether it's a read-only operation (though implied by 'Get').

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 front-loaded with the core purpose in the first sentence, followed by supporting details in a concise list format. Every sentence adds value: the first states the action, the second elaborates on returns, and the third specifies prerequisites. No wasted words.

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?

Given the tool's moderate complexity (retrieve operation with 2 parameters), no annotations, and no output schema, the description is reasonably complete. It covers purpose, return details, and prerequisites. However, it could improve by mentioning authentication needs or response format, but the lack of output schema is partially compensated by listing return attributes.

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 fully documents both parameters. The description adds marginal value by mentioning 'Requires the event ID' (implied required parameter) but does not provide additional semantics beyond what the schema descriptions state for event_id and calendar_id.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'Get' and resource 'detailed information about a specific calendar event', clearly distinguishing it from siblings like calendar_list_events (list multiple events) or calendar_update_event (modify events). It specifies the scope as 'full event details' including specific attributes like title and attendees.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to retrieve detailed information for a specific event identified by its ID. It implicitly suggests alternatives like calendar_list_events for listing events or calendar_search for finding events, but does not explicitly state when NOT to use it or name specific alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_list_calendarsB

List all available calendars.

Returns a list of all calendars accessible to the authenticated user, including their IDs, names, and whether they are the primary calendar.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It adds some context by specifying the return format (list with IDs, names, primary status) and authentication scope, but it does not cover potential limitations like rate limits, pagination, or error conditions, leaving gaps in transparency.

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 front-loaded with the core purpose in the first sentence, followed by additional details in a second sentence. It is efficiently structured with zero waste, making it easy to understand quickly without unnecessary elaboration.

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?

Given the tool's low complexity (0 parameters, no output schema) and lack of annotations, the description is minimally adequate. It covers the basic functionality and return format but does not address potential behavioral aspects like error handling or performance, which could be relevant for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter details are needed. The description appropriately focuses on output semantics without redundant parameter information, earning a high score as it adds value where schema coverage is complete.

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 clearly states the tool's purpose with a specific verb ('List') and resource ('all available calendars'), and it distinguishes the scope by specifying 'accessible to the authenticated user'. However, it does not explicitly differentiate from sibling tools like 'calendar_list_events', which might cause confusion, preventing a score of 5.

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?

The description provides no guidance on when to use this tool versus alternatives, such as 'calendar_list_events' or 'calendar_search'. It lacks explicit instructions on context or exclusions, offering only a basic functional statement without comparative usage advice.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_list_eventsA

List upcoming calendar events within a date range.

Returns events from a specific calendar with details including title, time, location, and meeting links. Use days_ahead to control how far into the future to search.

ParametersJSON Schema
NameRequiredDescriptionDefault
days_aheadNoNumber of days ahead to look for events. Use 7 for one week, 30 for one month.
calendar_idNoThe calendar ID to query. Use 'primary' for the main calendar.
max_resultsNoMaximum number of events to return. Recommended: 10-50.

TDQS

A3.5/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 full burden. It mentions the tool returns events with details (title, time, location, meeting links) but doesn't disclose behavioral aspects like pagination, error conditions, authentication requirements, or rate limits. For a read operation with no annotation coverage, this leaves significant gaps.

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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by details on returns and parameter guidance. Every sentence adds value with zero waste.

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?

Given the tool's moderate complexity (3 parameters, no output schema, no annotations), the description is adequate but incomplete. It covers the basic purpose and hints at returns, but lacks details on output format, error handling, or behavioral constraints that would help an agent use it correctly.

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 all three parameters thoroughly. The description adds minimal value beyond the schema by mentioning days_ahead controls how far to search, but doesn't provide additional syntax, format, or semantic context beyond what's in the parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with specific verb ('List upcoming calendar events') and resource ('calendar events'), distinguishing it from siblings like calendar_daily_agenda or calendar_weekly_summary by specifying date range filtering rather than time-specific summaries.

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 implies usage context ('within a date range') but doesn't explicitly state when to use this tool versus alternatives like calendar_search or calendar_daily_agenda. No guidance on prerequisites or exclusions is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_update_eventB

Update an existing calendar event.

Modifies one or more fields of an existing event. Only provide the fields you want to change; unspecified fields remain unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe unique event ID to update. Obtain this from calendar_list_events or calendar_search.
summaryNoNew event title/summary.
start_timeNoNew start time in ISO 8601 format.
end_timeNoNew end time in ISO 8601 format.
descriptionNoNew event description.
locationNoNew event location.
calendar_idNoThe calendar ID where the event exists. Use 'primary' for the main calendar.

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions that unspecified fields remain unchanged, which is useful context. However, it lacks critical details such as required permissions, whether the operation is idempotent, error handling for invalid inputs, or what the response looks like. For a mutation tool with zero annotation coverage, this is a significant 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?

The description is extremely concise and well-structured with two sentences that directly convey the tool's function and usage. Every sentence earns its place by providing essential information without redundancy. It is front-loaded with the core purpose.

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?

Given the complexity of a mutation tool with no annotations and no output schema, the description is incomplete. It lacks information on behavioral traits like authentication needs, error conditions, and return values. While the schema covers parameters well, the overall context for safe and effective use is insufficient.

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 all 7 parameters thoroughly. The description adds minimal value beyond the schema by implying partial updates ('Only provide the fields you want to change'), but doesn't provide additional syntax or format details. Baseline 3 is appropriate when the schema does the heavy lifting.

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 clearly states the verb ('Update') and resource ('existing calendar event'), making the purpose immediately understandable. It distinguishes from siblings like calendar_create_event (create) and calendar_delete_event (delete), though it doesn't explicitly contrast with calendar_get_event (read). The description is specific but could be slightly more distinctive.

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 implies usage by stating it modifies fields of an existing event, suggesting it should be used when changes are needed. However, it doesn't provide explicit guidance on when to use this tool versus alternatives like calendar_create_event for new events or calendar_delete_event for removal. No prerequisites or exclusions are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

calendar_weekly_summaryA

Get a summary of events for the upcoming 7 days.

Returns a week overview with events organized by day, total event count, and busiest day indicator. Useful for weekly planning.

ParametersJSON Schema
NameRequiredDescriptionDefault
start_dateNoStart date in YYYY-MM-DD format. If not provided, starts from today.
calendar_idsNoComma-separated list of calendar IDs to include. If not provided, includes all calendars.

TDQS

A3.5/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 discloses behavioral traits like returning 'a week overview with events organized by day, total event count, and busiest day indicator,' which adds value beyond the input schema. However, it doesn't cover aspects like authentication needs, rate limits, error handling, or whether it's read-only (implied by 'Get' but not stated). The description doesn't contradict any annotations, as there are none.

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 appropriately sized and front-loaded: the first sentence states the core purpose, followed by details on the return format and usage context. Every sentence earns its place by adding value—no redundancy or waste. It's concise yet informative, making it easy for an AI agent to parse quickly.

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?

Given the tool's moderate complexity (2 parameters, no output schema, no annotations), the description is somewhat complete but has gaps. It explains what the tool does and the return format, which is helpful since there's no output schema. However, it lacks details on behavioral aspects like error cases or performance, and it doesn't fully address usage compared to siblings. This makes it adequate but not fully comprehensive for the context.

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 input schema fully documents the two parameters (start_date and calendar_ids). The description doesn't add any parameter-specific information beyond what's in the schema, such as examples or constraints. According to the rules, with high schema coverage (>80%), the baseline is 3 even with no param info in the description, which applies here.

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 clearly states the tool's purpose: 'Get a summary of events for the upcoming 7 days.' It specifies the verb ('Get a summary') and resource ('events'), and distinguishes it from siblings like calendar_daily_agenda (daily vs weekly) and calendar_list_events (list vs summary). However, it doesn't explicitly contrast with all siblings (e.g., calendar_search), keeping it from a perfect score.

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 implies usage context with 'Useful for weekly planning,' which suggests when to use this tool. It doesn't explicitly state when not to use it or name alternatives among siblings, such as using calendar_daily_agenda for daily details or calendar_list_events for raw event lists. This provides some guidance but lacks explicit exclusions or comparisons.

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. Dates show when Glama detected each change.

  1. 11 tool updates
    • First observedcalendar_create_event
    • First observedcalendar_daily_agenda
    • First observedcalendar_delete_event
    • First observedcalendar_free_busy
    • First observedcalendar_get_current_time
    • First observedcalendar_get_event
    • First observedcalendar_list_calendars
    • First observedcalendar_list_events
    • First observedcalendar_search
    • First observedcalendar_update_event
    • First observedcalendar_weekly_summary

TDQS

A3.9/5.0
Disambiguation5/5

Every tool has a clearly distinct purpose with no ambiguity. For example, calendar_create_event, calendar_get_event, calendar_update_event, and calendar_delete_event form a complete CRUD set for events, while calendar_daily_agenda, calendar_weekly_summary, calendar_list_events, and calendar_search provide different querying perspectives. Tools like calendar_free_busy and calendar_get_current_time serve unique utility functions that don't overlap with others.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern with the 'calendar_' prefix, such as calendar_create_event, calendar_list_events, and calendar_update_event. This uniformity makes the tool set predictable and easy to navigate, with no deviations in naming conventions across all 11 tools.

Tool Count5/5

With 11 tools, the server is well-scoped for Google Calendar operations. Each tool earns its place by covering essential aspects like event management (create, get, update, delete), querying (list, search, agenda, summary), and utilities (free/busy, current time, list calendars), avoiding both bloat and gaps.

Completeness5/5

The tool surface provides complete coverage for the Google Calendar domain. It includes full CRUD operations for events, comprehensive querying tools (daily agenda, weekly summary, list events, search), and supporting utilities (free/busy checks, current time reference, calendar listing). There are no obvious gaps, ensuring agents can handle all common calendar workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/murphy360/mcp_google_calendar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server