Skip to main content

Remote MCP connector wrapping gcal-mcp with Google OAuth 2.0 over Streamable HTTP

Project description

gcal-mcp-remote

Remote MCP server wrapping gcal-mcp with Google OAuth 2.0 and Streamable HTTP transport — designed for Claude.ai connectors.

How it works

Claude.ai ──HTTP+Bearer──> gcal-mcp-remote ──Google API──> Google Calendar
                                │
                          imports gcal-mcp's FastMCP (all 14 tools)
                          patches get_client() with per-request ContextVar
                          adds Google OAuth + /health + /oauth/callback

Three-party OAuth: Claude ↔ this server ↔ Google. Each user authorizes their own Google Calendar via OAuth. The server stores per-user Google refresh tokens (encrypted at rest).

Prerequisites

  1. A Web application OAuth client in Google Cloud Console:
    • Create Credentials → OAuth client ID → Type: Web application
    • Add authorized redirect URI: {BASE_URL}/oauth/callback
    • Note the Client ID and Client Secret
  2. Google Calendar API enabled in the same project

Setup

git clone https://github.com/ldraney/gcal-mcp-remote.git
cd gcal-mcp-remote
cp .env.example .env
# Edit .env with your Google OAuth credentials, BASE_URL, and SESSION_SECRET
make install
make run

Environment Variables

Variable Description
GCAL_OAUTH_CLIENT_ID Google OAuth Web application client ID
GCAL_OAUTH_CLIENT_SECRET Google OAuth Web application client secret
SESSION_SECRET Random secret for encrypting token store
BASE_URL Public HTTPS URL where this server is reachable
HOST Bind address (default: 127.0.0.1)
PORT Listen port (default: 8001)

Verification

curl http://127.0.0.1:8001/health                                    # {"status": "ok"}
curl http://127.0.0.1:8001/.well-known/oauth-authorization-server    # OAuth metadata
curl -X POST http://127.0.0.1:8001/mcp                               # 401 (auth required)

Deploying

Standalone

Use any HTTPS tunnel (Tailscale Funnel, ngrok, Cloudflare Tunnel) to expose the server publicly, then add the URL as a Claude.ai connector.

A systemd service file is provided in systemd/gcal-mcp-remote.service.

Kubernetes (production)

Production deployment is managed by mcp-gateway-k8s, which runs this server as a pod with Tailscale Funnel ingress. That repo contains the Dockerfile, K8s manifests, and secrets management.

Full integration testing (Claude.ai connector → OAuth → Google Calendar) is tracked in mcp-gateway-k8s#12 and #6.

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gcal_mcp_remote_ldraney-0.1.1.tar.gz (12.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gcal_mcp_remote_ldraney-0.1.1-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

Details for the file gcal_mcp_remote_ldraney-0.1.1.tar.gz.

File metadata

  • Download URL: gcal_mcp_remote_ldraney-0.1.1.tar.gz
  • Upload date:
  • Size: 12.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.2

File hashes

Hashes for gcal_mcp_remote_ldraney-0.1.1.tar.gz
Algorithm Hash digest
SHA256 d00d62cb332865d9b5c5c2b0f40e1223497742f438451b50e311ee3bed1693c0
MD5 2afcf065e13311da812029cd2fc48a13
BLAKE2b-256 07549d40bf4a82063a666daf7b102a541d405f4b0e9274af8e6bed5a8400e6d0

See more details on using hashes here.

File details

Details for the file gcal_mcp_remote_ldraney-0.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for gcal_mcp_remote_ldraney-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 5cf7f2c5706edb4e833a25efdf1b83e874c31c43d2b467488bb9af7bbf2fac28
MD5 8cf12e022c729c8ed7794430ff8f47f4
BLAKE2b-256 eacf96cad6a4df220460a589677dfb2311dea5657805562e6a9354e374901933

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page