Google Calendar MCP Server
Enables management of Google Calendar events across multiple calendars, including searching events, checking availability, creating and updating events with natural language or structured input, managing event invitations, and auto-generating Google Meet links.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Google Calendar MCP Serverschedule a team meeting for tomorrow at 2pm with a Google Meet link"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Google Calendar MCP Server
This server is a remote Model Context Protocol (MCP) server for Google Calendar. A model can use it to list calendars, find events, check free and busy times, create, change, move and delete events, and answer invitations. The server runs on Cloudflare Workers and on Bun. It uses the MCP server template 2.1 and the official MCP TypeScript SDK 2.3.0.
The server URL is the deployed Worker's MCP_PUBLIC_URL, for example https://google-calendar.<subdomain>.workers.dev/mcp.
The server uses protocol version 2026-07-28. It also accepts clients that use the 2025 protocol versions.
You connect this server to your MCP client at your own risk. A model can make mistakes. Examine what the tools do, and examine the changes in your calendar. The tools can delete events and can send updates to attendees.
Tools
Tool | Function |
| Lists the calendars of the user, with their IDs, access roles and time zones. |
| Finds events in all readable calendars (the default), in one calendar, or in a list of calendars. It filters by time range, text and event type. The text match is a substring match on the title, description, location and attendees. |
| Shows the busy times of one or more calendars in a time range. |
| Makes an event from a sentence (Google's quick add) or from fields: title, start, end, attendees, Google Meet, recurrence, reminders. |
| Changes the given fields of an event. It can also move the event to another calendar. |
| Deletes an event. |
| Sets the user's answer to an invitation: accepted, declined or tentative. |
By default, create_event, update_event and delete_event send no notification to attendees (sendUpdates: none). respond_to_event notifies everyone (sendUpdates: all). If Google cannot find an event under the owner's email address, the server tries again with primary.
Related MCP server: Google Calendar MCP
Connect a client
Use the server URL and the Streamable HTTP transport. The client signs you in with Google the first time.
Client | Procedure |
Claude | In Settings → Connectors, add a custom connector with the server URL. |
Claude Code | Run |
MCP Inspector | Run |
Alice and Wonderlands use the same URL.
Authentication
The server is its own OAuth authorization server, in front of Google's OAuth. MCP clients do not receive Google tokens.
The client registers at
/registerand signs the user in at/authorize. The client must use PKCE S256.The server sends the user to Google. Google asks for the two Calendar scopes.
Google returns the user to the server's
/oauth/callback. The server keeps the Google tokens, encrypted.The client gets a code, and exchanges the code at
/tokenfor an access token and a refresh token. These tokens are opaque and have meaning only for this server.On each MCP request, the server finds the Google token for the access token. If the Google token expires in less than one minute, the server refreshes it first. The tools use the Google token. They do not see the client's token.
For the complete flow, the storage and the redirect rules, refer to docs/oauth.md.
Configuration
The deployment settings are in wrangler.production.jsonc (Workers; gitignored, with wrangler.production.example.jsonc as its shape) or .env (Bun). .env.example describes all variables.
Variable | Production value | Function |
|
| The public URL of the MCP endpoint. It is also the resource that tokens are issued for. |
|
| The |
| The server host, | The browser origins that the server accepts. |
|
| The server checks the tokens that it issued. |
| This server's origin, | The authorization server that clients use. The server does not start if they name another server. |
| The two Calendar scopes | The scopes that every MCP request must have. |
| The callbacks of Alice, Claude and the operator's other clients | The client redirect URIs that the proxy accepts, in addition to native loopback URIs. |
|
| The largest MCP request body. |
|
| The server also accepts 2025-era clients. |
Secrets:
Secret | Function |
| The server's Google OAuth client ID. |
| The server's Google OAuth client secret. |
| 32 random bytes, base64url. The key encrypts the stored tokens. If you change it, all users must sign in again. |
In production, the server does not start without these three secrets. The Google endpoints, the Calendar scopes and the offline-access parameters are constants in src/services/google-oauth.ts. For the setup at Google and at Cloudflare, refer to docs/deploy.md.
Development
Requirements: Bun 1.4 or later, and Node.js 22.18 or later.
Install the dependencies:
bun installCopy
.env.exampleto.env. SetPROVIDER_CLIENT_ID,PROVIDER_CLIENT_SECRETandTOKENS_ENC_KEY. At Google, allow the redirect URIhttp://127.0.0.1:3000/oauth/callback.Start the server:
bun run devThe server URL is
http://127.0.0.1:3000/mcp. To use the Cloudflare local runtime, runbun run dev:worker(port 8787). Put its secrets in.dev.vars.Before you commit, run the checks:
bun run check bun run test:smoke
bun run check does the type check, the lint check and the tests. bun run test:smoke starts the real server on Bun and on workerd. It signs in through a Google stand-in on loopback and calls the tools. No test uses the network.
Script | Function |
| Starts the server on Bun. |
| Starts the server in the Cloudflare local runtime. |
| Type check, lint check, tests, and the check of the generated Worker types. |
| Smoke tests on Bun and on workerd. |
| Deploys with the gitignored |
| Makes the Worker types again after a change to |
Project structure
src/
server.ts Identity, Runtime, Deps, and the hooks that connect the OAuth proxy
settings.ts The Google client, the encryption key, the redirect allowlist
tools/ One file for each tool; shared/ has schemas and helpers
services/ The Google Calendar API client, and google-oauth.ts: Google as the OAuth provider
oauth/ The OAuth proxy. It is the same for every provider (docs/oauth.md)
platform/ Template code. Do not change it
bun.ts Entry point for Bun: file storage
worker.ts Entry point for Workers: KV and the NativeOAuthAuthority Durable Object
tests/ Tests for the tools, the proxy and the platform; fixtures from before 1.1.0
scripts/ Smoke tests and the Google stand-inFor the template's concepts (the request path, defineTool, the error policy, the configuration checks), refer to the template documentation.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Manage Google, Outlook & Apple calendars and create private sync rules from chat.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Schedule and manage Google Calendar events directly from your workspace. Check availability, view…
Sync Google, Outlook, and iCloud calendars and manage events, availability, and booking links.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables managing Google Calendar events including creating, listing, updating, and deleting events through natural language.10 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to view, create, update, search, and manage Google Calendar events, including multi-account support and availability checks.5 npmBusiness Source 1.1
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to manage Google Calendar events, including reading, searching, creating, updating, and deleting events, as well as checking availability and listing calendars.176 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables AI to create, read, update, and delete Google Calendar events and manage calendars through natural language.2-