Skip to main content
Glama
Google Calendar MCP Server

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

Inputs: summary (required), end_date, location, timezone, +7 more. Returns: result

delete_eventDelete EventC

Delete a calendar event.

Inputs: event_id (required), calendar_id. Returns: result

get_calendarGet CalendarB

Get metadata for a specific calendar.

Inputs: calendar_id (required). Returns: result

get_eventGet EventB

Get a single event by ID.

Inputs: event_id (required), calendar_id. Returns: result

list_calendarsList CalendarsB

List all calendars the user has access to.

Inputs: page_token. Returns: result

list_eventsList EventsC

List events from a calendar within a time range.

Inputs: order_by, time_max, time_min, page_token, +2 more. Returns: result

query_freebusyQuery FreebusyA

Check free/busy status for one or more calendars in a time range.

Inputs: time_max (required), time_min (required), calendar_ids. Returns: result

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"

Inputs: text (required), calendar_id. Returns: result

search_eventsSearch EventsB

Full-text search across event summaries, descriptions, and locations.

Inputs: query (required), time_max, time_min, calendar_id, +1 more. Returns: result

update_eventUpdate EventA

Update an existing calendar event. Only provided fields are changed.

Inputs: event_id (required), summary, end_date, location, +7 more. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    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
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers