google-calendar-mcp
Allows reading, creating, updating, and deleting Google Calendar events, including listing upcoming events, searching by keyword, and finding free time slots.
Click on "Install 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-mcpWhat's on my calendar this week?"
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
A Model Context Protocol (MCP) server that connects Claude Desktop to Google Calendar — letting Claude read, create, update, and delete events directly from conversation.
Demo
Ask Claude things like:
"What's on my calendar this week?"
"Schedule a meeting with John tomorrow at 2pm"
"Find a free hour on Friday afternoon"
"Move my 3pm call to 4pm"
Related MCP server: MCP Calendar Server
Tools
Tool | Description |
| List upcoming events for the next N days |
| Search events by keyword |
| Create a new event with title, time, location, attendees |
| Edit an existing event |
| Delete an event by ID |
| Find open time slots on a given day (8am–6pm) |
Tech Stack
TypeScript + Node.js
MCP SDK (
@modelcontextprotocol/sdk) — Anthropic's standard for AI tool integrationGoogle Calendar API v3 via
googleapisOAuth 2.0 — desktop app flow with local callback server
Setup
1. Google Cloud Console
Create a project at console.cloud.google.com
Enable the Google Calendar API
Create OAuth credentials → Desktop app → download
credentials.jsonAdd your email as a test user under OAuth consent screen → Audience
2. Install & Authenticate
git clone https://github.com/coldinnn/google-calendar-mcp
cd google-calendar-mcp
npm install
cp /path/to/downloaded/credentials.json .
npm run setup # opens browser for OAuth — saves token.json3. Connect to Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"google-calendar": {
"command": "node",
"args": ["/absolute/path/to/google-calendar-mcp/dist/server.js"]
}
}
}Restart Claude Desktop — the calendar tools will appear automatically.
Project Structure
src/
auth.ts # OAuth2 client — loads credentials, refreshes tokens
setup.ts # One-time setup: generates auth URL, catches callback, saves token
server.ts # MCP server — defines all 6 toolsHow It Works
setup.ts starts a local HTTP server on port 3000, generates an OAuth URL, and waits for Google to redirect back with an authorization code. It exchanges the code for access + refresh tokens and saves them to token.json.
server.ts uses McpServer + StdioServerTransport from the MCP SDK. Claude Desktop launches it as a subprocess and communicates over stdin/stdout. Each tool call hits the Google Calendar API and returns formatted text back to Claude.
Token refresh is handled automatically on every request — no manual re-auth needed.
License
MIT
Available Tools
6 toolscreate_eventB
Create a new calendar event.
| Name | Required | Description | Default |
|---|---|---|---|
| end | Yes | End time in ISO 8601 format | |
| start | Yes | Start time in ISO 8601 format, e.g. 2026-07-10T14:00:00-05:00 | |
| title | Yes | Event title | |
| location | No | Location or meeting link | |
| attendees | No | Comma-separated email addresses to invite | |
| description | No | Event description or notes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavioral traits. It only states 'create' without mentioning side effects like sending invites, idempotency, or error conditions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words. It is appropriately sized for a simple create operation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 parameters, no output schema, and no annotations, the description is too minimal. It fails to explain return values or side effects, which are critical for an agent to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters fully. The description adds no additional parameter meaning beyond what is in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Create a new calendar event' clearly states the verb (create) and the resource (calendar event), and it distinguishes from siblings like delete_event, update_event, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives like list_events or update_event. It implies usage but does not address prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_eventB
Delete a calendar event by its ID.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Event ID from list_events or search_events |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but only states 'delete', implying a destructive mutation. No disclosure of behavioral traits such as irreversibility, authorization requirements, error handling, or return value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, concise sentence that efficiently communicates the tool's purpose without extraneous words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description adequately identifies the tool's function for a simple one-parameter operation, it lacks completeness regarding return values, prerequisites, or any additional context that would fully inform an AI agent's decision, especially given the absence of annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description for event_id already provided in the input schema. The tool description adds no additional meaning beyond what the schema already conveys.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'delete' and the resource 'calendar event' along with the identifier method 'by its ID', making the purpose unambiguous and distinguishing it from sibling tools like create_event, list_events, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives, no prerequisites mentioned (e.g., event must exist, permissions needed), and no mention of side effects or constraints.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_free_timeB
Find available time slots on a given day between 8am and 6pm.
| Name | Required | Description | Default |
|---|---|---|---|
| date | Yes | Date in YYYY-MM-DD format | |
| duration_minutes | No | Minimum slot length in minutes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the time range (8am-6pm) but lacks details on how free slots are computed (e.g., whether existing events are considered, timezone handling, edge cases like no slots). No annotations are provided, so the description carries the burden, but it is only partially transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 10 words, clearly front-loaded with the core action. No unnecessary information; every word contributes meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has no output schema and lacks annotations. The description omits important context such as whether existing events are considered, timezone handling, or what happens when no slots are available. For a 2-parameter tool, more detail is needed for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for both parameters. The description does not add additional meaning to the parameters beyond what the schema provides. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'find' and resource 'available time slots', and includes clear constraints ('on a given day', 'between 8am and 6pm'). This distinguishes it from sibling tools like create_event or list_events, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool vs alternatives. It only implies usage for finding free slots, but does not state when it's appropriate or mention prerequisites like existing events.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_eventsB
List upcoming calendar events for the next N days.
| Name | Required | Description | Default |
|---|---|---|---|
| days_ahead | No | How many days ahead to look | |
| max_results | No | Max events to return |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden; it only mentions 'list upcoming calendar events' but fails to disclose behavioral traits such as read-only nature, authentication requirements, recurrence handling, or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no wasted words. It is appropriately sized for the tool's simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the tool being simple, the description lacks details on return value structure, ordering, or inclusion of all-day events. Without an output schema, more description is needed to fully inform the agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the description adds little beyond the schema. The phrase 'next N days' restates the purpose but does not provide additional detail on defaults or constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it lists upcoming calendar events for a time period, using a specific verb and resource. However, it does not distinguish itself from sibling tools like search_events or find_free_time.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing upcoming events within N days, but provides no explicit guidance on when not to use it or which alternative tool (e.g., search_events for filtering) is more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_eventsC
Search for calendar events by keyword.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search keyword | |
| days_ahead | No | How many days ahead to search |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, yet description fails to disclose behavioral traits like being a read-only operation, or any limitations such as pagination or rate limits. Agent has no indication of side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no wasted words. However, it's arguably too concise, lacking context for a search tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Minimal info given; no output schema or annotations. Description doesn't specify return format, pagination, or whether events are filtered by user's calendar. Adequate but missing important context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are fully described in the input schema (100% coverage). Description adds no additional meaning beyond schema, earning baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'search' and resource 'calendar events' with method 'by keyword'. Distinguishes from siblings like list_events (which may list all without keyword) and create/delete/update events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives like list_events or find_free_time. The description is too vague to help an agent decide between search and list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_eventA
Update an existing calendar event. Only provide fields you want to change.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | New end time in ISO 8601 format | |
| start | No | New start time in ISO 8601 format | |
| title | No | New title (leave empty to keep current) | |
| event_id | Yes | Event ID from list_events or search_events | |
| location | No | New location | |
| description | No | New description |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry full behavioral transparency. It only states 'Update,' implying mutation, but fails to disclose side effects, error handling (e.g., missing event_id), auth requirements, rate limits, or whether the update is atomic. This is insufficient for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences convey the essential information without any extraneous words. Every sentence adds value: the first identifies the action and resource, the second explains the partial update pattern.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a fully documented input schema, the description lacks completeness for a mutation tool: no mention of success/failure responses, error cases (e.g., event not found), idempotency, or concurrency behavior. The output schema is absent, so description should cover more context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with each parameter described individually (e.g., 'New start time in ISO 8601 format'). The description adds the crucial context that only provided fields are changed, reinforcing the partial update semantics beyond the schema's per-field descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the verb 'Update' and resource 'existing calendar event', distinguishing it from siblings like create_event and delete_event. However, it doesn't explicitly contrast with read-only tools like list_events or search_events, nor does it specify 'partial update' explicitly, though 'Only provide fields you want to change' hints at it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'Only provide fields you want to change,' which implies partial updates and guides when to use the tool. It lacks explicit 'when not to use' or alternatives, but the guidance is clear enough for a typical use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
6 tool updates
v1.0.0- First observed
create_event - First observed
delete_event - First observed
find_free_time - First observed
list_events - First observed
search_events - First observed
update_event
TDQS
Scored across 6 tools
Each tool has a clear, distinct purpose: CRUD operations (create, delete, update), retrieval (list, search), and availability checking (find_free_time). No overlapping functionality.
All tool names follow a consistent verb_noun pattern with underscores (e.g., create_event, find_free_time), making them predictable and easy to understand.
6 tools is well-scoped for a calendar server, covering essential operations without being overwhelming. Each tool serves a unique and necessary function.
The set covers create, read, update, delete, search, and free-time lookup. Missing a dedicated get_event by ID, but list/search can provide IDs. Minor gap, but overall sufficient for basic calendar management.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Multiple Google accounts (Gmail, Calendar, Drive, Contacts, Tasks) in one Claude connector.
Manage Google, Outlook & Apple calendars and create private sync rules from chat.
1AI-native scheduler that lives in Claude. Describe meetings in plain English; Heldly does the rest.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAllows interaction with Google Calendar through Claude Desktop using the Model Context Protocol, enabling calendar event management and schedule analysis.2-
- FlicenseNot gradedqualityDmaintenanceConnects Claude Desktop to Google Calendar for local calendar management including adding, updating, and deleting events, checking schedules, and calculating travel time between meetings.1-
- AlicenseNot gradedqualityCmaintenanceEnables Claude to interact with Google Calendar through natural language, providing the ability to view, create, update, and delete calendar events with persistent OAuth2 authentication.21MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to interact with Google Calendar through OAuth authentication, allowing users to list events, create and manage meetings, update or delete calendar entries, and find available time slots using natural language.72MIT