Google Calendar connector: list_events/search_events return calendar metadata instead of events

Status Open
Reported on v2.1.109
Maintainer reply None cached
Activity 0 comments · opened Sep 16, 2026

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

  1. 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).
  2. Call list_events with 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:00 offset format or Z (UTC) format
  • with or without pageSize/orderBy
  1. Observe the response — it is always the calendar's metadata (accessRole, defaultReminders, summary, timeZone, updated), never an events array.
  2. Separately, call search_events with a query expected to match existing events (e.g. "Weekly", a recurring meeting title). Observe it returns {}.
  3. 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 updated timestamp), 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.

View original on GitHub ↗