This guide covers advanced features and use cases for the Google Calendar MCP Server.
The server allows you to connect multiple Google accounts simultaneously (e.g., personal, work, family) and interact with all of them seamlessly. See Authentication Guide for setup instructions.
All tools accept an optional account parameter. The behavior depends on the tool type:
| Tool Type | Accepts Arrays? | account Omitted |
account: "work" |
account: ["work", "personal"] |
|---|---|---|---|---|
| Read-only (list-events, list-calendars, get-freebusy) | ✅ Yes | Merges ALL accounts | Single account only | Merges specified accounts |
| Write (create-event, update-event, delete-event) | ❌ No | Auto-selects best permission | Uses specified account | ❌ Error (not supported) |
| Get (get-event, search-events) | ❌ No | Auto-selects account with access | Uses specified account | ❌ Error (not supported) |
Auto-selection logic:
- When
accountis omitted, the server automatically selects the account with appropriate permissions - Write operations require write/owner access
- Read operations work with any access level (reader, writer, or owner)
- If no account has the required permissions, you'll get a clear error message
// Read-only tools: Query all authenticated accounts (auto-merge)
use_tool("list-events", {
timeMin: "2025-02-01T00:00:00",
timeMax: "2025-02-01T23:59:59"
// No account parameter = merges all accounts
});
// Read-only tools: Query specific accounts
use_tool("list-events", {
account: ["work", "personal"], // Array supported!
timeMin: "2025-02-01T00:00:00",
timeMax: "2025-02-01T23:59:59"
});
// Write tools: Explicitly pick account
use_tool("create-event", {
calendarId: "team@company.com",
summary: "Status update",
account: "work", // Must be single string, not array
start: "2025-02-01T10:00:00",
end: "2025-02-01T11:00:00"
});
// Write tools: Auto-select account (finds account with write access)
use_tool("create-event", {
calendarId: "team@company.com",
summary: "Status update",
// No account parameter = auto-selects account with write permission
start: "2025-02-01T10:00:00",
end: "2025-02-01T11:00:00"
});The Calendar Registry collects calendars from every account, de-duplicates shared calendars, and tracks the best account to use for read/write operations. Responses include accountAccess arrays so you can see every account that can reach a given calendar.
Request events from several calendars simultaneously:
"Show me all events from my work, personal, and team calendars for next week"
The server will:
- Query all specified calendars in parallel
- Merge and sort results chronologically
- Handle different timezones correctly
Create multiple related events:
"Schedule a 3-part training series every Monday at 2pm for the next 3 weeks"
When updating recurring events, you can specify the scope:
-
This event only: Modify a single instance
"Move tomorrow's standup to 11am (just this one)" -
This and following events: Modify from a specific date forward
"Change all future team meetings to 30 minutes starting next week" -
All events: Modify the entire series
"Update the location for all weekly reviews to Conference Room B"
The server supports all Google Calendar recurrence rules:
- Daily, weekly, monthly, yearly patterns
- Custom intervals (e.g., every 3 days)
- Specific days (e.g., every Tuesday and Thursday)
- End conditions (after N occurrences or by date)
- If no timezone is specified, the server uses your calendar's default timezone
- You can explicitly set a timezone using the
timeZoneparameter - Proper handling of daylight saving time transitions
- Support for scheduling across timezones
Find optimal meeting times:
"Find a 90-minute slot next week when both my work and personal calendars are free, preferably in the afternoon"
"Add this event to my calendar [attach screenshot]"
Supported formats: PNG, JPEG, GIF
The server can extract:
- Date and time information
- Event titles and descriptions
- Location details
- Attendee lists
- Ensure text is clear and readable
- Include full date/time information in the image
- Highlight or circle important details
- Use high contrast images
- By attendee: "meetings with john@example.com"
- By location: "events at headquarters"
- By time range: "morning meetings this month"
- By status: "tentative events this week"
Combine multiple criteria:
"Find all meetings with the sales team at the main office that are longer than an hour in the next two weeks"
"How much time did I spend in meetings last week?"
"What percentage of my meetings are recurring?"
"Which day typically has the most meetings?"
Built-in protection against API limits:
- Automatic retry with exponential backoff in batch operations
"Show me today's events and check for any scheduling conflicts between all my calendars"
"Look at next week and suggest the best times for deep work blocks of at least 2 hours"
"For each meeting tomorrow, tell me who's attending, what the agenda is, and what materials I should review"
The server only requests necessary permissions:
calendar.events: Full event management- Never requests email or profile access
- No access to other Google services
- Tokens stored locally with owner-only permissions (
0600) in~/.config/google-calendar-mcp/tokens.json - Automatic token refresh with durable multi-account storage
- Credentials never leave your machine (no remote storage)
- No tokens are written to logs or emitted over stdout/stderr
- Token refresh failures: Check network connectivity
- API quota exceeded: Implement backoff strategies
- Timezone mismatches: Ensure consistent timezone usage