FastMCP server for ANZ public holidays and school terms
This server demonstrates above-average tool definition quality with consistent naming, detailed descriptions, and complete input schemas across all three tools. All tools follow verb_noun naming conventions (is_public_holiday, get_school_term, next_business_day). Descriptions are detailed (180-220 chars each), well above the 10-1024 char baseline, and include context about what each tool does and what it returns. All parameters have type definitions and descriptions. However, output schemas are documented only in text form within the description; there is no formal JSON Schema output documentation in the tool registration. Error handling is basic and lacks recovery guidance (pattern:recovery-guide). No tool annotations (readOnlyHint/destructiveHint/idempotentHint) are present despite all tools being READ_ONLY operations.
Determine whether a given date falls within a school term in a specified ANZ region (NZ, VIC, NSW, QLD, WA, SA, TAS, NT, or ACT). Returns a summary string and a structured data object with term details, week number, school days elapsed/remaining, and the full 2026–2027 term schedule for that region.
Check whether a given date is a public holiday in a specified ANZ region (NZ, VIC, NSW, QLD, WA, SA, TAS, NT, or ACT). Returns a summary string and a structured data object with the holiday name, type (national/regional), and a full chronological list of 2026–2027 holidays for that region.
Calculate the next business day after a given date in a specified ANZ region (NZ, VIC, NSW, QLD, WA, SA, TAS, NT, or ACT). Skips weekends and public holidays. Returns a summary string and structured data with the calculated date, day of week, and the reason for any skip.
Output schemas not formally documented. Tool descriptions mention structured data fields (e.g. 'query', 'result', 'holiday_name', 'type') but the tool registration does not include a JSON Schema for the response object. LLMs cannot reliably understand the expected output structure without explicit schema documentation.
No tool annotations (toolAnnotations=false). All three tools are READ_ONLY operations, but this is not declared in the tool definition. Adding readOnlyHint=true to each tool's registration would allow agents to optimize execution order and understand that these tools are safe to call speculatively.
Error handling lacks recovery guidance. If a user passes an invalid region or date format, the server will return a validation error but does not guide the agent on what to do next (e.g. 'Valid regions are: NZ, VIC, NSW, QLD, WA, SA, TAS, NT, ACT'). This violates pattern:recovery-guide.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | A | 85 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 17 | - | v1 |
Tool name 'next_business_day' lacks a verb prefix. By rubric convention, this should be 'get_next_business_day' to match the verb_noun pattern and make intent clear at a glance. Current name is slightly ambiguous about whether it returns a date or performs an operation.