View-only MCP App: court availability rendered inside an MCP host. Exposes court availability data for sports courts with a read-only UI resource.
Single tool with clear naming (get_court_availability), good description (95 chars), and complete input schema with enum constraint. Output schema documented via Zod (AvailabilitySchema). Tool is read-only with no destructive operations. Lacks error handling guidance, parameter descriptions could be more detailed (e.g., what happens if date is invalid), and no tool annotations (readOnlyHint). Composition is simple but appropriate for the domain.
Show which courts and time slots are free for a given date and sport. Read only, no booking.
Parameter descriptions lack format/constraint details. 'ISO date, e.g. 2026-08-21' uses example instead of formal constraint; should state 'ISO 8601 date string (YYYY-MM-DD)' and validate server-side.
No error handling guidance. Tool lacks recovery hints for invalid dates, unsupported sports, or backend failures. Error responses should guide LLM: 'Invalid date format. Use ISO 8601 (YYYY-MM-DD).'
Missing tool annotations. Tool is read-only but lacks readOnlyHint annotation. Should include _meta.annotations.readOnlyHint=true to signal safety to agents.
Output schema not validated at runtime. AvailabilitySchema is defined but tool handler does not validate response against it before returning. Malformed data could reach the LLM.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 64 | 2026-07-28+ | v2 |
No pagination or result limits documented. If courts or slots grow large, response could bloat context. Tool description should state max courts/slots returned.