Skip to main content
Glama
progrmoiz

Google Calendar MCP Server

by progrmoiz
README.md
# ๐Ÿ—“๏ธ Google Calendar MCP Server

**I got tired of the Google Cloud setup BS, so I built this.**

**Connect your calendar in 30 seconds, not 3 hours.**

Skip the OAuth nightmare. No Google Cloud Console. No service accounts. No headaches. Just works with Claude Desktop, Cursor, Zed, or whatever MCP client you're using.

## โœจ Why This Rocks

- **๐Ÿš€ Actually Easy Setup** - 30 seconds vs 3 hours of Google Cloud hell
- **๐Ÿ”’ OAuth That Works** - No token management headaches
- **๐Ÿ”ง Works Everywhere** - Claude, Cursor, Zed... if it does MCP, we got you
- **โšก Deploy & Forget** - One-click Vercel deployment 
- **๐Ÿ—“๏ธ Full Calendar Power** - Create, edit, delete events like a boss
- **๐ŸŒ Your Server** - Host it yourself, own your data
- **๐Ÿ“ฑ Test Drive** - Web UI to make sure everything works before going live

## Just Want to Use It?

1. **Connect your calendar:**
   - Go to https://cal-mcp.com
   - Hit "Connect Google Calendar"
   - Do the OAuth dance
   - Copy your config

2. **Add to your MCP client:**

   **Option A: Streamable HTTP (Recommended)**
   ```json
   {
     "mcpServers": {
       "google-calendar": {
         "url": "https://cal-mcp.com/api/mcp"
       }
     }
   }
   ```

   **Option B: STDIO (Local Server)**
   ```json
   {
     "mcpServers": {
       "google-calendar": {
         "command": "npx",
         "args": ["-y", "mcp-remote", "https://cal-mcp.com/api/mcp"]
       }
     }
   }
   ```

## Want to Run Your Own?

1. **Grab the code:**
   ```bash
   git clone https://github.com/progrmoiz/cal-mcp
   cd cal-mcp
   npm install
   ```

