MCP server for the Federal Register of Legislation: search Australian Commonwealth law, read it as it stood on any date, and check citations against the official register
Strong domain-specific tool design with clear naming (all verb-noun), comprehensive parameter descriptions, and well-documented schemas. All 8 tools have explicit input schemas with type definitions and parameter descriptions. Tool descriptions are detailed (100-200 chars typical) and explain purpose, prerequisites, and return values. Error handling is present but generic, most tools return unparsed() or missingSection() messages without actionable recovery guidance. Output schemas are documented in code comments but not formally exposed to clients. Pagination is implemented for large results (PAGE_SIZE=5000). No security issues detected (read-only operations, no secrets in params). Composition is clean, each tool has one responsibility, and outputs chain well (titleId flows through multiple tools). Main gaps: no formal output schema documentation visible to clients, error messages lack recovery hints, and no tool annotations (readOnlyHint, etc.) despite all tools being read-only.
Compares two compilations of the same act on different dates and reports what changed between them.
Lists titles that amend a given act, with details of what they changed.
Reads a section of an act as it stood on a past date. Returns the text of a numbered provision from a specific compilation in force on that date.
Reads a section or schedule of an act from the latest compilation on the register. Returns the text of a numbered provision, or a table of contents if no section is specified.
Returns metadata about a title on the register: its status, collection, whether it is in force, and its amendment history.
Lists all compilations of an act on the register, with their status and in-force dates.
Finds Commonwealth acts and legislative instruments on the Federal Register of Legislation by title. Returns title ids for the other tools. Falls back to full-text matching when nothing matches by name.
Error messages lack actionable recovery guidance. Functions like unparsed() and missingSection() return explanatory text but do not guide the LLM on next steps (e.g., 'Try search_law() with different keywords' or 'Available sections: ...'). Per pattern:recovery-guide, errors should tell the agent what to do next.
Tool annotations missing. All 8 tools are read-only (no state modification), but none declare readOnlyHint=true. Per current MCP spec (2026-07-28), tool annotations enable clients to optimize caching and retry logic. This is a low-impact gap but represents incomplete spec adoption.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Checks statute citations in free text against the register. Parses citations like 's 3A of the Income Tax Rates Act 1986' and reports whether each section exists in the current compilation.
Output schemas not formally documented for clients. Tool descriptions mention return types (e.g., 'Returns title ids', 'Returns the text of a numbered provision') but no structured schema is exposed via the MCP protocol. Clients cannot validate responses or plan downstream calls without reverse-engineering from examples.
Date format validation not documented. get_law_as_at and compare_versions accept 'date' parameters described as 'yyyy-mm-dd format' but no regex pattern or validation error message is visible. LLMs may pass invalid dates (e.g., '2024-13-45') without clear feedback.
Pagination guidance incomplete. get_law_text and get_law_as_at support page parameter for full=true, but the description does not explain pagination behavior (e.g., 'page starts at 1', 'returns [page N of M]'). LLMs may not know how to iterate through large acts.