# Google Calendar MCP Server This MCP server provides integration with Google Calendar, allowing Claude to view, create, and manage calendar events through a standardized interface. ## Features - List available calendars - List events from a calendar - Create new calendar events - Update existing events - Delete events ## Prerequisites - Node.js 16 or higher - A Google Cloud project with the Calendar API enabled - OAuth 2.0 credentials (Client ID and Client Secret) ## Google Cloud Setup 1. Go to the [Google Cloud Console](https://console.cloud.google.com) 2. Create a new project or select an existing one 3. Enable the [Google Calendar API](https://console.cloud.google.com/apis/library/calendar-json.googleapis.com) 4. Create OAuth 2.0 credentials: - Go to **Credentials** - Click **"Create Credentials" > "OAuth client ID"** - Choose **"Desktop app"** as the application type - Give it a name (e.g., "Google Calendar MCP") - Download the credentials JSON file - Rename the downloaded file to `gcp-oauth.keys.json` and place it in the root directory of this project ## Installation 1. Install dependencies: ``` npm install ``` 2. Build the TypeScript code: ``` npm run build ``` 3. Update the Claude MCP settings file to include this server: - Add the following to `cline_mcp_settings.json`: ```json "github.com/pashpashpash/google-calendar-mcp": { "command": "node", "args": ["C:/Users/ralph/Documents/Cline/MCP/google-calendar-mcp/build/index.js"], "env": {}, "disabled": false, "autoApprove": [] } ``` ## Authentication Process The first time you use the Google Calendar MCP server, it will: 1. Detect that you don't have authentication tokens 2. Start an authentication server (on ports 3000-3004) 3. Open a browser window for OAuth authentication 4. Save the authentication tokens securely 5. Shut down the authentication server and continue normal operation Your authentication tokens will be stored in `.gcp-saved-tokens.json` and will refresh automatically. ## Available Tools | Tool | Description | |------|-------------| | `list-calendars` | List all available calendars | | `list-events` | List events from a specific calendar | | `create-event` | Create a new calendar event | | `update-event` | Update an existing calendar event | | `delete-event` | Delete a calendar event | ## Examples ### Listing Calendars ``` list-calendars ``` ### Listing Events ``` list-events calendarId: "primary" timeMin: "2023-01-01T00:00:00Z" timeMax: "2023-12-31T23:59:59Z" maxResults: 10 ``` ### Creating an Event ``` create-event calendarId: "primary" summary: "Team Meeting" location: "Conference Room B" description: "Weekly team sync meeting" startDateTime: "2023-06-15T10:00:00" endDateTime: "2023-06-15T11:00:00" timeZone: "America/New_York" attendees: ["colleague1@example.com", "colleague2@example.com"] ``` ### Updating an Event ``` update-event calendarId: "primary" eventId: "event_id_from_list_events" summary: "Updated Meeting Title" startDateTime: "2023-06-15T11:00:00" endDateTime: "2023-06-15T12:00:00" ``` ### Deleting an Event ``` delete-event calendarId: "primary" eventId: "event_id_from_list_events" ``` ## Troubleshooting - **OAuth token expires after 7 days**: You must re-authenticate if the app is in testing mode. - **Authentication errors**: Ensure `gcp-oauth.keys.json` is correctly formatted and placed in the project root. - **Port conflicts**: The authentication server tries ports 3000-3004; ensure at least one is available.