Skip to main content

PyPI License: MIT Python 3.10+

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.

Privacy

See PRIVACY.md for our privacy policy.

License

MIT

Metadata

Release files for gcal-mcp-remote-ldraney 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gcal-mcp-remote-ldraney 0.2.0
File Size Uploaded
gcal_mcp_remote_ldraney-0.2.0.tar.gz 6.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gcal-mcp-remote-ldraney 0.2.0
File Interpreter ABI Platform
gcal_mcp_remote_ldraney-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 14.7 kB

Release files / gcal_mcp_remote_ldraney-0.2.0.tar.gz

Download URL gcal_mcp_remote_ldraney-0.2.0.tar.gz
Size 6.8 kB
Tags Source
SHA-256 checksum
How to use checksums
3b542b01be3b1e71b67e7ab8ea7d53a1349aa6b9c58558abf24f090e251dda32
BLAKE2b-256 checksum
How to use checksums
cffd948807068d0b66470d666c18a3789a59fffec01a50f7d9e3a0d60f667d77
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 20, 2026.

Transparency log

Release files / gcal_mcp_remote_ldraney-0.2.0-py3-none-any.whl

Download URL gcal_mcp_remote_ldraney-0.2.0-py3-none-any.whl
Size 7.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c54cc5fa714572ea5b53c440b500f2319fc47d9c3403db97cbb6c687e90268b9
BLAKE2b-256 checksum
How to use checksums
39bf7300d2bfa457496e230e64147aaf29efca7c8626ece5b425bfe9e09b5d96
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Feb 20, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.0 This release

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page