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
- 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
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| gcal_mcp_remote_ldraney-0.2.0.tar.gz | 6.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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