Calendar MCP query scoping: efficient event retrieval, meeting time discovery, room booking, and scheduling patterns for the native Calendar MCP server. Prevents unbounded event listing and unnecessary API calls. Triggers: calendar search, find meeting, list events, schedule meeting, book room, find meeting time, calendar view, today meetings, upcoming meetings, Calendar MCP, create event.
Efficient patterns for the native calendar:* MCP tools. Prevents unbounded event retrieval and unnecessary scheduling calls.
Provides clear retrieval and scheduling patterns for the Calendar MCP server. The key distinction — ListCalendarView (time-bounded) vs ListEvents (unbounded) — prevents the most common calendar query mistake.
calendar:* tool call| Tool | Purpose | Payload Risk |
|---|---|---|
calendar:ListCalendarView |
| Events within a specific time window |
| LOW-MEDIUM (bounded by window) |
calendar:ListEvents | All events (potentially unbounded) | HIGH — use ListCalendarView instead |
calendar:GetUserDateAndTimeZoneSettings | User's date/time/timezone preferences | LOW |
calendar:GetRooms | Available meeting rooms | LOW |
calendar:FindMeetingTimes | Suggests available meeting slots for participants | LOW |
| Tool | Purpose | Notes |
|---|---|---|
calendar:CreateEvent | Create a new calendar event | Sends invitations to attendees |
calendar:UpdateEvent | Modify an existing event | |
calendar:ForwardEvent | Forward event to additional attendees | |
calendar:CancelEvent | Cancel an event (as organizer) | Sends cancellation to attendees |
calendar:DeleteEventById | Delete an event | DESTRUCTIVE — no cancellation notice |
calendar:AcceptEvent | Accept a meeting invitation | |
calendar:DeclineEvent | Decline a meeting invitation | |
calendar:TentativelyAcceptEvent | Tentatively accept an invitation |
ListCalendarView | ListEvents | |
|---|---|---|
| Time-bounded | Yes — requires start/end datetime | No — returns all events |
| Recurring events | Expanded into individual occurrences | Returns series master only |
| Payload risk | Bounded by time window | Unbounded, can be massive |
| Use when | You know the date range | Almost never — prefer CalendarView |
Rule: Always use ListCalendarView with explicit start/end datetimes. ListEvents should only be used when you specifically need series master records (rare).
1. calendar:GetUserDateAndTimeZoneSettings() → get timezone
2. calendar:ListCalendarView({
startDateTime: "<today-start-ISO>",
endDateTime: "<today-end-ISO>"
})
Timezone awareness: Always resolve the user's timezone first. Use ISO 8601 format with timezone offset.