LABSCO SUMMARY
Two processes, because auth and access are genuinely different jobs.
Splitting the OAuth dance into its own service is why the MCP server never has to think about consent screens or refresh timing — it reads a session file and gets on with the API. The cost is that both have to be running, and the first-run sequence matters: sign in before starting the MCP server, or there is nothing for it to read. Because the OAuth client is one you created, the consent and the token both stay yours.
What it is
Two servers that work together: a FastAPI OAuth service that runs Google's authorization flow and stores the access and refresh tokens locally, and an MCP server that uses those saved credentials to talk to the Google Calendar API v3 over streamable HTTP.
What you get
- Natural-language interaction with your calendar through a Calendar API v3 wrapper
- A separate OAuth server that handles the consent flow and refreshes access tokens as they expire
- Tokens written to a local
session.jsonrather than held by a third party - Typed definitions for the Calendar v3 API in the codebase, so the tool surface tracks the real API rather than an approximation
Requirements
Your own Google Cloud OAuth 2.0 client: create or select a project, enable the Google Calendar API, create a Desktop App OAuth client id, add test user emails to the audience, and download the credentials as client_secret.json into the project root. Then poetry install, start the OAuth server with poetry run uvicorn src.main:app --host 0.0.0.0 --port 8000 and complete the browser sign-in, which writes session.json. Start the MCP server with poetry run python src/server.py; it serves at http://localhost:8080/mcp. Claude Desktop reaches it through npx mcp-remote pointed at that URL. The project is google-calendar-mcp-server (version 0.1.0).
Setup effort
Build from source — git clone https://github.com/sohamkapileshwar2/google-calendar-mcp-server.git
USE CASES
Asking what is on your calendar
Query events in a time range through conversation instead of switching to the web UI.
Adding an event from a discussion
Create the entry with its details while you are still talking about the thing it is for.
Keeping the credentials local
Run your own OAuth client so the tokens live in a session file on your machine rather than with a hosted connector.
Connecting a stdio-only client
Bridge Claude Desktop to the local HTTP endpoint through mcp-remote rather than needing native HTTP support.
BEFORE YOU INSTALL
What to know first
Requires
- Python 3.12 and Poetry
- client_secret.json — an OAuth 2.0 Client ID of type Desktop App from the Google Cloud Console (Google Calendar API enabled, your email added as a test user), placed in the project root
- npx on PATH
Where it runs
The documented client runs the server on your machine.
INSTALLATION
Connect your client
This one is built from source rather than installed with a single command.
Server setup
Have Python 3.12 and Poetry (https://python-poetry.org/) installed — the project uses Poetry for dependency management.
git clone https://github.com/sohamkapileshwar2/google-calendar-mcp-server.git
cd google-calendar-mcp-serverStep 1: Set Up Google API Credentials
Go to the Google Cloud Console (https://console.cloud.google.com/apis/dashboard), create or select a project, and enable the Google Calendar API.
Go to Credentials → Create OAuth 2.0 Client ID: choose Desktop App, set branding and add test user emails in audience.
Download the OAuth credentials as client_secret.json and place this file in the root directory of the project.
Step 2: Install Dependencies
poetry installStep 3: Start the OAuth Server
poetry run uvicorn src.main:app --host 0.0.0.0 --port 8000This should automatically open a browser for OAuth authentication (if not, visit http://0.0.0.0:8000/google_oauth/). On success, a session.json file is created with your access/refresh tokens.
Step 4: Run the MCP Server
poetry run python src/server.pyThis launches a streamable MCP-compatible HTTP server at http://localhost:8080/mcp.
Step 5: Connect MCP Client (Claude Desktop)
Add the Claude Desktop entry on this page to the config file at ~/Library/Application Support/Claude/claude_desktop_config.json.
Step 6: Verify Integration
Open Claude Desktop settings — if the MCP server was added correctly, it will appear under Settings → Integrations.
MCP Clients
Claude Desktop
{
"mcpServers": {
"google-calendar-mcp": {
"command": "npx",
"args": [
"mcp-remote",
"http://localhost:8080/mcp"
]
}
}
}