Allow AI systems to list, create, update, and manage Google Calendar events.
Runs on your machine from its package; the steps are below.
At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y google-cal-mcp
MCP client config
{
"mcpServers": {
"google-calendar": {
"command": "npx",
"args": [
"-y",
"google-cal-mcp"
]
}
}
}Run
npx -y google-cal-mcp
MCP client config
{
"mcpServers": {
"google-calendar": {
"command": "npx",
"args": [
"-y",
"google-cal-mcp"
]
}
}
}MCP server for Google Calendar - list, create, update, and manage calendar events.
Schedule meetings: "Set up a 30-min sync with Sarah next week" → finds a free slot, creates the event with a Meet link, and sends the invite.
RSVP to invites: "Accept the team offsite but decline the vendor demo" → responds to pending invitations automatically.
Find availability: "When am I free this Thursday afternoon?" → queries your calendar and returns open slots.
Reschedule events: "Move my 1:1 with Alex to Friday at 2pm" → updates the event and notifies attendees.
Daily briefing: "What's on my calendar today?" → lists all events with times, locations, and attendees.
Block focus time: "Block 2 hours tomorrow morning for deep work" → creates a calendar event to protect your time.
(These are just examples - any workflow that needs calendar access can use this.)
http://localhost:3000/callback to Authorized redirect URIsGOOGLE_CLIENT_ID='your-client-id' \
GOOGLE_CLIENT_SECRET='your-client-secret' \
MCP_TRANSPORT=http \
npm start
The server runs on http://localhost:3000 by default. Change with PORT=3001.
With the server running, follow the instructions on install-mcp, which generates the right config for your MCP client (Claude Code, Claude Desktop, Cursor, Cline, VS Code, and more).
This server acts as an OAuth proxy to Google:
graph LR
A[MCP client] <--> B[google-cal-mcp] <--> C[Google OAuth/API]
/.well-known/oauth-authorization-server/register returns the Google OAuth client credentials/authorize redirects to Google, encoding the client's callback URL in state/callback receives the code from Google and forwards to the client's callback/token proxies token requests to Google, injecting client credentials/mcp handles MCP requests, using the bearer token to call Calendar APIThe server holds no tokens or state - it just proxies OAuth to Google.
| Tool | Description |
|---|---|
| Calendars | |
calendars_list | List all calendars the user has access to |
calendarlist_insert | Subscribe to a shared calendar |
calendarlist_update | Update calendar settings (color, visibility, reminders) |
calendarlist_delete | Unsubscribe from a calendar |
| Events | |
events_list | List events in a time range with search/filter |
event_get | Get details of a specific event |
event_create | Create a new event with attendees and Meet link |
event_update | Update an existing event |
event_delete | Delete an event |
event_respond | RSVP to an invitation (accept/decline/tentative) |
event_move | Move event to a different calendar |
event_instances | Get instances of a recurring event |
| Availability | |
freebusy_query | Find free/busy times for scheduling |
| Sharing | |
acl_list | List who has access to a calendar |
| Colors | |
colors_get | Get available color palette for calendars/events |
calendar - Full access to calendarscalendar.events - Read/write eventsPull requests are welcomed on GitHub! To get started:
npm installnpm run test to run testsnpm run buildVersions follow the semantic versioning spec.
To release:
npm version <major | minor | patch> to bump the versiongit push --follow-tags to push with tags