Model Context Protocol server enabling LLMs to seamlessly read, create, update, and search Google Calendar events with multi-calendar support, recurring event management, availability queries, and calendar analysis through a standardized interface.
Unlock the full potential of Google Calendar MCP through LangDB's AI Gateway. Get enterprise-grade security, analytics, and seamless integration with zero configuration.
Free tier available • No credit card required
This is a Model Context Protocol (MCP) server that provides integration with Google Calendar. It allows LLMs to read, create, update and search for calendar events through a standardized interface.
Along with the normal capabilities you would expect for a calendar integration you can also do really dynamic, multi-step processes like:
Cross-calendar availability:
Please provide availability looking at both my personal and work calendar for this upcoming week.
Choose times that work well for normal working hours on the East Coast. Meeting time is 1 hour
Add events from screenshots, images and other data sources:
Add this event to my calendar based on the attached screenshot.
Supported image formats: PNG, JPEG, GIF Images can contain event details like date, time, location, and description
Calendar analysis:
What events do I have coming up this week that aren't part of my usual routine?
Check attendance:
Which events tomorrow have attendees who have not accepted the invitation?
Auto coordinate events:
Here's some available that was provided to me by someone.
Take a look at the available times and create an event that is free on my work calendar.
https://www.googleapis.com/auth/calendar.events
(or broader https://www.googleapis.com/auth/calendar
if needed)npm run auth
.npm install
gcp-oauth.keys.json
and place it in the root directory of the project.
cp gcp-oauth.keys.example.json gcp-oauth.keys.json
and populate it with your credentials from the Google Cloud Console.npm run build
- Build the TypeScript code (compiles src
to build
)npm run typecheck
- Run TypeScript type checking without compilingnpm run start
- Start the compiled MCP server (using node build/index.js
)npm run auth
- Manually run the Google OAuth authentication flow.npm test
- Run the unit/integration test suite using Vitestnpm run test:watch
- Run tests in watch modenpm run coverage
- Run tests and generate a coverage reportThe server handles Google OAuth 2.0 authentication to access your calendar data.
gcp-oauth.keys.json
is correctly named and placed in the project root.npm start
..gcp-saved-tokens.json
.http://localhost:3000/oauth2callback
)..gcp-saved-tokens.json
(and show the exact file path).If you need to re-authenticate or prefer to handle authentication separately:
npm run auth
.gcp-saved-tokens.json
in the project root..gitignore
).npm run auth
command.Unit and integration tests are implemented using Vitest.
npm test
npm run test:watch
npm run coverage
Tests mock external dependencies (Google API, filesystem) to ensure isolated testing of server logic and handlers.
gcp-oauth.keys.json
) and saved tokens (.gcp-saved-tokens.json
) should never be committed to version control. Ensure they are added to your .gitignore
file.Add this configuration to your Claude Desktop config file. E.g. /Users//Library/Application Support/Claude/claude_desktop_config.json
:
{ "mcpServers": { "google-calendar": { "command": "node", "args": ["/build/index.js"] } } }
Note: Replace `` with the actual path to your project directory.
Restart Claude Desktop
Authentication Errors / Connection Reset on Callback:
gcp-oauth.keys.json
exists and contains credentials for a Desktop App type..gcp-saved-tokens.json
and re-authenticating (npm run auth
or restart npm start
).Tokens Expire Weekly:
Build Errors:
npm install
again.build/
directory and run npm run build
.if you are a developer want to contribute this repository, please kindly take a look at Architecture Overview before contributing
MIT
Discover shared experiences
Shared threads will appear here, showcasing real-world applications and insights from the community. Check back soon for updates!