Skip to main content
Glama

Google Calendar MCP Server

An MCP (Model Context Protocol) server for managing Google Calendar reminders with support for time-based and location-based triggers.

Features

  • Time-based reminders: "Remind me tomorrow at 9am to call mom"

  • Location-based reminders: "Remind me to go to store X when I'm near Hashalom street in Tel Aviv"

  • List reminders: View upcoming reminders

  • Delete reminders: Remove reminders by ID

Related MCP server: GoogleCalendarMCP

Prerequisites

  • Python 3.11+

  • uv package manager

  • Google Cloud project with Calendar API enabled

Setup

1. Install dependencies

uv sync

2. Set up Google Cloud credentials

  1. Go to Google Cloud Console

  2. Create a new project or select an existing one

  3. Enable the Google Calendar API:

    • Go to "APIs & Services" > "Library"

    • Search for "Google Calendar API"

    • Click "Enable"

  4. Create OAuth 2.0 credentials:

    • Go to "APIs & Services" > "Credentials"

    • Click "Create Credentials" > "OAuth client ID"

    • Choose "Desktop app" as the application type

    • Download the credentials JSON file

  5. Save the credentials file:

    mkdir -p ~/.config/gcalendar-mcp
    mv ~/Downloads/client_secret_*.json ~/.config/gcalendar-mcp/credentials.json

3. First-time authentication

Run the server once to authenticate:

uv run gcalendar-mcp

This will open a browser window for Google OAuth. After authorizing, your credentials will be saved.

Usage with Claude Code

Add to your Claude Code MCP configuration (~/.claude/claude_desktop_config.json):

{
  "mcpServers": {
    "gcalendar": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/gcalendar_mcp", "gcalendar-mcp"]
    }
  }
}

Available Tools

create_time_reminder

Create a time-based reminder.

Parameters:

  • title (required): What to be reminded about

  • time (required): When to remind (natural language supported)

  • description (optional): Additional notes

Examples:

  • "remind me tomorrow at 9 to call mom"

  • "remind me in 2 hours to take a break"

  • "remind me today at 3pm to join the meeting"

create_location_reminder

Create a location-based reminder.

Parameters:

  • title (required): What to be reminded about

  • location (required): The location/address

  • description (optional): Additional notes

  • date (optional): Date for the reminder

Examples:

  • "remind me to buy milk when near the grocery store"

  • "remind me to go to store X when I'm near Hashalom street in Tel Aviv"

Note: Google Calendar doesn't natively support location-based triggers. This creates an event with the location noted. For automatic location notifications, use Google Maps or a dedicated location reminder app.

list_reminders

List upcoming reminders from the calendar.

Parameters:

  • max_results (optional): Maximum number of results (default: 10)

delete_reminder

Delete a reminder by its event ID.

Parameters:

  • event_id (required): The ID of the event to delete

Configuration

You can customize the credentials directory by setting the environment variable:

export GCALENDAR_MCP_CONFIG_DIR=/path/to/custom/config

Development

# Install dev dependencies
uv sync --dev

# Run tests
uv run pytest

License

MIT

Available Tools

4 tools
create_location_reminderA

Create a location-based reminder in Google Calendar. Examples: 'remind me to buy milk when near the grocery store', 'remind me to go to store X when I'm near Hashalom street in Tel Aviv'

ParametersJSON Schema
NameRequiredDescriptionDefault
dateNoOptional date for the reminder (default: today)
titleYesWhat to be reminded about (e.g., 'buy milk', 'pick up package')
locationYesThe location/address that triggers the reminder (e.g., 'Hashalom Street, Tel Aviv', 'Central Station')
descriptionNoOptional additional notes or details

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, and the description only says 'create' without disclosing behavioral traits such as required permissions, side effects, or return behavior. Examples add context but do not compensate for the lack of transparency about the tool's actions.

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 concise (two sentences plus examples) and front-loaded with purpose. Examples are relevant but slightly lengthy; no superfluous text.

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?

The description explains what the tool does and gives usage examples, but it omits what the tool returns (e.g., success indication, created object) and does not discuss error cases. For a creation tool with no output schema, this is a moderate gap.

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 coverage is 100%, so the schema already documents all parameters. The description provides examples that illustrate parameter usage but does not add new semantics beyond the schema 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 creates a 'location-based reminder in Google Calendar,' with specific examples that distinguish it from time-based reminders (sibling create_time_reminder). The verb 'create' and resource 'location-based reminder' are specific.

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 implies usage for location-based reminders versus time-based alternatives (sibling create_time_reminder) through the phrase 'location-based' and examples. However, it does not explicitly state when not to use or name alternatives, though the context is clear.

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

