Skip to main content
Glama

jurisd

Source-grounded Australian & New Zealand legal research, on your own machine.

jurisd is an open, local-first research and drafting workbench for AU/NZ law. It gives you, or the AI assistant you already use, fast answers from legislation and case law where every claim traces back to the primary source. It runs locally by default, so confidential and privileged work never has to leave your machine.

flowchart LR
    q["Query: a case name<br/>or cases citing X"]
    q --> route{"In a local module"}
    route -->|"yes, offline"| local["Local recall:<br/>provision lookup,<br/>semantic search,<br/>citation graph"]
    route -->|no| live{"AustLII reachable"}
    live -->|"Cloudflare-blocked"| exa["Exa discovery<br/>or direct citation URL"]
    live -->|yes| fetch
    exa --> fetch["Fetch AustLII document<br/>HTML or PDF"]
    local --> src["Primary source obtained"]
    fetch --> src
    src --> aglc4["Format AGLC4 citation"]
    aglc4 --> trace["Trace cited-by and<br/>citing cases<br/>via the citation graph"]
    trace --> out["Result:<br/>case text, AGLC4 citation,<br/>and citing cases,<br/>each linked to its source"]

Guiding principle: no source span, no trusted legal claim. Vector recall is recall, not authority; a model's output is a candidate until you can see its source and check it.

Previously published as auslaw-mcp.

Status: v0.5.0, pre-1.0. The surface that ships today is a CLI, a TUI search shell, and a set of tools the AI assistant you already run can call, across live research, citation and bibliography work, and local data modules. The longer arc is in Where this is heading.

Why jurisd is different

  • Traceable, not hallucinated. Every result links to its primary source (an austlii.edu.au URL, the provision text, an AGLC4 citation). You verify it; you do not take its word.

  • Local-first and private. Recall, provision lookup, and the citation graph work offline over installed corpora. Your matter stays on your machine.

  • Australian-law-native. All AU/NZ jurisdictions, jurisdiction-aware search, AGLC4 citation formatting.

  • Degrades visibly, never silently. A missing key, dependency, or module disables only the feature that needs it and says so. With no key and no network, local-module recall still answers.

Related MCP server: pdfsearch-mcp

Who it's for

  • The practitioner who just wants to ask a question and get an answer they can stand behind in front of a client or a court.

  • The researcher or student who needs to trace authority, not just read a summary.

  • The terminal-native power user who wants scriptable, composable legal tools.

  • The builder wiring AU/NZ legal research into their own AI agent.

How jurisd answers

jurisd has three answer sources, tried in precedence order:

  1. Local data modules (offline, no network, no key). Installed parquet bundles holding legislation and decisions with provision-level structure, citation edges, and chunk embeddings. This is the local-first core: deterministic provision lookup, an Act containment tree, an offline citation graph, and local semantic search.

  2. Live research over AustLII. Natural-language case and legislation search, full-text fetch (HTML and PDF), and AGLC4 formatting. AustLII's own search sits behind a Cloudflare challenge, so discovery is recovered through Exa-backed search (and direct citation URLs); the documents returned are AustLII primary sources throughout. See Tools for the detail.

  3. OALC fallback. An Open Australian Legal Corpus layer that backs the live layer when a direct fetch is blocked.

Quick start

Run with npx (no clone)

npx -y jurisd

npx installs the package from its built distribution and launches the server over stdio in one step. Before the npm registry package is published, use npx -y github:russellbrenner/jurisd.

Install the CLI persistently from NPM or directly from GitHub

npm published package

npm install -g jurisd
jurisd --help

npm install via git directly, including your own fork

npm install -g https://github.com/russellbrenner/jurisd/archive/refs/heads/main.tar.gz
jurisd --help

NB: Bare git installs such as npm install -g github:russellbrenner/jurisd depend on npm's install-links setting and can leave a broken global bin on hosts where install-links=false.

Register with Your Coding Agent

claude mcp add jurisd -- npx -y github:russellbrenner/jurisd

Or add it to your client config directly:

{
  "mcpServers": {
    "jurisd": {
      "command": "npx",
      "args": ["-y", "github:russellbrenner/jurisd"]
    }
  }
}

Using a different agent? docs/HARNESS-SETUP.md has copy-paste configs for Cursor, Windsurf, VS Code, Cline, Continue, Codex CLI, Zed, Gemini CLI, and more.

All environment variables are optional — with none set, the live AustLII layer and the local-module recall layer both work. See docs/INSTALL.md for the local-clone path, every config option, and the offline/baseline guarantee.

Claude Code skill

A bundled Claude Code skill teaches the agent expert jurisd usage from day 0 — which of the 12 tools to reach for, the local-first/live-fallback rule, AGLC4 citation workflows, and a worked research session. Install it by copying the skill folder into your skills directory:

cp -r skills/jurisd-research ~/.claude/skills/

