Google Calendar connector: list_events/search_events return calendar metadata instead of events
Preflight Checklist
- [x] I have searched existing issues and this hasn't been reported yet
- [x] This is a single bug report (please file separate reports for different bugs)
- [x] I am using the latest version of Claude Code
What's Wrong?
The Google Calendar MCP connector's list_events tool consistently returns the calendar's metadata object (a calendars.get-style response) instead of an events array, regardless of input parameters. search_events independently returns an empty object {} for queries that should match existing events (e.g. "Weekly").
Example response from list_events for a 7-day range known to contain events:
{"accessRole":"owner","defaultReminders":[{"method":"popup","minutes":30},{"method":"popup","minutes":60}],"summary":"Gmail","timeZone":"America/New_York","updated":"2026-08-31T02:27:34Z"}
No items field is ever present.
I confirmed this is not an auth/connection issue:
- The connector shows as "connected" in session_connectors_status (not needs_auth or failed)
- list_calendars works correctly and returns the expected calendar list
- I disconnected and reconnected the Google Calendar connector from claude.ai settings — identical broken output afterward, including the exact same "updated" timestamp, and the same connector id was reused rather than a fresh instance being issued
What Should Happen?
list_events should return the actual list of events on the calendar for the requested time range (an items array with event details: summary, start/end, location, etc.), matching the behavior of the underlying Google Calendar events.list API. search_events should return matching events for a query that has real matches, not an empty object.
Error Messages/Logs
Steps to Reproduce
- Ensure the Google Calendar connector is connected (verified via list_calendars, which correctly returns the calendar list, e.g. primary Gmail calendar + US holidays calendar).
- Call
list_eventswith any of the following, in any combination:
- calendarId = primary account email, or another valid calendar id
- startTime/endTime covering a range known to contain real events (single day or full week)
- timeZone set or omitted
- timestamps in
-04:00offset format orZ(UTC) format - with or without pageSize/orderBy
- Observe the response — it is always the calendar's metadata (accessRole, defaultReminders, summary, timeZone, updated), never an events array.
- Separately, call
search_eventswith a query expected to match existing events (e.g. "Weekly", a recurring meeting title). Observe it returns{}. - From claude.ai Settings → Connectors, disconnect and reconnect the Google Calendar connector, then repeat steps 2-4. The output is identical, byte-for-byte (including the same
updatedtimestamp), and the connector id in session_connectors_status does not change.
Claude Model
Sonnet (default)
Is this a regression?
I don't know
Last Working Version
_No response_
Claude Code Version
2.1.109 (Claude Code)
Platform
Anthropic API
Operating System
macOS
Terminal/Shell
Terminal.app (macOS)
Additional Information
Encountered this via the Claude Desktop app (Code tab), not a raw terminal session — "Terminal/Shell" above is left at its default and isn't actually applicable here. The Google Calendar connector (id 5c367750-7f69-4196-8c8c-d6788445f350) shows status "connected" with tool_count 9 in session_connectors_status both before and after disconnect/reconnect. This was discovered while trying to refresh a scheduled dashboard task that pulls the next 7 days of calendar events — the task had to be skipped for the calendar portion since no real event data could be retrieved.