Google Calendar MCP Server
by am2rican5
Verified
# Google Calendar MCP Server
A Model Context Protocol (MCP) server that integrates with Google Calendar, built with TypeScript.
## Features
- Seamless Google Calendar integration with OAuth 2.0 authentication
- Persistent token storage for automatic authentication
- List and manage calendars with comprehensive event operations
- Create, read, update, and delete calendar events
- Fetch calendar events between specified dates
- Server-Sent Events (SSE) transport option for real-time updates
- Simple integration with Claude and other MCP-compatible AI assistants
## Installation
```bash
npm install -g mcp-google-calendar
```
Or run directly with:
```bash
npx -y mcp-google-calendar
```
## Prerequisites
1. Node.js (v16 or higher)
2. Google Cloud Platform account
3. Google Calendar API enabled
4. OAuth 2.0 credentials
## Setup
### 1. Google Cloud Configuration
1. Go to [Google Cloud Console](https://console.cloud.google.com/)
2. Create a new project or select an existing one
3. Enable the Google Calendar API:
- Navigate to "APIs & Services" > "Library"
- Search for "Google Calendar API"
- Click "Enable"
4. Configure OAuth consent screen:
- Go to "APIs & Services" > "OAuth consent screen"
- Choose "External" user type (or "Internal" for Google Workspace)
- Fill in required information:
- App name: mcp-calendar
- User support email: (your email)
- Developer contact information: (your email)
- Add scopes:
- Click "Add or Remove Scopes"
- Find and select "https://www.googleapis.com/auth/calendar.events"
- Add your email as a test user
- Complete the setup
5. Create OAuth credentials:
- Go to "Credentials"
- Click "Create Credentials" > "OAuth Client ID"
- Choose "Desktop app" as application type
- Name it (e.g., "MCP Calendar Desktop Client")
- Download the JSON file and save as `credentials.json` in your project directory
### 2. Environment Configuration
Create a `.env` file in your project root:
```
# Server configuration
PORT=3420
# Google Calendar API configuration
CREDENTIALS_PATH=./credentials.json
```
## Usage
### Starting the Server
Start with standard WebSockets:
```bash
npx -y mcp-google-calendar
```
Start with Server-Sent Events (SSE):
```bash
npx -y mcp-google-calendar --sse
```
### With Claude Desktop
Add this to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"mcp-google-calendar": {
"command": "npx",
"args": ["-y", "mcp-google-calendar"],
"env": {
"CREDENTIALS_PATH": "/path/to/your/credentials.json"
}
}
}
}
```
### Authentication Process
The first time you run the server:
1. A browser window will open automatically
2. Sign in with your Google account
3. Grant the requested calendar permissions
4. The authentication token is saved to `token.json`
On subsequent launches:
- The server uses the saved token automatically
- No browser interaction is required unless the token expires
## Available Tools
| Tool | Description |
|------|-------------|
| `list_calendars` | Get all available calendars |
| `list_calendar_events` | Retrieve events between specified dates |
| `create_calendar_event` | Add a new event to your calendar |
| `get_calendar_event` | Fetch details for a specific event |
| `edit_calendar_event` | Modify an existing calendar event |
| `delete_calendar_event` | Remove an event from your calendar |
## Development
Clone and set up the project:
```bash
git clone https://github.com/am2rican5/mcp-google-calendar.git
cd mcp-google-calendar
npm install
```
Build the project:
```bash
npm run build
```
Run in development mode:
```bash
npm start
```
## Security Considerations
⚠️ **Important Security Warning** ⚠️
- `credentials.json` and `token.json` contain sensitive authentication information
- Never commit these files to version control or share them publicly
- Each user should create their own OAuth credentials
- If you suspect credential compromise, revoke them immediately in Google Cloud Console
- The token grants access to your Google Calendar data
## License
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
## Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request