MCP server for Google Docs, Google Sheets, and Google Calendar integration with multi-user support, OAuth authentication, and per-user token management
The server defines 3 Google Calendar tools with Zod schemas and descriptions. Tools follow verb_noun naming (listCalendars, listEvents, getEvent) and all have descriptions. However, there are significant gaps in parameter descriptions, output schema documentation, and error handling guidance. The tool descriptions are concise but lack WHEN-to-use context and prerequisite information. Parameter descriptions exist but are incomplete for some fields (e.g., timeMin/timeMax lack examples of valid formats despite mentioning ISO 8601). No output schemas are formally documented. Error handling throws UserError but doesn't guide recovery. The descriptions are 50-100 characters, within acceptable range but sparse on context.
Gets detailed information about a specific calendar event.
Lists all calendars accessible to the user.
Lists events from a calendar within a specified date range.
Output schemas not documented. Tools execute and return results, but the response structure (fields, types, nested objects) is never formally defined. LLMs cannot reliably plan downstream tool calls without knowing what fields to expect.
Tool descriptions lack WHEN-to-use context and prerequisites. 'Lists all calendars accessible to the user' is functional but does not explain when to call this tool before listEvents, or whether it requires prior authentication. No guidance on dependencies or common workflows.
listEvents parameter 'timeMin' and 'timeMax' descriptions mention ISO 8601 format but lack concrete guidance on defaults and boundaries. Description says 'Defaults to now' and '30 days from now' but this is imprecise, does 'now' mean server time, user time, or request receipt time? No min/max constraints specified.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 26 | - | v1 |
No pagination documented for listCalendars or listEvents results. listEvents accepts maxResults (1-2500) but no next_cursor, offset, or total_count fields are mentioned. If a user has >50 calendars or >50 events, the tool silently truncates results with no indication of truncation or how to fetch more.
Error handling provides UserError messages but no recovery guidance. When a 403 error occurs ('Permission denied. Make sure you have granted calendar access.'), the LLM is told to grant access but has no tool to do so. Errors should guide LLMs toward resolution, not dead-end them.
Parameter descriptions lack constraint clarity. 'Maximum number of events to return (1-2500)' is good, but 'query' parameter has no description of what happens if it matches no events (empty array? error? partial results?). 'singleEvents' description is truncated in source code ('Whether to expand recurring events...' ends abruptly).
No tool annotations present. Tools do not declare readOnlyHint, destructiveHint, or idempotentHint. All three tools are read-only and idempotent, but these properties are not formally declared in the schema, forcing LLMs to infer intent from names and descriptions alone.