Skip to main content
Glama
jeffmm

gcal-fast-mcp

by jeffmm
README.md
# gcal-fast-mcp

Google Calendar MCP server built with [FastMCP](https://github.com/jlowin/fastmcp). Provides 10 tools for calendar management, event CRUD, and availability queries via the Google Calendar API v3.

## Setup

### 1. Google OAuth Credentials

Place your Google Cloud OAuth client credentials at `~/.gcal-mcp/gcp-oauth.keys.json` (or in the project directory — they'll be copied automatically).

If you already have a GCP project configured for another Google API (e.g. gmail-fast-mcp), you can reuse the same OAuth client — just enable the Google Calendar API in that project.

### 2. Authenticate

```bash
uv run python -m gcal_fast_mcp auth
```

This opens a browser for the OAuth flow and saves tokens to `~/.gcal-mcp/credentials.json`.

For cloud environments with a custom callback URL:

```bash
uv run python -m gcal_fast_mcp auth https://your-domain.com/oauth2callback
```

### 3. Run the Server

```bash
uv run python -m gcal_fast_mcp
```

### MCP Client Configuration

```json
{
  "mcpServers": {
    "google-calendar": {
      "command": "uv",
      "args": ["--directory", "/path/to/gcal-fast-mcp", "run", "google-calendar-fast-mcp"]
    }
  }
}
```

## Tools

| Tool | Description |
|------|-------------|
| `list_calendars` | List all calendars the user has access to |
| `get_calendar` | Get details of a specific calendar |
| `list_events` | List events within a time range (supports search, recurring expansion) |
| `get_event` | Get full details of a single event |
| `create_event` | Create a new event with attendees, location, etc. |
| `update_event` | Update an existing event (partial updates supported) |
| `delete_event` | Delete an event |
| `quick_add` | Create an event from natural language (e.g. "Lunch tomorrow at noon") |
| `check_availability` | Check free/busy status for one or more calendars |

## Configuration

Environment variables (prefix `GCAL_`):

| Variable | Default | Description |
|----------|---------|-------------|
| `GCAL_OAUTH_PATH` | `~/.gcal-mcp/gcp-oauth.keys.json` | OAuth client secrets file |
| `GCAL_CREDENTIALS_PATH` | `~/.gcal-mcp/credentials.json` | Saved OAuth tokens |
| `GCAL_DEFAULT_CALENDAR` | `primary` | Default calendar ID |
| `GCAL_MAX_RESULTS` | `50` | Default max events returned |

## Google Calendar API Scopes

- `calendar` — Full calendar access
- `calendar.events` — Event CRUD operations

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

Each tool targets a distinct resource+action combination: calendars vs events are clearly separated, and get/list/create/update/delete are unambiguous. quick_add and check_availability are additional distinct operations. Only slight potential confusion exists between list_events and check_availability, though they serve different purposes (event detail vs busy windows).

Naming Consistency5/5

All tools follow a consistent verb_noun pattern: list_calendars, get_calendar, list_events, get_event, create_event, update_event, delete_event. quick_add and check_availability deviate slightly but are well-established domain terms that read naturally and don't break the overall pattern.

Tool Count5/5

Nine tools is well within the ideal 3-15 range. Each tool serves a meaningful purpose for a Google Calendar MCP server: full CRUD on calendars and events, plus two useful extras (NLP quick add and availability checking). No tool feels redundant or padding.

Completeness5/5

The surface provides full lifecycle coverage for both calendars (list, get) and events (list, get, create, update, delete). quick_add and check_availability round out common user workflows. Missing operations like moving events or managing reminders are minor and not core to basic calendar operations.

Maintenance

ActivityStale
ResponsivenessNo issues