Skip to main content
Glama
volodymyrkoval

Google Calendar MCP Server

Google Calendar MCP Server Tutorial

A tutorial project demonstrating how to build a Model Context Protocol (MCP) server that integrates with Google Calendar. This server exposes Google Calendar functionality as tools that AI assistants can use.

Note: This is an educational project for learning MCP server development. It is not intended for production use.

Table of Contents

Overview

This MCP server provides AI assistants with the ability to:

  • List and manage calendars

  • Create, read, update, and delete calendar events

  • Query events with filters (time range, search terms, etc.)

Built with FastMCP for the MCP server implementation and the Google Calendar API for calendar operations.

Prerequisites

  • Python 3.12 or higher

  • uv package manager

  • A Google Cloud project with Calendar API enabled

  • OAuth 2.0 credentials (Desktop app type)

Project Structure

google-calendar-mcp-server-tutorial/
├── main.py                 # MCP server entry point
├── config.py               # Configuration management
├── auth.py                 # Google OAuth2 authentication
├── logger.py               # Logging utilities
├── service_factory.py      # Factory for Google API services
├── models/                 # Pydantic request models
│   ├── calendar/           # Calendar metadata models
│   ├── calendars_list/     # Calendar list models
│   └── event/              # Event operation models
├── services/               # Google Calendar API service layer
│   ├── calendar_service.py
│   ├── calendar_list_service.py
│   └── event_service.py
└── tools/                  # MCP tool definitions
    ├── calendar.py
    ├── calendar_list.py
    └── event.py

Setup

1. Clone the Repository

git clone <repository-url>
cd google-calendar-mcp-server-tutorial

2. Install Dependencies

uv sync

3. Configure Google Cloud

  1. Go to the Google Cloud Console

  2. Create a new project or select an existing one

  3. Enable the Google Calendar API:

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

    • Search for "Google Calendar API" and enable it

  4. Create OAuth 2.0 credentials:

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

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

    • Select "Desktop app" as the application type

    • Download the JSON file

  5. Save the downloaded file as client_secret.json in the project root

4. Configure Claude Desktop

Add the server to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "GoogleCalendar": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/google-calendar-mcp-server-tutorial",
        "run",
        "main.py"
      ]
    }
  }
}

Replace /path/to/google-calendar-mcp-server-tutorial with the actual path to your project directory.

On first run, a browser window will open for Google OAuth authentication. After authentication, a token.json file will be created to store your credentials.

Available Tools

The server exposes the following MCP tools:

Calendar Tools

Tool

Description

list_calendars

List all calendars in the user's calendar list

get_calendar

Get metadata for a specific calendar

Event Tools

Tool

Description

list_events

List events from a calendar with optional filters

get_event

Get details of a specific event

create_event

Create a new calendar event

update_event

Update an existing event

delete_event

Delete an event from a calendar

Architecture

The project follows a layered architecture:

MCP Client (Claude Desktop)
        ↓
MCP Server (main.py + FastMCP)
        ↓
Tools (tools/) ←── Models (models/)
        ↓
Services (services/)
        ↓
Google Calendar API
  • Tools - Define MCP tools that Claude can call, using Pydantic models for input validation

  • Services - Handle business logic and Google Calendar API communication

  • Service Factory - Dependency injection for creating and caching service instances

Configuration

Configuration is managed through config.py:

Setting

Default

Description

client_secret_path

./client_secret.json

Path to OAuth client secrets

token_path

./token.json

Path to stored OAuth token

log_file_path

./server.log

Path to log file

log_level

DEBUG

Logging level (configurable via LOG_LEVEL env var)

Tech Stack

License

This project is for educational purposes.

F
license - not found
-
quality - not tested
C
maintenance

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

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/volodymyrkoval/fastmcp'

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