Community Productivity
Google Calendar
Read + create + update Google Calendar events across multiple calendars.
1,200 stars 335 forks Last commit 5d ago Language TypeScript License MIT
Install
npm install -g google-calendar-mcp Maintain this server? Add the badge
Show your README readers it's in a curated directory — and give them a one-click path to install docs and config.
Markdown
[](https://pulse-3k2.pages.dev/mcp/google-calendar) Theme-aware version (auto dark/light on GitHub) →
<a href="https://pulse-3k2.pages.dev/mcp/google-calendar"><picture><source media="(prefers-color-scheme: dark)" srcset="https://pulse-3k2.pages.dev/api/badge/mcp/google-calendar.svg?theme=dark"><img alt="Listed on Prismix" src="https://pulse-3k2.pages.dev/api/badge/mcp/google-calendar.svg"></picture></a> About
Google Calendar API bridge. Event listing + filter + search, event creation + update + deletion, calendar listing + permissions. OAuth flow.
Recent releases (5)
All releases →- v2.7.0 Latest Sep 28, 2026
## Highlights **Service account authentication** (#192, thanks @korkin25) Run the server without a browser sign-in: point `GOOGLE_SERVICE_ACCOUNT_KEY` at a service account key and share your calendar with the account's email. Works with personal Gmail calendars, and with Google Workspace through domain-wide delegation (`GOOGLE_SERVICE_ACCOUNT_SUBJECT`). See [Service Account Authentication](https://github.com/nspady/google-calendar-mcp#service-account-authentication-optional) in the README. **Web application OAuth credentials** (#209, thanks @stanBienaives) The credentials file can now come from a "Web application" OAuth client (a `"web"` object) as well as a Desktop app client. For the local sign-in flow, register `http://localhost:3500/oauth2callback` through `3505` on the client. The HTTP transport's `/accounts` page doesn't support web clients yet (#210). ## Upgrade notes Existing installs keep working: saved tokens load as before, no re-authentication is needed, and no tools or tool inputs were removed. A few things are stricter or behave differently: - **Node.js 20 or newer is required.** The Docker image now uses Node 22. - **Invalid configuration now stops startup with a clear error** instead of being ignored or partly parsed. This covers an unknown `--transport` value and, in HTTP mode, a `PORT`/`--port` that isn't an integer from 1 to 65535. The server prints its resolved configuration to stderr on startup. - **Time zones are validated.** `timeZone` values the runtime doesn't recognize (e.g. `"UTC+2"`) are rejected. Previously, read tools silently treated them as UTC. - **Event writes no longer guess UTC.** If the calendar's time zone can't be fetched (timeout, rate limit, server error) and the request has no explicit time zone, create and update now return an error instead of creating the event at the wrong time. Retrying is safe. - **`manage-accounts list` can report `needs-reauth`** for an account whose refresh token was revoked. - **Token file handling:** `tokens.json` is now written to a temp file and renamed into place, so its directory must be writable. If it was a symlink, it becomes a regular file. A corrupt `tokens.json` is moved aside to `tokens.json.corrupt-<timestamp>` instead of being deleted. - **`GOOGLE_APPLICATION_CREDENTIALS` is only used as a fallback** when the server has no OAuth credentials file of its own, so it never overrides a working OAuth install. If you rely on the default `gcp-oauth.keys.json`, set `GOOGLE_OAUTH_CREDENTIALS` explicitly: an explicit path that can't be read fails startup instead of falling back. ## Fixes Repo hardening (#200): a CI test gate, central validated configuration, safer token writes, and fixes for several errors that were previously swallowed silently. --- ## Changelog ### Features * **auth:** service account authentication (works with personal [@gmail](https://github.com/gmail).com calendars) ([#192](https://github.com/nspady/google-calendar-mcp/issues/192)) ([84583fc](https://github.com/nspady/google-calendar-mcp/commit/84583fc355407497a5bf8bb63b8a6add2b808df6)) * **auth:** support OAuth credentials in `web` (Web application) format ([830b5df](https://github.com/nspady/google-calendar-mcp/commit/830b5df1579591549ef81abece7f594bb2fcce1e)) ### Bug Fixes * **auth:** recognize web-format credentials in service account detection; document web client redirect URIs ([0215a42](https://github.com/nspady/google-calendar-mcp/commit/0215a42ed24812cd1f6bc477e51d517420ffda60)) * keep explicit OAuth credentials from falling back to a service account; ignore PORT in stdio mode ([#211](https://github.com/nspady/google-calendar-mcp/issues/211)) ([e0d05b7](https://github.com/nspady/google-calendar-mcp/commit/e0d05b77f4947913faec96fc647a7218c2423a42)) * repo hardening (CI test gate, central config, silent-failure and token fixes) ([#200](https://github.com/nspady/google-calendar-mcp/issues/200)) ([72afe99](https://github.com/nspady/google-calendar-mcp/commit/72afe99
View on GitHub ↗ - v2.6.3 Sep 2, 2026
## [2.6.3](https://github.com/nspady/google-calendar-mcp/compare/v2.6.2...v2.6.3) (2026-09-02) ### Bug Fixes * **http:** address review feedback on per-session transport ([c7fcf14](https://github.com/nspady/google-calendar-mcp/commit/c7fcf14336372cd06eaa96416ddc58ee3e04f7b8)) * **http:** harden session transport handling ([d71467b](https://github.com/nspady/google-calendar-mcp/commit/d71467b394ce3dc5aff9b70ed10e6188831414fc)) * **http:** harden session transport handling ([c3255b4](https://github.com/nspady/google-calendar-mcp/commit/c3255b40891002c7436935201dcc8343200573b6)) * **http:** per-session StreamableHTTP transports ([985cffd](https://github.com/nspady/google-calendar-mcp/commit/985cffd092403a5ef30d3c331fd6edc4b36626bb)) * **http:** use per-session StreamableHTTP transports ([7c393dc](https://github.com/nspady/google-calendar-mcp/commit/7c393dce68c2db76eb1b8714c0bb9d76a8c452af)) * **review:** close init transport whose handshake never commits a session ([023a8d2](https://github.com/nspady/google-calendar-mcp/commit/023a8d28e31e1e8986ae6aef5b672a9e19b02d91))
View on GitHub ↗ - v2.6.2 Jun 1, 2026
## [2.6.2](https://github.com/nspady/google-calendar-mcp/compare/v2.6.1...v2.6.2) (2026-06-01) ### Bug Fixes * replace z.string().email() with RE2-safe regex ([#184](https://github.com/nspady/google-calendar-mcp/issues/184)) ([0c5bf49](https://github.com/nspady/google-calendar-mcp/commit/0c5bf490da97afb534bfd823414221d25efcc524))
View on GitHub ↗ - v2.6.1 Mar 2, 2026
## [2.6.1](https://github.com/nspady/google-calendar-mcp/compare/v2.6.0...v2.6.1) (2026-03-02) ### Bug Fixes * **ci:** remove registry-url so npm OIDC handles auth ([385fd02](https://github.com/nspady/google-calendar-mcp/commit/385fd02875555aeceb9cb94a259b6d2a96493174)) * **ci:** upgrade npm to 11.5.1+ for OIDC trusted publishing ([934b5b5](https://github.com/nspady/google-calendar-mcp/commit/934b5b58b47a615abe968517adc9df0f25daf633))
View on GitHub ↗ - v2.6.0 Mar 2, 2026
## [2.6.0](https://github.com/nspady/google-calendar-mcp/compare/v2.5.0...v2.6.0) (2026-02-28) ### Features * add PKCE and state parameter validation for OAuth security ([#173](https://github.com/nspady/google-calendar-mcp/issues/173))
View on GitHub ↗
Discussion (0)
Sign in to comment →No comments yet. Sign in to start the discussion.