2. **Google OAuth setup (yeah, still need this part):**
   - Hit up [Google Cloud Console](https://console.cloud.google.com/)
   - Make a project (or use an existing one)
   - Enable Google Calendar API
   - Create OAuth 2.0 credentials
   - Add this redirect URI: `http://localhost:3000/api/auth/callback/google`

3. **Environment variables:**
   ```bash
   cp .env.example .env.local
   ```
   Drop in your Google stuff:
   ```
   GOOGLE_CLIENT_ID=your_client_id
   GOOGLE_CLIENT_SECRET=your_client_secret
   BETTER_AUTH_SECRET=any_random_string
   BETTER_AUTH_URL=http://localhost:3000
   ```

4. **Fire it up:**
   ```bash
   npm run dev
   ```

5. **Connect your calendar:**
   - Go to http://localhost:3000
   - Hit "Connect Google Calendar"
   - Do the OAuth dance
   - Copy your config

## ๐Ÿงช Test Drive

Built-in web interface because who wants to debug blind?

- **Play with Events** - Create, edit, delete events right in the browser
- **OAuth Testing** - Make sure the auth flow actually works
- **Debug Mode** - See raw API responses when things go sideways
- **Sanity Check** - Verify everything works before plugging into your AI

Hit `http://localhost:3000` once you're running and give it a spin.

## What You Can Do

All the calendar stuff you'd expect:
- `list-calendars` - See all your calendars
- `list-events` - Get events for a date range
- `create-event` - Make new events
- `update-event` - Change existing events
- `delete-event` - Remove events
- `search-events` - Find events by text
- `get-event` - Get event details
- `move-event` - Move events between calendars
- `list-colors` - Get color options for calendars/events
- `get-freebusy` - Check when you're available
- `get-current-time` - Current time and timezone info

## For Builders

What's under the hood:
- Better Auth handling the OAuth mess
- MCP server that actually works
- Next.js for the web stuff
- TypeScript because we're not animals

## Going Live

Ready to deploy? Here's what you need:

1. **Environment Variables** - Set them on your hosting platform
2. **Database** - Point to your Neon PostgreSQL URL
3. **Google OAuth** - Update redirect URIs for your domain
4. **HTTPS** - Because OAuth demands it

## Security Stuff

- Better Auth handles tokens so you don't have to
- Secrets stay in environment variables where they belong
- Everything needs auth (obviously)
- Token refresh happens automatically

## ๐Ÿ› ๏ธ When Things Break

Stuff not working? Try these:

### Your AI Tool Doesn't Do MCP
Not all AI tools support MCP yet. Check if yours does before pulling your hair out.

### Remote Connections Failing
Some tools do MCP but hate remote servers. Use the STDIO config instead.

### OAuth Acting Up
Did you actually complete the Google login? Try connecting again from the homepage.

### No MCP Support At All
Bug your AI tool's developers to add MCP support. The more people ask, the faster it happens.

## ๐Ÿ› ๏ธ Architecture

Built with modern technologies for reliability and ease of use:

- **Next.js 15** - Full-stack framework with API routes
- **Better Auth** - Secure OAuth 2.0 authentication
- **MCP Handler** - Model Context Protocol server implementation
- **Google Calendar API** - Direct integration with Google's calendar services
- **Vercel** - Serverless deployment platform
- **TypeScript** - Type-safe development

## ๐Ÿค Want to Help?

Contributions welcome! Here's how:

1. **๐Ÿ› Found a Bug?** - Open an issue, tell us what broke
2. **๐Ÿ’ก Got Ideas?** - Issues are perfect for brainstorming
3. **๐Ÿ”ง Can Code?** - PRs for fixes and features always welcome
4. **๐Ÿ“– Hate Bad Docs?** - Make them better!
5. **๐Ÿงช Just Testing?** - Feedback is gold

**How to Contribute:**
1. Fork it
2. Branch it: `git checkout -b feature/cool-thing`
3. Code it (and test it!)
4. PR it with a good description

**If you want to contribute, here are some ideas worth tackling:**

- **๐Ÿ“Š Google Sheets MCP** - Spreadsheets meet AI (imagine the possibilities!)
- **๐Ÿ“ง Gmail MCP** - Email automation that doesn't suck
- **โ˜๏ธ Google Drive MCP** - File management for the AI era
- **๐Ÿ“ Google Docs MCP** - Collaborative writing with AI superpowers

**Other Calendar Providers:**
- **๐Ÿ“… Outlook/Microsoft 365** - Because not everyone lives in Google land
- **๐ŸŽ Apple Calendar (CalDAV)** - For the Mac enthusiasts

Got another idea? **Just build it!**

The beauty of this setup is that it's dead simple to extend. Copy the auth flow, swap the API endpoints, and boom - you've got yourself a new MCP server.

Feel free to fork this repo and create a pull request. Let's build the future of productivity tools together, one API at a time. ๐Ÿ› ๏ธ

## ๐Ÿ“„ License

MIT License - do whatever you want with it.

## ๐Ÿ’ฌ Need Help?

- **๐Ÿ“– Docs**: This README + code comments
- **๐Ÿ› Bugs**: GitHub Issues
- **๐Ÿ’ฌ Questions**: GitHub Discussions
- **๐Ÿ“ง Collaboration**: Hit me up

TDQS

C2.6/5.0

Scored across 4 tools

Disambiguation2/5

The tools have overlapping purposes that cause confusion. 'batchGetDateByTimestamp' and 'getDateByTimestamp' both convert timestamps to dates, differing only in batch vs. single processing, which could lead to misselection. 'cal' is completely unrelated to calendar operations, evaluating mathematical expressions instead, creating a domain mismatch. Only 'getNow' stands clearly apart as a distinct timestamp retrieval tool.

Naming Consistency2/5

The naming is inconsistent with mixed conventions and unclear patterns. 'batchGetDateByTimestamp' and 'getDateByTimestamp' use camelCase with a 'get' prefix, but 'getNow' uses snake_case-like simplicity. 'cal' is a vague abbreviation that doesn't follow any discernible pattern. There's no uniform verb_noun structure or consistent casing across the tool set.

Tool Count2/5

The tool count of 4 is too few for a Google Calendar server, indicating a severe mismatch. A calendar domain typically requires CRUD operations for events, calendars, and scheduling, but this set lacks core functionalities like creating, listing, updating, or deleting events. The tools provided are more about timestamp utilities than calendar management, making the count inappropriate for the stated purpose.

Completeness1/5

The tool surface is severely incomplete for a Google Calendar server. There are no tools for managing calendar events (e.g., create_event, list_events, update_event, delete_event), calendars, or scheduling features. The existing tools focus on timestamp conversion and math evaluation, which are tangential to calendar operations, leaving significant gaps that will cause agent failures in handling typical calendar tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues