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.0.tar.gz (12.1 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.0-py3-none-any.whl (13.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: gcal_mcp_remote_ldraney-0.1.0.tar.gz
  • Upload date:
  • Size: 12.1 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.0.tar.gz
Algorithm Hash digest
SHA256 8968d40369766579ae161602c75ce05205f31ed5d89362544d0417311034b7c8
MD5 7320343410e92cc08b412c453f588b7e
BLAKE2b-256 ad25a9a55ca225e08f2bf56012225b9d2dff191b10ee7dd352a63c05b92a2bb8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gcal_mcp_remote_ldraney-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 3ce6f3b4bc1f8e88ef59e33d1c88564f28266fcfc4bd427af7d430bcec8f63ad
MD5 b409d9b6e0db66481937bbdbec8ee139
BLAKE2b-256 452ac8e072a6f701cbb7be01da40581c7e08066d478c1768cbba185511b5a9c1

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