An MCP server that provides tools to interact with Google Calendar, including listing calendars, retrieving upcoming events, and finding available time slots.
Three tools with basic verb-noun naming (list_, get_). All have descriptions and input schemas with types. However, descriptions are generic and lack LLM-optimization guidance. Parameters lack constraints (enums, ranges, format specs). No output schema documentation. Error handling returns plain strings without recovery guidance. Missing parameter descriptions for some fields. No tool annotations (readOnlyHint, idempotentHint). Schemas present but minimal, no examples, no field-level descriptions in output.
Find available time slots in a calendar. Args: calendar_id: The ID of the calendar to check days_ahead: Number of days ahead to check (default: 7) slot_duration_minutes: Duration of each slot in minutes (default: 30) start_hour: Start hour of the day in 24-hour format (default: 9) end_hour: End hour of the day in 24-hour format (default: 17) Returns: A formatted string of available time slots
Get upcoming events from a calendar. Args: calendar_id: The ID of the calendar to check days_ahead: Number of days ahead to check (default: 7) max_events: Maximum number of events to return (default: 10) Returns: A formatted string of upcoming events
List all available Google Calendars. Returns: A formatted string listing all calendars with their IDs and names.
No output schema documentation. Tools return formatted strings; LLMs cannot parse structure or extract fields for downstream calls. Violates pattern:tool requirement to document return types.
Parameter descriptions lack constraints. 'days_ahead', 'slot_duration_minutes', 'start_hour', 'end_hour' have no min/max bounds, format specs, or valid ranges. LLMs may pass absurd values (e.g. days_ahead=999999).
Error handling returns plain strings without recovery guidance. 'Error retrieving calendars: {str(e)}' gives LLM no actionable next step. Should categorize errors (retryable vs user-fixable) and suggest alternatives.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Tool descriptions are generic and under-optimized for LLM selection. 'Find available time slots in a calendar' lacks WHEN to use it, what it returns, or how it differs from get_upcoming_events. Descriptions should be 50-200 chars and answer: what, when, why.
No tool annotations (readOnlyHint, idempotentHint). All three tools are read-only and idempotent, but this is not declared. Agents cannot infer safety properties without explicit hints.