anthropics / anthropics/claude-code
Google Calendar connector: list_events/search_events return calendar metadata instead of events
- Dominant language
- Python
- Stars
- 145k
- Forks
- 23.1k
- PR merge metrics
- PR metrics pending
Description
### Preflight Checklist
- [x] I have searched [existing issues](https://github.com/anthropics/claude-code/issues?q=is%3Aissue%20state%3Aopen%20label%3Abug) 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
```shell
```
### 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
3. Observe the response — it is always the calendar's metadata (accessRole, defaultReminders, summary, timeZone, updated), never an events array.
4. Separately, call `search_events` with a query expected to match existing events (e.g. "Weekly", a recurring meeting title). Observe it returns `{}`.
5. 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.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start by reproducing the list_events and search_events calls against the connected Google Calendar connector, using list_calendars as the working comparison. Trace those connector entry points and compare their responses with the expected Google Calendar events.list behavior. Done means list_events returns event items for a populated range and search_events returns matching events rather than calendar metadata or {}.
Written by the indexing model from the issue text.
Assessment
- Domain
- api
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Active
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100