gcal-mcp
A Google Calendar MCP server using OAuth2 bearer token auth via the Dedalus MCP framework.
Tools
Calendars
gcal_list_calendars- List all calendars accessible by the usergcal_get_calendar- Get details of a specific calendargcal_create_calendar- Create a secondary calendargcal_delete_calendar- Delete a secondary calendargcal_clear_calendar- Clear a calendar (deletes all events)gcal_patch_calendar- Patch calendar metadatagcal_update_calendar- Update calendar metadata (full replace)
Calendar List
gcal_calendarlist_get- Get a calendar list entrygcal_calendarlist_insert- Insert an existing calendar into the user's calendar listgcal_calendarlist_delete- Remove a calendar from the user's calendar listgcal_calendarlist_patch- Patch a calendar list entrygcal_calendarlist_update- Update a calendar list entry (full replace)
Events
gcal_list_events- List events from a calendargcal_get_event- Get a specific event by IDgcal_search_events- Search for events by text querygcal_get_event_instances- Get instances of a recurring eventgcal_create_event- Create an eventgcal_delete_event- Delete an eventgcal_patch_event- Patch an event (partial update)gcal_update_event- Update an event (full replace)gcal_quick_add_event- Quick add an event from a text stringgcal_move_event- Move an event to another calendargcal_import_event- Import an event (creates a private copy)
Free/Busy
gcal_get_freebusy- Query free/busy information for calendars
Settings
gcal_get_settings- Get user's calendar settingsgcal_get_setting- Get a specific calendar setting
Colors
gcal_get_colors- Get available calendar and event colors
Watch (Webhooks)
gcal_channels_stop- Stop watching a channelgcal_events_watch- Watch for changes to Events resourcesgcal_calendarlist_watch- Watch for changes to CalendarList resourcesgcal_settings_watch- Watch for changes to Settings resources
For MCP Users
Use this section if you want to call the gcal-mcp server from your own application via the Dedalus SDK.
Prerequisites
- A Dedalus API key (
dsk-live-*ordsk-test-*) - The
dedalus-labsPython SDK:pip install dedalus-labs
Quick Start
See src/_client.py for the complete working example.
OAuth Flow
- Your first request raises
AuthenticationErrorwith aconnect_url - Open the URL in a browser to authorize Google Calendar access
- After authorization, retry the request โ credentials are now stored
- Subsequent requests work without re-authorization
For MCP Developers
Use this section if you want to build, modify, or deploy a Google Calendar MCP server like this one.
Project Structure
src/
main.py # Entrypoint โ loads .env and starts the server
server.py # MCPServer setup (port 8080, streamable HTTP)
gcal.py # All 29 Google Calendar tools + API connection
_client.py # Example client with OAuth browser flow
Prerequisites
- Google Cloud project with the Calendar API enabled
- OAuth 2.0 credentials โ create a "Web application" client in the Google Cloud Console and download the client secret JSON
- Dedalus API key (
dsk-live-*ordsk-test-*) - uv package manager
Environment Variables
Copy .env.example and fill in your values:
cp .env.example .env
OAuth configuration (from your Google client secret JSON):
OAUTH_ENABLED=true
OAUTH_AUTHORIZE_URL=https://accounts.google.com/o/oauth2/auth
OAUTH_TOKEN_URL=https://oauth2.googleapis.com/token
OAUTH_CLIENT_ID=<your-client-id>.apps.googleusercontent.com
OAUTH_CLIENT_SECRET=GOCSPX-<your-secret>
OAUTH_SCOPES_AVAILABLE=https://www.googleapis.com/auth/calendar,https://www.googleapis.com/auth/calendar.events
OAUTH_BASE_URL=https://www.googleapis.com/calendar/v3
Dedalus platform:
DEDALUS_API_KEY=dsk-live-...
DEDALUS_API_URL=https://api.dedaluslabs.ai
DEDALUS_AS_URL=https://as.dedaluslabs.ai
Adding a New Tool
- Define an async function in
gcal.pywith the@tooldecorator: - Add it to the
gcal_toolslist at the bottom ofgcal.py
Running Locally
cd gcal-mcp
uv sync
uv run python src/main.py
The server starts on port 8080 and exposes /mcp via streamable HTTP.