(or your plugin's skills path). The skill activates automatically on legal-research and AGLC4 prompts once the jurisd MCP server is registered.

Tools

12 tools in three groups. Operation variants are selected via a mode / op / action / by discriminator on the relevant tool.

Live research (AustLII)

Tool

What it does

search_cases

Natural-language case-law search across all AU/NZ jurisdictions; authority ranking; title/phrase/boolean methods; pagination.

search_legislation

Search AU/NZ legislation with the same method/jurisdiction/sort controls.

fetch_document_text

Fetch full text from an AustLII URL (HTML, PDF).

AustLII sits behind Cloudflare. AustLII now serves a JavaScript managed-challenge that automated clients — including TLS-impersonating ones — cannot clear, so search_cases / search_legislation cannot query AustLII directly. Configure a fallback source; results are still AustLII primary sources (austlii.edu.au URLs) recovered through another channel.

Fallback

Env var

Cost

You gain

You lose

Direct citation

none

Free

Queries containing a neutral citation such as [2018] HCA 9 resolve directly to the canonical AustLII case URL.

Citation-only. It is not general natural-language search.

Exa

EXA_API_KEY

Paid/free tier

Search discovery returns canonical AustLII case/legislation URLs, even for obscure cases.

Discovery only (URL + citation); full text is fetched separately.

none

-

-

-

Search returns a degraded result whose warning names the env vars; document fetch still falls back to the local OALC corpus when available.

Resolution order: direct citation URL when present, then Exa, then a degraded result. The document source remains AustLII throughout.

When AustLII search is Cloudflare-blocked, the tools degrade gracefully rather than failing: search_cases returns any Exa results it can find plus a warning, sources, and degraded: true, and reports incomplete configured coverage (for example exa: "not_configured") instead of hiding that source status. search_legislation returns an empty degraded result with the same machine-readable status instead of failing the tool call. CLI search commands exit 4 for degraded source coverage.

Citation + bibliography (AGLC4)

Tool

What it does

format_citation

Format an AGLC4 citation. mode: full (default), short, ibid, subsequent, pinpoint.

resolve_citation

Resolve a citation to its source. mode: auto (default), validate (AustLII existence check), search.

cite

Write to the local citation cache. action: add (default) or refresh_source (conditional-HEAD freshness check).

bibliography

Read the local citation cache (no network). op: get, list (default), export (.bib), cited_by.

Local data modules (offline recall)

These five tools serve installed offline data modules. They require the optional @duckdb/node-api dependency and at least one installed module; semantic_search_local additionally needs @huggingface/transformers. Every answer carries metadata.source = "local_module" with the module name, version, and snapshot date (plus a staleness advisory when the snapshot is old).

Tool

What it does

get_provision

Deterministic provision lookup (e.g. s 18 of an Act). No embedding, no ranking; typed not-found so the router can fall through.

get_act_structure

Containment tree of an Act (Act → Part → Division → section/schedule/clause) over act_provision edges, closed-world.

find_citing

Documents in installed modules that cite a target, with each citation's provenance span.

semantic_search_local

Vector recall: the query is embedded locally (bge-small, offline, no key) and ranked by cosine over chunk embeddings, with optional facet pre-filters.

list_data_modules

Introspect installed modules: coverage, doc/chunk counts, embedding descriptor, load status, snapshot date and staleness.

Full parameter tables for every tool are in docs/AGENT-GUIDE.md.

CLI foundation and compatibility

jurisd keeps the MCP server as the compatibility surface while the CLI is being reorganised around task-oriented command contracts.

Existing flat CLI commands remain available during the foundation work.

Data modules

A data module is a self-describing parquet bundle (documents, chunks, edges, unmatched citations, plus a manifest.json) published as a Hugging Face dataset. Everything needed to load and query a module — schema version, coverage, embedding descriptor, file hashes, and licence posture — is in its manifest. No out-of-band config.

Status: first module published. legislation-cth is available from workingmem/legislation-cth on Hugging Face. It provides Commonwealth primary and secondary legislation, 32,143 documents, 857,262 chunks, citation edges, unmatched citations, and local bge-small embeddings. Running jurisd fetch-module legislation-cth downloads the manifest and parquet files from Hugging Face, verifies every file against the manifest sha256 values, and installs the module atomically.

Modules are queried in place: DuckDB scans the parquet on disk and never materialises a whole table into memory, so a host can install many modules (Commonwealth legislation + per-state + decisions) and stay flat in RSS.

Installing modules

Modules are operator-installed via the CLI (kept off the tool surface so an LLM never triggers a large download mid-conversation):

jurisd fetch-module <name> [--modules-dir DIR]   # download + sha256-verify + atomic install
jurisd verify-module <name> [--modules-dir DIR]  # re-verify installed files against the manifest
jurisd list-modules [--modules-dir DIR]          # list installed modules (incl. refused)

The default install root is ~/.jurisd/modules/ (override with JURISD_MODULES_DIR or --modules-dir). fetch-module validates the manifest and checks the schema version before downloading any parquet, sha256-verifies every file against the manifest, installs atomically (temp-then-rename, so a half-written module never appears), and prints the licence attribution lines at install time.

Advanced operators can pass --manifest-url URL to install from an explicitly trusted manifest. The sha256 checks prove downloaded files match that manifest; they do not prove the manifest's provenance or protect against a malicious or compromised manifest source.

Baseline vs domain-specialised variants

A module's identity is (name, module_version). The module_version handle distinguishes a module's variant — a baseline module is the standard build (deterministic structure, citation edges, bge-small embeddings); a domain-specialised variant is a build tuned for a particular corpus or task. Use list_data_modules to see the variant, coverage, and embedding descriptor of each installed module, and pin a specific one with the module argument on any recall tool.

BYOK provider adapter

semantic_search_local has two optional enhancement slots that operate over the locally-retrieved top-k results — they never replace local recall, they refine it:

  • rerank — reorder the local top-k by a stronger relevance model.

  • extractive-QA — return the best answer span within a retrieved chunk.

Both are expressed through one vendor-neutral DomainAdapter interface. The distinction is capability presence, framed as baseline vs domain-specialised with a provider-interpolated display label:

  • Baseline (always present): pure local cosine order. No network, no key.

  • Domain-specialised (slot): selected only if a provider is configured and reachable via a BYOK key. With ISAACUS_API_KEY set and the endpoint reachable, the capability probe reports domain_adapter: { label: "Isaacus-enhanced", canRerank: true, canExtractiveQA: true } and responses carry metadata.enhancement = "Isaacus-enhanced".

If the key is unset, or set-but-unreachable, the adapter degrades to baseline and the tool still returns local cosine results — reported by the probe, never thrown into a tool result.

Quality

jurisd's local data layer is built and scored honestly against a gold set. The jurisd-data gold-set evaluation measures the local enricher (segments, defined terms, citation crossrefs) against 90 Open Australian Legal Corpus / Kanon ILDGS documents, under two parallel metrics:

  • strict — the conservative audit metric: every typed prediction unmatched within its type is a false positive.

  • aligned — the decision metric: a strict false positive whose span co-locates an untyped gold sub-span at IoU ≥ 0.9 is credited as a granularity agreement (a vocabulary disagreement with the silver standard, not an extraction error) rather than penalised.

The current baseline does not yet pass all four gate thresholds (segment F1, citation precision, citation recall, defined-term F1). Headline segment F1 is 0.44 strict / 0.64 aligned against a 0.85 gate. The report localises every gap to a specific rule (the residual segment gap is genuine over-segmentation, chiefly an endnotes-boundary flood; citation precision is internal-ref over-firing on structural lines). The published module exposes the resulting data artefacts; evaluation reports remain part of the module publishing workflow until a public report location is available.

Where this is heading

The sections above describe what ships today. The longer arc for jurisd is a secure, local-first workbench for high-trust legal work, built so serious reasoning can happen on your own machine with every act provable and nothing leaving without your say-so. Planned directions (design intent, not yet built):

  • A sandboxed local agent runtime. Run a research and drafting agent over your own sources inside an isolated, encrypted workspace, so sensitive and privileged material cannot leak.

  • Tamper-evident provenance. An auditable record of every step, and an Evidence Pack you can hand a reviewer to verify process and sources (not legal correctness).

  • A first-class desktop app and TUI. Matter view, source and provenance pane, review queue, and a drafting canvas, for both terminal-native researchers and practitioners who just want a clean interface.

  • An SDK and plugin base, with connectors for the tools you already use (Word, Obsidian, Zotero).

  • Source-anchored drafting. Work-product where every assertion carries its citation, gated by human review.

Nothing in this list is claimed as built. See ROADMAP.md for the sequenced workstreams and review gates.

Licensing

  • Code: Apache-2.0 (see LICENSE). Third-party dependency licences are catalogued in LICENSE-THIRD-PARTY.md.

  • Module data: licensed per source, declared in each module's manifest.json licence block, and surfaced at fetch-module install time. The aggregate is CC-BY-4.0 (Open Australian Legal Corpus), but redistribution is decided per source, not in aggregate:

    • AustLII-sourced rows are excluded from published modules by default — the AustLII Terms of Service is restrictive, and re-importing it is exactly what the live transport layer routes around. They remain available recipe-only (rebuild locally).

    • VIC and NT legislation are not redistributable (Government Printer / Crown copyright, no open licence) — recipe-only.

    • Commonwealth (FRL), NSW, QLD, SA, TAS, WA legislation and HCA/FCA/NSW case-law sources are redistributable under the CC-BY-4.0 aggregate, subject to per-source confirmation before each module publishes.

Each published module carries its own licence block in manifest.json, surfaced at fetch-module install time.

Documentation

Document

Description

INSTALL.md

Day-0 install paths, Claude Code config, env vars, module flow

HARNESS-SETUP.md

Copy-paste MCP config for every popular coding agent (CC, Cursor, Zed, …)

CLI.md

CLI command shape, compatibility aliases, output rules, exit codes

MCP-COMPATIBILITY.md

Compatibility reference for the current MCP tool surface

SECURITY-AUTHORITY.md

Command authority, side-effect classes, terminal safety, credential rules

jurisd-research skill

Claude Code skill: tool decision guidance, AGLC4 workflows, worked example

AGENT-GUIDE.md

Agent-facing usage guide with full tool catalog and examples

ARCHITECTURE.md

System architecture, deployment topology, CI/CD

DOCKER.md

Docker deployment guide

ROADMAP.md

Forward-looking project roadmap and review gates

Jurisdictions

Code

Jurisdiction

cth

Commonwealth of Australia

federal

Federal courts (alias for cth)

vic

Victoria

nsw

New South Wales

qld

Queensland

sa

South Australia

wa

Western Australia

tas

Tasmania

nt

Northern Territory

act

Australian Capital Territory

nz

New Zealand

other

All jurisdictions (no filter)

Example queries for AI assistants

Once connected, ask natural-language questions:

  • "Find the High Court decision in Mabo v Queensland (No 2) and explain native title."

  • "Search for recent NSW cases about defamation on social media."

  • "What does section 18 of the Australian Consumer Law say?" (answered offline if the module is installed)

  • "Find cases that cite Mabo v Queensland (No 2)."

  • "Format Mabo v Queensland (No 2) [1992] HCA 23 (1992) 175 CLR 1 per AGLC4 at [64]."

  • "Compare how Victoria and NSW courts have treated non-compete clauses."

Development

git clone https://github.com/russellbrenner/jurisd.git
cd jurisd
npm install
npm run dev        # hot reload
npm run build      # TypeScript compile
npm start          # run the built server
npm test           # unit + integration + perf (integration hits live services)
npm run lint       # ESLint (flat config)

Docker

./build.sh         # build the image
docker-compose up  # run locally

See docs/DOCKER.md for details.

Kubernetes (k3s)

./build.sh
# import the image to k3s nodes (see k8s/README.md)
./deploy-k8s.sh

See k8s/README.md.

Contributing

See CONTRIBUTING.md and SECURITY.md for responsible disclosure.

Key principles:

  • Primary sources only (no journal articles)

  • Citation accuracy is paramount

  • Degrade visibly, never silently

  • All unit tests must pass before committing

Disclaimer

This tool is for legal research purposes only and does not constitute legal advice.

  • Search results may not be comprehensive and should not be relied upon as a complete statement of the law.

  • Source databases may not include all decisions or the most recent updates.

  • Always verify citations and check for subsequent treatment of cases.

  • Legal advice should be sought from a qualified legal practitioner for any specific legal matter.

  • The authors and contributors accept no liability for any loss or damage arising from use of this tool.

License

Apache-2.0

Available Tools

12 tools
bibliographyBibliography (Read Citation Cache)A

Read from the local citation cache without network calls. op=get retrieves one citation by cite key, AGLC4 string, neutral citation, or title. op=list (default) lists cached citations, optionally filtered to a document. op=export writes a BibLaTeX .bib file and returns the bib text. op=cited_by returns the locally cached cited-by list for a citation.

ParametersJSON Schema
NameRequiredDescriptionDefault
opNoget = look up one cached citation; list = list cached citations (default); export = write a BibLaTeX .bib file; cited_by = return the cached cited-by list for a citationlist
queryNoCite key (e.g. 'mabo1992'), AGLC4 citation string, neutral citation, or case title — required for op=get
formatNojson
citeKeyNoCite key of the case to retrieve cached cited-by data for — required for op=cited_by
documentNoFilter to citations used in this document (op=list/export). Omit for all project citations.
outputPathNoWrite the .bib file to this path (op=export). Relative to the cache dir, or an absolute path that resolves within it; must end in .bib. Defaults to <cacheDir>/<projectName>.bib

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully discloses the read-only nature ('without network calls') and explains each operation's behavior, including the side effect of writing a .bib file for 'export'. It does not mention any potential data mutability beyond that file write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no wasted words. The first sentence states the core purpose, and the second sentence enumerates the operations efficiently. It is front-loaded and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has 6 parameters and multiple operations, the description covers all operations and key parameters, including required fields for specific ops. No output schema is present, but return values are described sufficiently. It feels complete for an agent to understand usage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, and the description adds context beyond the schema, e.g., specifying that 'query' is required for 'op=get' and that 'outputPath' defaults to a specific path. This helps the agent understand parameter usage beyond the enum and type definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool reads from a local citation cache without network calls, and enumerates specific operations (get, list, export, cited_by). This distinguishes it from sibling tools that involve network calls or different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use each operation (e.g., 'get retrieves one citation by cite key...', 'list (default) lists cached citations'). However, it does not explicitly state when not to use the tool or directly compare to alternatives like 'resolve_citation' or 'find_citing'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

citeCite (Cache Citation / Refresh Source)A

Write to the local citation cache. action=add (default) stores or updates a citation, assigns a biblatex-compatible cite key on first use, and returns the cite key and canonical AGLC4 string. action=refresh_source checks whether the locally cached source file for a citation is still current (conditional HEAD using stored ETag/Last-Modified) and re-downloads it when the remote is newer.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoPrimary source URL (AustLII) — required for action=add
typeNoSource typecase
yearNoDecision year
courtNoCourt code, e.g. 'HCA'
styleNoWhich citation components to include in aglc4Fullcombined
titleNoCase name, e.g. 'Mabo v Queensland (No 2)' — required for action=add
actionNoadd = store/update a citation in the local cache (default); refresh_source = check the cached source file's freshness via conditional HEAD and re-download when staleadd
citeKeyNoCite key of a cached citation, e.g. 'mabo1992' — required for action=refresh_source
summaryNoBrief abstract of the source
documentNoLogical document name this citation belongs to, e.g. 'essay-chapter-3'
keywordsNo
pinpointNoPinpoint to include in the AGLC4 full form, e.g. '[20]' or '401 to 407'
jurisdictionNo
footnoteNumberNoFootnote number where this citation first appears in `document`
neutralCitationNoNeutral citation, e.g. '[1992] HCA 23'
reportedCitationNoReported citation, e.g. '(1992) 175 CLR 1'

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses that the tool writes to a local cache, assigns biblatex-compatible keys, and performs conditional HTTP requests for freshness checks. However, it does not describe error handling, output format for refresh_source, or idempotency, leaving some behavioral traits implicit.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the first sentence introducing the tool and the second detailing both actions. It is front-loaded with the purpose and organized efficiently, with no unnecessary words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (16 parameters, 2 actions) and lack of output schema, the description covers the main functions well. It specifies return values for 'add' (cite key and AGLC4 string) but omits output details for 'refresh_source'. For a tool with no annotations, this is reasonably complete but could be slightly more thorough.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is high (88%), so the baseline is 3. The description does not add significant meaning beyond the schema; it mainly restates the action parameter's effect. For the 16 parameters, the schema already provides adequate descriptions, so the description adds minimal extra value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool writes to a local citation cache with two distinct actions: 'add' for storing/updating citations and returning a cite key and AGLC4 string, and 'refresh_source' for checking source freshness via conditional HEAD. It uses specific verbs and resources, distinguishing it from sibling tools like bibliography or format_citation by focusing on cache writing.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide guidance on when to use this tool versus alternatives. It does not mention exclusions or contexts where other tools (e.g., format_citation, fetch_document_text) would be more appropriate. With no annotations to supplement, this is a significant gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fetch_document_textFetch Document TextA

Fetch full text for a legislation or case URL (AustLII). When a citeKey is supplied and AUSLAW_FETCH_SOURCES is not set to 'false', also saves a local markdown copy to the sources directory and updates the cache entry's HTTP freshness headers. Without citeKey, only the document text is returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
formatNojson
citeKeyNoCite key of an existing cache entry to associate with this fetch (updates source fields).

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Given no annotations, the description transparently discloses the conditional side effect of saving a local markdown copy and updating cache headers. It does not mention rate limits, authentication, or error behavior, but the core behavioral trait (read with potential write) is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, front-loaded with the main purpose, and each sentence adds necessary information. No redundant or vague phrasing; it is as concise as possible while conveying conditional behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, no annotations, and partial parameter documentation, the description adequately covers the tool's core function and the conditional side effect. It lacks details on output format and error handling, but for a retrieval tool, the essential information is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds significant meaning to the 'citeKey' parameter by explaining the conditional saving behavior. It also provides context for the 'url' parameter (AustLII). However, it does not elaborate on the 'format' parameter beyond what the schema's enum already provides. With 33% schema coverage, the description compensates well.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb ('Fetch') and resource ('full text'), targeting legislation or case URLs from a specific domain (AustLII). It also distinguishes additional behavior with citeKey, making the tool's purpose clear and distinct from siblings like 'get_provision' or 'resolve_citation'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool with and without citeKey, and the environmental condition ('AUSLAW_FETCH_SOURCES') that controls side effects. However, it does not explicitly contrast with other tools or provide 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

find_citingFind Citing Documents (local module)A

Documents in installed local data modules whose text cites a target document, via cites/considers edges (closed-world, deterministic). Returns each citing document with the provenance span of the citation. Requires @duckdb/node-api and at least one installed module.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindsNoEdge kinds to include; default both. 'considers' is the stronger substantive-engagement signal
limitNo
formatNojson
moduleNo
targetYesCitation or work/version identity of the cited document, e.g. 'Mabo v Queensland (No 2) [1992] HCA 23'

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It mentions closed-world, deterministic behavior, and return structure (provenance span), but does not disclose side effects, performance, or error handling. Partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no redundant information. The first sentence states purpose and behavior, the second adds requirements. Efficient and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters and no output schema, the description covers purpose and basic behavior but omits error handling, pagination details, and parameter interdependencies. Moderately complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 40%, so description should compensate. It adds context about the return format but does not explain parameters like 'module' or 'limit' beyond the schema. Provides some value but insufficient for low coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it finds citing documents in local data modules using cites/considers edges, with specific verb and resource. It distinguishes from siblings by specifying local module scope and edge types.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for local modules and lists prerequisites (installed module, @duckdb/node-api), but does not explicitly state when to use or not use this tool vs alternatives like search_cases or search_legislation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

format_citationFormat AGLC4 CitationA

Format an Australian case citation per AGLC4 rules. mode=full combines case name, neutral citation, reported citation, and optional pinpoint. mode=short/ibid/subsequent produce AGLC4 short-form, Ibid, and subsequent references (subsequent requires footnoteRef). mode=pinpoint fetches a judgment from AustLII and generates a pinpoint citation to a specific paragraph (by number or phrase).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlNoAustLII document URL to fetch and search — required for pinpoint mode
modeNofull = AGLC4 full citation (default); short = short form; ibid = Ibid (back-to-back same source); subsequent = title (n X); pinpoint = fetch a judgment and generate a paragraph pinpointfull
styleNoCitation style for full mode: neutral (neutral only), reported (reported only), combined (both)combined
titleNoCase name, e.g. 'Mabo v Queensland (No 2)' (full mode) or the abbreviated case name chosen at first reference, e.g. 'Mabo' (short/ibid/subsequent). Required for all modes except pinpoint.
phraseNoPhrase to search for within paragraphs (pinpoint mode)
pinpointNoPinpoint reference, e.g. '[20]' (full mode)
footnoteRefNoFootnote number of first citation — required for subsequent mode
caseCitationNoCase citation to prepend to the pinpoint, e.g. '[2022] FedCFamC2F 786' (pinpoint mode)
pinpointPageNoPage pinpoint number for short-form modes, e.g. 401
pinpointParaNoParagraph pinpoint number for short-form modes, e.g. 20 → [20]
neutralCitationNoNeutral citation, e.g. '[1992] HCA 23' (full mode)
paragraphNumberNoParagraph number to locate (pinpoint mode)
reportedCitationNoReported citation, e.g. '(1992) 175 CLR 1' (full mode)

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses that pinpoint mode fetches a judgment from AustLII, a notable side effect. However, it does not mention authentication requirements, rate limits, or error handling for network failures. With no annotations, the description carries the burden fully, but it does provide key behavioral context for a complex tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused paragraph, front-loading the tool's core purpose. Every sentence adds value: mode enumeration, requirements, and the unique AustLII functionality. It is efficient without being terse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (13 parameters, 5 modes, no output schema), the description covers the purpose of each mode and parameter interactions adequately. It lacks detail on output format or error states, but for a formatting tool this is acceptable. The description is complete enough for a legal citation expert.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is complete (100%), so the baseline is 3. The description adds semantic value by grouping parameters with modes and explaining their interactions (e.g., 'pinpointPara' and 'pinpointPage' are for short-form modes). This goes beyond the schema's individual parameter descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description specifies a concrete verb ('Format') and resource ('Australian case citation per AGLC4 rules'), with detailed enumeration of modes (full, short, ibid, subsequent, pinpoint). This clearly distinguishes it from sibling tools like 'cite' or 'resolve_citation' which likely serve different citation systems or tasks.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains each mode's purpose and when to use them, including required parameters for specific modes (e.g., footnoteRef for subsequent). It lacks explicit comparison to sibling tools (e.g., when to use this versus 'cite'), but the context signals and mode detail provide sufficient guidance for a legal agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_act_structureGet Act Structure (local module)A

Return the containment tree of an Act (Act -> Part -> Division -> section/schedule/clause) by walking 'act_provision' edges in an installed local data module (offline, closed-world). Returns a nested tree or a typed not-found result. Requires @duckdb/node-api and at least one installed module.

ParametersJSON Schema
NameRequiredDescriptionDefault
actYesAct work identity or citation
depthNoMax tree depth; default 12 (also the cycle backstop)
formatNojson
moduleNo

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool returns a tree or not-found result and mentions the algorithm (walking edges) and requirements (DuckDB, installed module). However, it does not explicitly state that the tool is read-only, idempotent, or free of side effects. The transparency is adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no extraneous content. It front-loads the purpose and structure, then adds essential context (offline, closed-world) and requirements. Every sentence serves a clear function, making it highly efficient for an agent to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (4 parameters, no output schema), the description covers the essential purpose and constraints but lacks details on return format structure, parameter roles for module and format, and error handling beyond a typed not-found. With no output schema, more detail on the returned tree would be beneficial.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 50% (act and depth have descriptions, module and format do not). The tool description adds no parameter information beyond what the schema provides. It does not explain the 'module' parameter's purpose or the effect of 'format', leaving potential ambiguity for the agent. This fails to compensate for the schema's gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns the containment tree of an Act by walking specific edges, and identifies the resource (Act) and action (return tree). It distinguishes from sibling tools by specifying 'installed local data module (offline, closed-world)', setting it apart from online legislation tools like search_legislation or fetch_document_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it works offline with installed modules and returns a tree structure. While it doesn't explicitly name alternatives, the 'offline, closed-world' phrasing implies when to use it (when local data is available) and when not (e.g., for online or real-time data). This effectively guides selection among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_provisionGet Provision (local module)A

Deterministic provision lookup over installed local data modules (offline). Resolves a single provision of an Act or instrument by its citable handle (no embedding, no ranking). Returns the provision text with provenance, or a typed not-found result so the router can fall through to live AustLII. Requires @duckdb/node-api and at least one installed module.

ParametersJSON Schema
NameRequiredDescriptionDefault
actYesAct work identity or citation, e.g. 'Competition and Consumer Act 2010 (Cth)' or a work_id
formatNojson
moduleNoPin a specific module by name; otherwise the best-covering ready module is used
provisionYesCitable provision reference, e.g. 's 18', 'sch 2', 'reg 12', 'cl 4(1)'

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries full burden. It clearly states the tool is deterministic, offline, and resolves provisions via citable handles. It mentions dependencies and return types (provision text with provenance or typed not-found). However, it does not disclose potential side effects, rate limits, or error behavior beyond the not-found case, leaving minor gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph of three sentences, front-loading the core purpose. It efficiently incorporates dependencies, offline nature, and fallback behavior. While clear, the structure could be slightly improved by separating prerequisites from behavior, but overall it is concise and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description adequately explains the return value (provision text with provenance or not-found) and mentions the fallthrough mechanism. It covers dependencies and offline context. However, it does not detail the structure of the provenance information or any performance characteristics, leaving some gaps for a complex tool with multiple parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 75% (3 of 4 parameters described). The description adds limited parameter-specific meaning: it references 'citable handle' for act and provision, consistent with the schema. No extra details are provided for the module or format parameters beyond what the schema already documents. Thus, the description adds marginal value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's function: deterministic provision lookup over installed local data modules (offline). It distinguishes from siblings by stating it does not use embedding or ranking, contrasting with semantic search tools like semantic_search_local. The mention of fallthrough to live AustLII further differentiates its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit context for when to use this tool: for offline, deterministic lookups. It explains the result type (provision text with provenance or not-found) and the fallback mechanism to live AustLII, implying when not to use it (when online or non-deterministic results are needed). Prerequisites (@duckdb/node-api and installed modules) are stated, but it does not explicitly exclude alternative tools like resolve_citation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_data_modulesList Data ModulesA

Introspect the installed local data modules: name, version, jurisdiction/type coverage, doc/chunk counts, embedding descriptor, load status, snapshot date and staleness. Use includeInvalid to see refused modules and why they did not load. Reads metadata only (no DuckDB attach).

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNojson
refreshNoRe-scan the modules dir before listing
includeInvalidNoInclude refused modules with their status reason

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It explicitly states 'Reads metadata only (no DuckDB attach)', which informs the agent that this is a safe, non-destructive operation. This adds useful behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, each serving a clear purpose: first sentence details what is listed, second sentence provides usage guidance and behavioral note. No redundant or vague language.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity of the tool (3 optional boolean/enum parameters, no output schema), the description covers the purpose, parameters, and behavioral traits sufficiently for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters with descriptions. The description adds value by clarifying that 'includeInvalid' shows refused modules and why they didn't load, and implies the 'refresh' parameter re-scans. This enhances understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists installed local data modules with specific metadata fields (name, version, etc.). It distinguishes from sibling tools which are about search, citation, and other functions, not module introspection.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance on using 'includeInvalid' to see refused modules, and notes it reads metadata only. However, it does not explicitly state when not to use this tool or compare with alternatives beyond the implicit distinction from siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

resolve_citationResolve CitationA

Resolve a citation to its authoritative source. mode=auto (default) validates a detected neutral citation against AustLII and returns the direct URL, falling back to a case name search otherwise. mode=validate checks that a neutral citation exists on AustLII and returns the canonical URL. mode=search performs a text search only.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoauto = validate neutral citations against AustLII then fall back to text search; validate = AustLII existence check only; search = text search onlyauto
formatNojson
citationYesCitation or case name, e.g. '[1992] HCA 23' or 'Mabo v Queensland'

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses validation against AustLII, fallback behavior, and mode-specific operations. However, it does not mention potential error conditions, rate limits, or required authentication, which are relevant for a tool that queries an external service.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each serving a purpose: overall function, default behavior, and mode details. It is front-loaded with the main action and efficiently covers all necessary aspects without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (three modes), no output schema, and no annotations, the description is quite complete. It explains behavior for each mode. Minor omissions include error handling and return value specifics, but overall it provides sufficient operational context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 67%, with citation and mode having descriptions. The description adds meaning by explaining the mode logic (e.g., 'auto validates then falls back to text search'). The format parameter is only described in schema, but the tool's core modes are well-covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool resolves a citation to its authoritative source using AustLII. It distinguishes three specific modes (auto, validate, search) with distinct behaviors, and the verb 'resolve' accurately describes the action. The sibling tools like 'cite' or 'format_citation' have different purposes, so this tool is well-differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use each mode (auto for typical resolution, validate for existence check, search for text search). However, it does not explicitly state when not to use this tool compared to siblings like 'format_citation' or 'jade_lookup', which could help an agent choose more precisely.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_casesSearch CasesA

Search Australian and New Zealand case law. Jurisdictions: cth, vic, nsw, qld, sa, wa, tas, nt, act, federal, nz, other (all). Methods: auto, title (case names only), phrase (exact match), all (all words), any (any word), near (proximity), boolean. Sorting: auto (smart detection), relevance, date. Use offset for pagination (e.g., offset=50 for page 2).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
formatNojson
methodNoauto
offsetNo
sortByNoauto
jurisdictionNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses core behaviors: searches case law, lists jurisdictions, methods, sorting, and pagination. Does not mention authentication or rate limits, but search is typically read-only.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single informative paragraph with no wasted words. Starts with purpose, then lists options in a structured manner. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers key aspects: purpose, parameters, pagination. Could mention return format or give an example, but given no output schema, it provides enough context for an agent to use the tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but description adds significant meaning: explains each method (e.g., 'title (case names only)', 'phrase (exact match)') and how offset works for pagination. Goes beyond schema enumeration.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Search' and specific resource 'Australian and New Zealand case law'. Distinguishes from sibling tools like search_citing_cases by focusing on general case law search.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit allowed values for jurisdiction, method, sorting, and mentions pagination. Gives clear guidance on how to structure queries but does not explicitly differentiate from alternatives like search_citing_cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_legislationSearch LegislationA

Search Australian and New Zealand legislation. Jurisdictions: cth, vic, nsw, qld, sa, wa, tas, nt, act, federal, nz, other (all). Methods: auto, title (titles only), phrase (exact match), all (all words), any (any word), near (proximity), legis (legislation names). Use offset for pagination.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
formatNojson
methodNoauto
offsetNo
sortByNoauto
jurisdictionNo

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries burden. Describes methods and jurisdictions but does not disclose safety info, rate limits, or default behavior (e.g., default method is auto but not stated). Missing read-only hint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Short and front-loaded with purpose. However, the dense list of methods and jurisdictions could be better structured for readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 7 parameters, 0% schema coverage, and no output schema, the description only covers jurisdiction, method, and offset partially. Missing details on limit, format, sortBy, return values, error handling, and rate limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%. Description adds meaning by listing jurisdiction values and method names, but does not explain each method's behavior (e.g., what 'near' means) and omits boolean from the method list present in schema. Other params like limit, format, sortBy are not described.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Search Australian and New Zealand legislation.' Lists jurisdictions and methods, and distinguishes from sibling tools like search_cases and search_citing_cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly mentions using offset for pagination and lists jurisdictions and methods. However, does not explicitly state when to use this tool over alternatives or when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

semantic_search_localSemantic Search (local module)A

Vector recall over installed local data modules: the query is embedded locally (bge-small, offline, no key) and ranked by cosine similarity over chunk embeddings, with optional jurisdiction/type/segment facet pre-filters. Gated on the local embedder being installed and the module being embedded with a matching descriptor; degrades visibly (typed notes) when unavailable. Requires @duckdb/node-api, @huggingface/transformers, and an embedded module.

ParametersJSON Schema
NameRequiredDescriptionDefault
kNo
queryYesNatural-language query, embedded locally
filterNoFacet pre-filters applied before ranking
formatNojson
moduleNoPin a module; otherwise all embedded ready modules whose embedding model_id+dim match the local embedder

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It discloses gating, visible degradation when unavailable, and required dependencies. This is good, but could mention that it is read-only and does not modify data, though inferred. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with purpose and key technical details. It is efficient but somewhat dense; could be slightly more structured, but overall concise and informative.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (5 params, nested object, no output schema), the description is highly complete. It covers embedding method, gating, degradation behavior, prerequisites, and even hints at format. No critical gaps for an AI agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 60%, and the description adds meaning by explaining that query is embedded locally, module pinning, and that filter are pre-filters applied before ranking. This adds value beyond the schema, especially for the filter object and format.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool does vector recall over installed local data modules with local embedding and cosine similarity. It distinguishes from siblings like search_cases and search_legislation by specifying 'local data modules' and the embedding process, making the purpose unique.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on when the tool works (gated on local embedder installation and module descriptor matching) and lists prerequisites. However, it does not explicitly contrast with sibling tools or state when not to use it, missing some exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

TDQS

A4.2/5.0
Disambiguation5/5

Each tool targets a distinct operation: citation management, offline/online case search, legislation lookup, provision retrieval, formatting, and local data module introspection. Even the two citing-case tools are clearly differentiated by offline vs. online mode.

Naming Consistency4/5

Most tool names follow a verb_noun pattern (e.g., fetch_document_text, resolve_citation, search_cases). 'bibliography' is a noun-only outlier, but the overall style is consistent and predictable.

Tool Count5/5

With 15 tools, the server is well-scoped for Australian legal research. Each tool serves a clear purpose without unnecessary overlap or bloat.

Completeness5/5

The tool set covers the full research workflow: searching cases and legislation, fetching full text, resolving and formatting citations, finding citing cases, exploring act structure, and managing local data modules. No obvious gaps for the intended domain.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/russellbrenner/jurisd'

If you have feedback or need assistance with the MCP directory API, please join our Discord server