Calendar MCP Server
Google Calendar integration in Cursor IDE. This server enables AI assistants to manage Google Calendar events through natural language interactions.
Google Calendar integration in Cursor IDE. This server enables AI assistants to manage Google Calendar events through natural language interactions.
A Model Context Protocol (MCP) server for Google Calendar integration in Claude Desktop. This server enables AI assistants to manage Google Calendar events through natural language interactions.
To install Google Calendar Integration for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @gongrzhe/server-calendar-mcp --client claude
npm install @gongrzhe/server-calendar-mcp
a. Create a Google Cloud Project: - Go to Google Cloud Console - Create a new project or select an existing one - Enable the Google Calendar API for your project
b. Create OAuth 2.0 Credentials:
- Go to "APIs & Services" > "Credentials"
- Click "Create Credentials" > "OAuth client ID"
- Choose "Desktop app" as application type
- Give it a name and click "Create"
- You will get your GOOGLE_CLIENT_ID
and GOOGLE_CLIENT_SECRET
c. Get Refresh Token:
- Go to OAuth 2.0 Playground
- Click the gear icon (Settings) in the top right
- Check "Use your own OAuth credentials"
- Enter your OAuth Client ID and Client Secret
- In the left panel, find "Calendar API v3" and select "https://www.googleapis.com/auth/calendar"
- Click "Authorize APIs" and complete the OAuth flow
- Click "Exchange authorization code for tokens"
- Copy the "Refresh token" - this is your GOOGLE_REFRESH_TOKEN
{
"calendar": {
"command": "npx",
"args": [
"@gongrzhe/server-calendar-mcp"
],
"env": {
"GOOGLE_CLIENT_ID": "your_client_id_here",
"GOOGLE_CLIENT_SECRET": "your_client_secret_here",
"GOOGLE_REFRESH_TOKEN": "your_refresh_token_here"
}
}
}
The server provides several tools that can be used through the Claude Desktop:
{
"summary": "Team Meeting",
"start": {
"dateTime": "2024-01-20T10:00:00Z"
},
"end": {
"dateTime": "2024-01-20T11:00:00Z"
},
"description": "Weekly team sync",
"location": "Conference Room A"
}
{
"timeMin": "2024-01-01T00:00:00Z",
"timeMax": "2024-12-31T23:59:59Z",
"maxResults": 10,
"orderBy": "startTime"
}
{
"eventId": "event123",
"summary": "Updated Meeting Title",
"start": {
"dateTime": "2024-01-20T11:00:00Z"
},
"end": {
"dateTime": "2024-01-20T12:00:00Z"
}
}
{
"eventId": "event123"
}
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the ISC License.
gongrzhe
If you encounter any issues or have questions, please file an issue on the GitHub repository.
[
{
"description": "Creates a new event in Google Calendar",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"description": {
"description": "Event description",
"type": "string"
},
"end": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "End time (ISO format)",
"type": "string"
},
"timeZone": {
"description": "Time zone",
"type": "string"
}
},
"required": [
"dateTime"
],
"type": "object"
},
"location": {
"description": "Event location",
"type": "string"
},
"start": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "Start time (ISO format)",
"type": "string"
},
"timeZone": {
"description": "Time zone",
"type": "string"
}
},
"required": [
"dateTime"
],
"type": "object"
},
"summary": {
"description": "Event title",
"type": "string"
}
},
"required": [
"summary",
"start",
"end"
],
"type": "object"
},
"name": "create_event"
},
{
"description": "Retrieves details of a specific event",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"eventId": {
"description": "ID of the event to retrieve",
"type": "string"
}
},
"required": [
"eventId"
],
"type": "object"
},
"name": "get_event"
},
{
"description": "Updates an existing event",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"description": {
"description": "New event description",
"type": "string"
},
"end": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "New end time (ISO format)",
"type": "string"
},
"timeZone": {
"description": "Time zone",
"type": "string"
}
},
"required": [
"dateTime"
],
"type": "object"
},
"eventId": {
"description": "ID of the event to update",
"type": "string"
},
"location": {
"description": "New event location",
"type": "string"
},
"start": {
"additionalProperties": false,
"properties": {
"dateTime": {
"description": "New start time (ISO format)",
"type": "string"
},
"timeZone": {
"description": "Time zone",
"type": "string"
}
},
"required": [
"dateTime"
],
"type": "object"
},
"summary": {
"description": "New event title",
"type": "string"
}
},
"required": [
"eventId"
],
"type": "object"
},
"name": "update_event"
},
{
"description": "Deletes an event from the calendar",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"eventId": {
"description": "ID of the event to delete",
"type": "string"
}
},
"required": [
"eventId"
],
"type": "object"
},
"name": "delete_event"
},
{
"description": "Lists events within a specified time range",
"inputSchema": {
"$schema": "http://json-schema.org/draft-07/schema#",
"additionalProperties": false,
"properties": {
"maxResults": {
"description": "Maximum number of events to return",
"type": "number"
},
"orderBy": {
"description": "Sort order",
"enum": [
"startTime",
"updated"
],
"type": "string"
},
"timeMax": {
"description": "End of time range (ISO format)",
"type": "string"
},
"timeMin": {
"description": "Start of time range (ISO format)",
"type": "string"
}
},
"required": [
"timeMin",
"timeMax"
],
"type": "object"
},
"name": "list_events"
}
]