create_time_reminderA

Create a time-based reminder in Google Calendar. Examples: 'remind me tomorrow at 9 to call mom', 'remind me in 2 hours to take a break'

ParametersJSON Schema
NameRequiredDescriptionDefault
timeYesWhen to remind. Supports natural language like 'tomorrow at 9am', 'in 2 hours', 'today at 3pm', or specific dates like '2024-01-15 14:30'
titleYesWhat to be reminded about (e.g., 'call mom', 'take medicine')
descriptionNoOptional additional notes or details

TDQS

A4/5.0
Behavior3/5

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

No annotations provided; description does not disclose side effects, permissions, or response. It only states creation, which is minimally adequate for a simple 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?

Two sentences plus examples; no wasted words. Front-loaded with purpose, then examples. Highly efficient.

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 simple creation tool with no output schema, the description and schema cover purpose and parameters adequately. Missing return value info, but overall 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 coverage is 100% with good descriptions for each parameter. The description adds no new semantic info beyond what the schema provides, meeting baseline.

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 'Create a time-based reminder in Google Calendar' with specific verb and resource. Examples reinforce purpose and distinguish from sibling tools like create_location_reminder.

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?

Examples provide context for when to use (time-based reminders), but no explicit exclusion of location-based reminders or alternatives beyond the sibling tool list.

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

delete_reminderB

Delete a reminder from Google Calendar by its event ID

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesThe ID of the event/reminder to delete

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description must provide behavioral context. It implies a destructive action but does not disclose permanence, error handling, authorization needs, or side effects. The description is too minimal.

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?

Single sentence, front-loaded, no wasted words. Highly concise 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?

For a simple one-parameter delete tool, the description is adequate but incomplete. It does not explain the outcome (e.g., success, no return value) or error cases, which would be helpful given no output schema.

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 coverage is 100%, and the schema already describes event_id. The description adds no new semantics beyond restating 'by its event ID'. Baseline score of 3 is 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?

Description clearly states the verb 'Delete' and the resource 'reminder from Google Calendar' with the method 'by its event ID'. It is unambiguous and distinct from sibling tools (create, list), though it does not explicitly differentiate itself.

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 tool versus alternatives. There is no mention of prerequisites, limitations, or context that would help an agent decide between deleting a reminder and using other operations.

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

list_remindersB

List upcoming reminders and events from Google Calendar

ParametersJSON Schema
NameRequiredDescriptionDefault
max_resultsNoMaximum number of reminders to show (default: 10)

TDQS

B3.4/5.0
Behavior2/5

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

No annotations provided, so description carries full burden. It fails to mention authentication requirements, whether reminders are filtered to future only, or the output format. The term 'upcoming' is vague.

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?

Single sentence, no fluff. Could include more context but still concise and front-loaded with action and resource.

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?

Simple tool with one optional parameter, no output schema. Description is minimal but adequate for a list operation, though it omits details about return type and scope.

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 coverage is 100% with a clear description for max_results. The tool description adds no extra parameter meaning, so baseline 3 is 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?

Clearly states it lists upcoming reminders and events from Google Calendar. The verb 'list' and resource are explicit. Sibling tools are all create/delete, so it stands out as the sole list tool.

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?

No explicit when-not-to-use or alternatives, but since siblings are all create/delete, there is no ambiguity. The description implies using this to view reminders.

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. 4 tool updatesv0.1.0
    • First observedcreate_location_reminder
    • First observedcreate_time_reminder
    • First observeddelete_reminder
    • First observedlist_reminders

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: creating location-based reminders, creating time-based reminders, deleting reminders, and listing reminders. There is no overlap or ambiguity.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern with lowercase snake_case (create_location_reminder, create_time_reminder, delete_reminder, list_reminders). No deviations.

Tool Count5/5

With 4 tools covering creation (two types), deletion, and listing, the set is well-scoped for a reminder management server. Each tool adds clear value.

Completeness4/5

Core operations are present, but an update tool for modifying reminders is missing, which agents may need. This is a minor gap given the scope.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers