MCP server for accessing Google Calendar events by date
Single tool with basic schema and description. Tool name starts with a verb (get_), which is positive. However, the description is generic and lacks context about when to use the tool or what to expect. Parameter description is minimal. Output schema is not formally documented, the tool returns a hardcoded text response wrapping JSON, making the output structure opaque to the LLM. Error handling returns generic error messages without recovery guidance. No parameter validation rules stated (e.g., what constitutes a 'valid date string' beyond Date.parse() compliance). The server lacks pagination, limits documentation, and any guidance on dependent tools or prerequisites.
Retrieve calendar events for a specific date from Google Calendar
Tool description is generic and lacks LLM-optimized context. 'Retrieve calendar events for a specific date from Google Calendar' (65 chars) does not explain WHEN to call this tool, what data it returns, or any prerequisites. Missing: expected response fields, time zone handling, event count limits.
Parameter 'date' has a minimal description ('Valid date string (must be parseable by Date.parse())') that relies on the LLM understanding JavaScript Date.parse() behavior. No examples, no format guidance, no timezone clarification. Should specify: 'ISO 8601 format (YYYY-MM-DD) or any string parseable by Date.parse(). Times are interpreted in UTC.'
Output schema is not documented. The tool returns {content: [{type: 'text', text: JSON.stringify(...)}]} but the nested JSON structure (meetings array, error field) is not formally declared. LLMs cannot infer the shape of 'meetings' or plan downstream tool calls without seeing the schema.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 26 | - | v1 |
Error handling returns {error: err.message} with no recovery guidance. A connection failure or missing CALENDAR_ID environment variable produces a stack trace the LLM cannot act on. Should return: 'Failed to fetch calendar events: {reason}. Verify GOOGLE_PUBLIC_API_KEY and CALENDAR_ID are set.' with a retryable classification.
No pagination, limits, or result-set documentation. Tool hardcodes maxResults=10 but the description and output do not declare this limit. If the user asks for 'all events on a date,' the LLM has no way to know only 10 are returned or how to fetch more. Results should indicate if truncated and offer pagination parameters.
No time zone handling documented. The tool calculates UTC boundaries but does not explain how calendar events with different time zones are handled or whether the user's local time is considered. This ambiguity can lead to off-by-one-day errors when querying near midnight.
Response format is text-wrapped JSON instead of structured output. Returning {content: [{type: 'text', text: JSON.stringify(...)}]} requires the LLM to parse JSON from a string field, adding latency and error risk. Should return structured MCP output with typed fields for meetings, error_code, and retry_guidance.
API credentials (GOOGLE_PUBLIC_API_KEY, CALENDAR_ID) are injected via environment variables, which is correct. However, the tool exposes no permission scopes or access hints. The description should note: 'Requires Google Calendar API credentials with read:calendar scope.'