FIDE Laws of Chess
Server Details
FIDE Laws of Chess (2023) as an executable model: arbiter cases, answers with rules and judgments
- Status
- Healthy
- Uptime
- 99.9% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- arxohq/arxo-fide-chess
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 16 tools
Tools are layered by purpose (discovery, answering, proof, lifecycle) and the descriptions provide strong cross-referencing guidance, but law_ask vs law_case_ask and the four discovery tools (search/packages/rules/sources) have overlapping 'find or ask' surfaces that could still cause misselection without careful reading.
All tools use a consistent law_ snake_case prefix with predictable, readable names. The mix of verb-based (law_ask, law_search, law_explain) and noun-based (law_packages, law_rules, law_sources) names is minor and does not impede recognition.
16 tools for a formalised law engine covering discovery, query, answering, proof inspection, and document lifecycle is well-scoped; each tool appears to earn its place, though the count is slightly above the typical 3–15 range.
The surface covers discovery, structured querying, legal answering, proof explanation, inspection, and prepare/publish/revoke lifecycle operations. Minor gaps exist around corpus authoring/management, but core agent workflows are addressed.
Available Tools
16 toolslaw_answer_capabilitiesARead-onlyInspect
A machine-readable matrix of the Lens producers that are actually installed, of replay/projection checks, profiles, limits and the contract tests that confirm them. declared_only means a schema with no executable witness.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, and idempotentHint=false, so the safety profile is clear. The description adds useful semantic context by explaining that 'declared_only means a schema with no executable witness,' which helps an agent interpret the returned matrix without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and contains no obvious filler, with the main purpose stated first and the term 'declared_only' defined second. It is dense with domain terminology but appropriately sized for the amount of information it conveys.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no parameters, so the description carries the burden of explaining what the tool returns. It lists the matrix contents and defines one key term, though it does not specify the exact output format or structure of the matrix.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there are no parameter semantics for the description to clarify. Per the rubric, a zero-parameter tool receives a baseline of 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific resource: a machine-readable matrix of installed Lens producers, checks, profiles, limits, and contract tests. It clearly describes what the tool returns, though it does not explicitly differentiate it from sibling tools such as law_packages or law_rules.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use guidance, no conditions for choosing this tool over alternatives, and no exclusions. It only describes the content of the matrix, leaving usage context to be inferred from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_askARead-onlyInspect
Put a question to formalised law. When the answer is "not established" it carries whyNot — the engine's why_not report: the candidate rules and the state of every conjunct (satisfied / not satisfied / undetermined); the missing facts are visible there and need not be guessed. BEFORE THE FIRST call obtain the predicate names through law_search (a question in your own words → addresses) or law_packages (the signatures of a known instrument) — an invented name will be rejected. If the tool returned an error or "not established", THAT IS THE ANSWER: pass it to the user and do not substitute general knowledge about the law of some other country. But "I found no suitable instrument" is NOT an answer until law_search has been asked: silence of the catalogue is a property of searching by title, not a conclusion about the corpus. kind='truth' — whether a fact is established; kind='collect' — enumerate the records; kind='deadline' — compute a time limit on the official calendar; kind='positions' — which DUTIES arose from the facts and what their statuses are; kind='why_not' — the why_not report on the same goal, whatever the status of the answer. The answer carries the rules applied, the warnings and the provenance with hashes; truth/collect also carry a signature block for presentation. The server does not guess: where a norm is not formalised, the answer is "not established" or an error.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | the arguments of the predicate in the order of its signature; with kind='collect' exactly one of them is the selection variable ?name (for example ['urn:x:water', 'urn:x:mix', '?value']), the rest are values. Values follow the parameter type: an entity — 'urn:…' or a short name; Date — 'YYYY-MM-DD'; Money — '<number> <currency>' ('43250 KZT'); Quantity — '<number> <unit>' with the unit exactly as the package spells it; a constant of the package — its name | |
| calc | No | kind='calc': a tree {op,left,right}, op ∈ add|sub|mul|div|le|lt|ge|gt|eq|ne (the synonyms divide/multiply/plus/minus and the signs are accepted); the leaves are 5 | '3932 KZT' | '2 mrp' | {lookup: 'mrp', args: [2026]} — a statutory value from the corpus; aggregates are {aggregate: 'sum', element: '?v', over: [{predicate, args with '?variables'}]} over the facts given in facts | |
| days | No | deadline: the length of the period | |
| kind | No | the kind of question (truth by default) | |
| unit | No | ||
| after | No | deadline: the date of the event | |
| facts | No | facts of the case: [{predicate, args, provenance, negated?, package?, judgment?}]. provenance is required and must be an object; {} is allowed. Its fields are optional: {origin?, evidence?: StableId, span?: {page?, quote?, offset?}, extractor?: {name, version?, confidence?}, observedAt?, recordedAt?}. origin defaults to case_input. evidence and observedAt are not required; the extractor is lowered to was_generated_by and a document to was_derived_from. confidence is a decimal string; the package EvidencePolicy reads the threshold, not the host. package resolves an ambiguous short name; args use the same notation as the args of the question | |
| proof | No | return the evaluation field with the proof graph in the answer — a ready-made input for law_explain (kind truth|collect; by default a summary without the graph) | |
| cutoff | No | deadline: the hour operations close | |
| context | No | Explicit temporal context: timezone is an IANA name; decisionTime and knowledgeTime are complete Instants with UTC or an offset, preserved unchanged. legalTime is also required with context; a profile may require all these fields | |
| focused | No | kind='truth': ask as focused_truth — the same answer as the full truth, but the proof and the warnings cover only the cone of the question; the answer carries evaluationKind and the slice hashes (focus); the cone in focus is reduced to coneHash and the predicate count, the full cone manifest comes in evaluation.focusManifest with proof=true. A slice is not an audit document: law_prepare_answer does not accept it for publication | |
| package | No | narrow the question to one package of law | |
| version | No | the exact package version pinned by the client (open('name@version')); if it differs from the profile composition the host refuses instead of answering with another version | |
| evidence | No | case documents, section 74, evidence_item nodes. One document is referenced from provenance.evidence of many facts. payload.confidence is data for the EvidencePolicy; the engine does not evaluate the number | |
| afterTime | No | deadline: the time of filing | |
| legalTime | No | the date of the law (YYYY-MM-DD) | |
| predicate | No | what is being asked, e.g. 'duty_amount' | |
| responseMode | No | full (default) — the complete answer. compact is accepted for compatibility: this server builds no short reply and returns the same complete answer in both modes; there is no fullAnswer reference and no stored snapshot of the answer. | |
| supportEdges | No | support edges, section 75, support_edge nodes: from is the document id, to is the fact literal, relation is supports or refutes. Admission is decided by the package EvidencePolicy, not by the host | |
| deadlinePolicy | No | the policy for counting time limits expressed in days: the StableId of a deadline policy declared in the world of the question (e.g. 'urn:kz:corpus:clir:administrative-code#AC_WORKING_DAY_TERMS'), or its short name when exactly one declaration carries it. An inline object {start_count: 'same_day'|'next_day', include_end: true|false, roll: 'no_roll'|'next_working_day'|'previous_working_day'[, month_end: 'last_day_of_month']} is accepted only by a 0.1 world; a 0.2 world refuses it, and the refusal names the declared policies. Without a policy a norm carrying a time limit answers MISSING_POLICY — the policy is set by the law of procedure and the server never assumes one. The snapshot of the official calendar for working days is supplied by the server itself whenever an instrument counts them. | |
| evidencePolicy | No | StableId of an evidence_policy node, section 78.2. Without it, previous calls keep their behaviour. The confidence threshold is a rule of that policy, not an argument of the call | |
| selectedInterpretations | No | named readings; for an exactly_one group choose exactly one StableId out of law_packages/law_rules |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (readOnly, non-destructive, non-idempotent, closed-world), and the description adds substantial behavior beyond them: MISSING_POLICY when no deadline policy is set, refusal on version mismatch, the fact that compact mode returns the same full answer with no stored snapshot, and the 'the server does not guess' failure model. It also discloses what the answer carries (rules applied, warnings, provenance hashes, signature block).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is one dense unbroken block with no structure, and several themes (the server does not guess; errors are the answer) are restated. Most sentences do carry real information and the purpose is front-loaded, but the absence of formatting and the length make it harder to scan than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 22 parameters, nested objects, and no output schema, the description covers the essentials an agent needs: prerequisites, question kinds, error and MISSING_POLICY semantics, policy binding, and what the answer contains. A few parameters (evidence, supportEdges, selectedInterpretations) are left to the schema, which is acceptable given its 95% coverage, but the return shape is only sketched.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 95%, so the baseline is 3, but the description genuinely adds meaning for the enum parameter 'kind' by spelling out what each of the six question kinds computes, including why_not on the same goal. It also explains the operational consequence of responseMode and deadlinePolicy beyond the schema wording, though the bulk of parameter detail still lives in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Opens with a specific verb+resource ('Put a question to formalised law') and immediately enumerates the question kinds (truth/collect/deadline/calc/positions/why_not), so an agent knows exactly what class of operation this is. It also names the sibling tools it cooperates with (law_search, law_packages, law_explain, law_prepare_answer), making it separable from the surrounding catalogue.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit preconditions and routing: predicate names must come from law_search or law_packages before the first call, invented names are rejected, and the negative result 'no suitable instrument' is only valid after law_search has been tried. It also states what to do with an error or 'not established' result (pass it to the user, do not substitute outside knowledge), which is exactly when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_capture_answerCRead-onlyInspect
Run a registered producer and obtain producerControl/0.2 for a later verifiable preparation of a Lens. The producer is chosen only from the shipped registry.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | ||
| producer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, and idempotentHint=false. The description adds the registry constraint but conspicuously leaves the tension between 'Run a producer' and readOnlyHint unexplained, and says nothing about why idempotentHint is false or what a failed run looks like. It adds only marginal context over the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler and the key constraint placed last. It is not bloated, but the density of undefined jargon means the brevity comes at the cost of comprehension rather than from efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested request object, no output schema, and 0% parameter documentation, the description is far too thin. It never defines 'producer', 'producerControl/0.2', or 'Lens', nor does it explain what the request must contain or what the caller receives, leaving an agent unable to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% with two required parameters, one of which ('request') is a nested object that is entirely undocumented. The description adds a little meaning to 'producer' (must come from the shipped registry) but gives no insight into the structure or contents of 'request', so it fails to compensate for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names an action ('Run a registered producer') and an output ('producerControl/0.2'), but both are opaque domain jargon that a fresh agent cannot decode. It never states in plain terms what the tool actually does, and it does not differentiate itself from siblings like law_prepare_answer, law_publish_answer, or law_answer_capabilities beyond implying a 'later verifiable preparation' step.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is a constraint ('The producer is chosen only from the shipped registry'), which says what inputs are legal, not when to pick this tool over the many siblings. No when-to-use, no when-not-to-use, and no named alternatives are offered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_case_askARead-onlyInspect
The ask operation: run a registered case of a case package over its pinned dependencies and return the answer: by default a projection of the evaluation document without the proof graph, on responseMode full or proof: true the canonical document with a proof and a manifest. The question is JSON per query.schema.json (query), an evaluate string (evaluate + queryId), a saved queryId without query, or card + args. A refusal to prepare is an error with an LDC-* code, never an empty answer.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | the card parameters: name → string expression of the language | |
| card | No | the id of a card of an installed catalog | |
| case | No | the name of the case declaration from [[cases]]; optional when there is only one case | |
| proof | No | true — the full document with the proof graph (the same as responseMode full); false — the projection. The same form as in law_ask. | |
| query | No | the question as JSON per query.schema.json; queryId is a URN in the namespace of the package, or a short name given in queryId | |
| package | Yes | the path to the case package (the directory holding law.toml) from the root of the repository | |
| queryId | No | without query/evaluate — the choice of a saved queries/*.json by short name or full URN; with evaluate — the id of the question being run | |
| evaluate | No | the string `evaluate <expression>;`; requires queryId | |
| responseMode | No | compact — a projection for an agent: results, positions, conflicts, the manifest, issues above info and every hash are kept, proofGraph is replaced by its hash, roots and node count (field proof), the number of dropped info issues is issuesOmitted. full — the complete canonical evaluation document, the one `law ask` writes; proof: true asks for the same. The projection's resultHash equals the hash of the full document; a proof or a publication needs full. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true and destructiveHint=false, and the description correctly aligns with that as a read operation. It adds non-obvious behavior beyond the annotations: the default response is a projection without the proof graph, full mode returns the canonical document, and a refusal is always an error with an LDC-* code rather than an empty answer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, which is good, but the remainder is a dense run-on chain of semicolon- and em-dash-separated clauses that mixes return-value semantics, input forms, and error behavior without structure. It is adequately sized but not easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nine-parameter tool with nested objects and no output schema, the description does the necessary work of describing the two return shapes (compact projection vs full canonical document, including what the projection preserves and drops) and the failure mode. The pieces an agent needs to call it correctly are largely present, though the query/card/evaluate interaction could be sharper.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all nine parameters, establishing a baseline of 3. The description restates the mutually exclusive input combinations (query, evaluate + queryId, saved queryId, card + args) and clarifies proof:true equals responseMode full, but adds little that the schema descriptions do not already carry.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first clause states a specific verb and resource: run a registered case of a case package over its pinned dependencies and return the answer. It differentiates itself from the sibling law_ask by scoping to a case package, though the jargon (pinned dependencies, LDC-* codes) assumes a reader already fluent in the domain.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied through the enumeration of input forms (query JSON, evaluate string, saved queryId, card + args), but there is no explicit statement of when to pick this tool over law_ask, law_prepare_answer, or law_query. The agent must infer routing from the 'case package' scoping rather than being told.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_explainARead-onlyInspect
Unfold the proof of a law_ask answer into a chain "rule ← premises → conclusion". The compact input: question (the original law_ask arguments, truth/collect), resultHash and codeHash from the provenance of the answer. The server repeats the computation and compares the hashes; if anything changed it refuses explicitly. Alternatively pass the evaluation from law_ask(proof=true). answerResource=fullAnswer.uri explains a stored compact snapshot without recomputing and without the client loading pages; by default only the proofRef chain. nodeId selects one node and all of its premises (up to 24 KB, otherwise an explicit refusal). proofHash refers to the whole graph; scope marks the part selected.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| codeHash | No | ||
| question | No | the original law_ask arguments | |
| evaluation | No | the evaluation document from law_ask | |
| resultHash | No | ||
| answerResource | No | the fullAnswer.uri of a stored answer taken with proof=true |
Output Schema
| Name | Required | Description |
|---|---|---|
| steps | Yes | |
| proofHash | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real behavior beyond the annotations: the server repeats the computation and explicitly refuses on hash mismatch, nodeId output is capped at 24 KB with an explicit refusal beyond that, answerResource mode avoids recomputation and client page loading, and the default is proofRef-chain only. The annotations only cover read-only/destructive/idempotent/openWorld, so this failure-mode and limit disclosure is genuinely additive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information-dense and front-loaded with the purpose, but written as telegraphic fragments ('The compact input: question..., resultHash and codeHash from the provenance of the answer.') that blend parameter semantics with behavioral constraints in run-on sentences. Size is reasonable for a 6-parameter multi-mode tool, but scanability suffers.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers mode selection, verification semantics, size limits, and node-scoped selection. Given the nested-object oneOf schema, this is close to complete; the only loose end is the unexplained proofHash/scope references that do not map to schema properties.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With only 50% schema description coverage, the description still accounts for all six parameters: question (original law_ask arguments), resultHash and codeHash (from the answer's provenance), evaluation (from law_ask proof=true), answerResource (fullAnswer.uri of a stored proof=true answer), and nodeId (selects one node plus its premises). It also conveys the mutual exclusivity of the oneOf modes, though it mentions proofHash and scope, which do not appear in the schema properties, adding slight ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (unfold/explain) and resource (the proof of a law_ask answer) and even names the output shape, the 'rule ← premises → conclusion' chain. It anchors itself to the law_ask sibling as the producer of its inputs, so an agent can place it in the workflow, though it never contrasts itself against an alternative tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditional context for the three input modes: pass question/resultHash/codeHash to have the server recompute and verify, pass the evaluation from law_ask(proof=true), or use answerResource to explain a stored snapshot without recomputing. There are no explicit exclusions or sibling alternatives, but the mode-selection guidance is concrete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_inspectARead-onlyIdempotentInspect
Evaluation inspector over a SAVED evaluation document: summary — the origin card, resultHash and snapshot verification, listings of results, positions and issues; slice — the closure of proof nodes for a query, rule, position or node with addresses, both sides of BOTH, defeats, values, names resolved against the snapshot; diff — what changed between two documents on the context, result and justification levels; locate — the declaration by StableId. Nothing is evaluated or recomputed: the source is evaluation from law_ask(proof=true) or an answerResource. Missing data is a limit state (limits), never a negation.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| index | No | ||
| bundle | No | ||
| select | No | ||
| against | No | ||
| context | No | ||
| sources | No | ||
| snapshot | No | ||
| operation | Yes | ||
| evaluation | No | ||
| answerResource | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds genuinely new behavioral context: it operates purely over a saved document with no evaluation or recomputation, and it defines the semantics of absent data as a limit state rather than a negation. It does not cover pagination or rate/latency behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The resource and read-only framing are front-loaded, and little is pure filler, but the operation breakdown is delivered as one dense, dash-separated run-on that is hard to parse. Structure suffers even though information density is high.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return format need not be explained. But for a complex 11-parameter tool with nested objects and a oneOf constraint at 0% schema coverage, the description omits pagination, indexing, bundling and source-selection semantics, which an agent would need to invoke it correctly in non-trivial cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 11 parameters, so the description carries real weight: it maps each operation to its inputs (slice selectors for query/rule/position/node, diff via against, locate by StableId). However, several top-level parameters — page/cursor/budgetBytes, index, bundle, sources, context, snapshot — are never mentioned, leaving meaningful gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (inspect, read-only) and resource (a SAVED evaluation document) and enumerates the four operations — summary, slice, diff, locate — each with its own scope. It does not directly contrast with siblings like law_ask or law_explain, but it does name law_ask(proof=true) as the upstream source, which implicitly differentiates inspection from evaluation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear when-to-use condition: the source must be an evaluation from law_ask(proof=true) or an answerResource, and it emphasizes that nothing is evaluated or recomputed here. It also supplies interpretation guidance ('missing data is a limit state, never a negation'), though it states no explicit when-not or named alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_packagesARead-onlyInspect
The catalogue of formalised law: instruments, predicates with signatures, the boundaries of coverage. This is where the NAMES of predicates come from — they must never be guessed. But do NOT start from the catalogue when looking for the right instrument: the overview is large, and the title of an instrument rarely matches the words of a question ("Newton's laws of motion" contains no word "physics"). A question in your own words goes to law_search first, which returns addresses; the catalogue is for the exact signature of what you found. With no arguments — the overview: one line per instrument (key, title, legal order, counters of rules, facts, signatures, norms, constants); a whole instrument — package="kz-gpk"; a search over the signatures, labels and constants of every instrument — query="substring". All three modes are PAGED: limit and offset, with the remainder named in the text (showing a–b of N; k more) and in structuredContent (total, truncated, next — a ready-made continuation call). The unit of a page is named by pageUnit: the overview and query page over INSTRUMENTS (20 and 20 by default), package=… pages over the SIGNATURES of one instrument (20 by default, 300 at most) — large codes carry thousands. package=… together with catalog=… pages a separate list of the instrument: "questions" — the CATALOGUE OF QUESTIONS: which enquiries are provided for (a question in words, a form, a predicate or norms) and what the instrument does NOT answer, with the type of reason; a card is a template of an enquiry, not an answer, and not every instrument has one; "norms" — the NORMS of the instrument, "constants" — the CONSTANTS (names of declarations). "task-guides" — TASK GUIDES: the order of applying a canon to a document — what to gather, which cards to ask and how to read the answers; a guide answers nothing. catalog="task-guides" is allowed without package too — every guide of the profile; guide=… — the detail of one guide; the walkthrough — MCP Prompts under the same name. The detail of an instrument prints a preview of these lists and names the count and the ready-made call for the mode.
| Name | Required | Description | Default |
|---|---|---|---|
| guide | No | together with catalog="task-guides": the detail of one guide — a name <package>/<id> (as in prompts/list) or an id together with package | |
| limit | No | how many per page: instruments (overview 20, query 20), signatures of an instrument (20, at most 300) or elements of a catalog list (questions 20, norms 20, constants 100, task guides 20) | |
| query | No | a substring filter over signatures, labels and constants (case-insensitive) | |
| offset | No | from which element of the page (0); the unit is the pageUnit of the answer | |
| catalog | No | together with package: page the catalogue of questions, the norms, the constants or the task guides of the instrument instead of its signatures; "task-guides" also without package: every task guide of the profile | |
| package | No | the full signatures of this instrument |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint=false and destructiveHint=false, so safety is covered; the description goes further by disclosing pagination behaviour (limit/offset, 'showing a–b of N; k more') and the structuredContent fields it returns (total, truncated, next as a ready-made continuation call), plus default and maximum page sizes. It does not explain why idempotentHint is false, but that is a minor omission against an otherwise rich behavioural account.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and most sentences carry real information, but the prose is sprawling, dense with em-dashes and parentheticals, and restates some defaults already carried by the schema (20/300 limits). The mode enumeration is hard to skim, which costs it against a genuinely concise definition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description compensates by describing the return shape (one line per instrument with key, title, legal order and counters; page metadata in structuredContent). For a six-parameter, multi-mode, read-only catalogue tool the description covers modes, defaults, caps and continuation calls adequately; only the precise field list of the structuredContent payload is left implicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage the baseline is 3, but the description adds genuine cross-parameter semantics the schema cannot: how package, catalog, query and the paging pair combine ('package=… together with catalog=… pages a separate list'), which argument switches the page unit from instruments to signatures, and the fact that catalog='task-guides' is legal without package. That interaction logic is the value-add beyond the per-parameter text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the resource precisely (the catalogue of formalised law: instruments, predicate signatures, coverage boundaries) and explicitly distinguishes itself from the sibling law_search, which it tells the agent to use for keyword questions. It is a catalogue/browse resource rather than a clean verb+resource pair, and only one of fifteen siblings is differentiated, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-NOT: 'do NOT start from the catalogue when looking for the right instrument', justified by the size of the overview and title/query word mismatch, and routes the agent to law_search first, with the catalogue reserved for resolving the exact signature of something already found. It also states which mode to use under which argument combination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_passportBRead-onlyInspect
Passport of an exact release: purpose, interface, boundaries, checks and performance. The reports section holds the history of measurements, failures included. Entries are paged by JSON Pointer; next continues the answer.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| limit | No | ||
| offset | No | ||
| version | Yes | ||
| sections | No | ||
| contentHash | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered; the description goes beyond them by disclosing the paging contract ('entries are paged by JSON Pointer; next continues the answer') and noting that the reports section includes failures, which tells the agent to expect error data in results. It stops short of describing auth requirements or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with the resource named first and no filler; the paging note is a single useful clause. Terms like 'boundaries' and 'performance' are loose but do not pad the text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 6-parameter read tool with no output schema and no schema descriptions, the description covers pagination but omits the return structure beyond the paging token and never explains the required contentHash or how sections filtering interacts with paging. It is usable but leaves meaningful gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, so the description carries the burden; it partially compensates by naming content areas that map to the 'sections' enum (purpose/description, interface, checks, reports) and by implying paging via offset/limit. It says nothing about why contentHash is required alongside name and version, leaving a required parameter unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies the resource (a 'passport' for an exact release) and enumerates its content areas, but uses a noun phrase with no verb and relies on domain jargon ('passport') that an agent cannot resolve from the text alone. It never distinguishes this from siblings such as law_editions, law_report, or law_rules, which plausibly return overlapping release metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this tool versus alternatives, no prerequisite for obtaining name/version/contentHash, and no exclusion criteria. The only operational guidance is about paging, not selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_prepare_answerBInspect
At the explicit request of the user, repeat between 1 and 12 earlier law_ask or law_process_run calls, compare their replayControl strictly, and prepare a non-public frozen document for 24 hours. The client never supplies the machine answer: the server obtains it only by executing afresh. A divergence in any input, in the law, in a resource, in the server code, in the engine library or in the result rejects the document as a whole.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | ||
| question | Yes | ||
| assistant | No | ||
| calculations | No | ||
| producerRuns | No | Runs of registered producers with control/0.2; mutually exclusive with calculations. | |
| documentVersion | No | Version of the immutable document; 0.1 is kept for transitional compatibility, 0.2 includes all native results and the common reader. |
Output Schema
| Name | Required | Description |
|---|---|---|
| expiresAt | Yes | |
| previewUrl | Yes | |
| contentHash | Yes | |
| resultCount | No | |
| documentHash | Yes | |
| preparationId | Yes | |
| calculationCount | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description does add real behavior beyond annotations: a 24-hour non-public freeze, server-side re-execution ('The client never supplies the machine answer'), and all-or-nothing rejection on any divergence in input/law/resource/server code/engine library/result. However, this directly conflicts with the annotation title 'Prepare a public write-up', which claims public output where the description says non-public. That inconsistency undermines trust in the stated behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no filler and the user-request trigger front-loaded, so nothing is wasted. But the sentences are dense and grammatically awkward ('compare their replayControl strictly'), forcing re-reading of the central mechanism.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the description covers the verification/rejection model and the 24-hour non-public lifetime. Still missing for a nested, oneOf-constrained tool: what the produced document actually is, what documentVersion 0.1 vs 0.2 means, and the role of the assistant payload.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 33%, so the description must compensate. It does explain the key semantic that replayControl is strictly compared and that client-supplied answers are never trusted, and it matches the schema's 1–12 item bound. It says nothing about question, language, assistant or documentVersion, leaving a large share of the six parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a concrete verb+resource: 'prepare a non-public frozen document for 24 hours' from 1–12 earlier law_ask or law_process_run calls. It implicitly separates itself from law_publish_answer (non-public, frozen, 24h) but never names that sibling, and the jargon 'replayControl' and the reference to law_process_run (not in the sibling list) cloud the picture.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives one trigger condition clearly: 'At the explicit request of the user'. It does not say when NOT to use it, nor route the agent to alternatives such as law_publish_answer, law_capture_answer or law_ask for the non-verification path. Usage is implied rather than fully specified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_publish_answerAIdempotentInspect
Publish a prepared document. Repeating it with the same preparationId idempotently returns the same URL and the same separate revocation secret.
| Name | Required | Description | Default |
|---|---|---|---|
| preparationId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| revoked | Yes | |
| publicId | Yes | |
| publicUrl | Yes | |
| publishedAt | Yes | |
| revokeSecret | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag idempotentHint=true and readOnlyHint=false, but the description adds concrete behavioral detail beyond that: the repeat call returns the *same URL* and the *same separate revocation secret*, which is exactly what an agent needs to know to safely retry. It is slightly redundant with idempotentHint but the payload specifics are new information.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no filler, and the core action is front-loaded before the idempotency note. Wording is slightly clunky ("with the same preparationId idempotently returns") but nothing is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained further, and annotations carry the safety profile. The remaining gap is the missing pointer to law_prepare_answer as the source of preparationId and to law_revoke_answer as the consumer of the revocation secret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single preparationId parameter has no schema description. The description names preparationId and implies it is a handle produced by a prior preparation step, but does not say where to obtain it or what its format is, so it only partially compensates for the coverage gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Publish a prepared document") that an agent can distinguish from law_prepare_answer (which prepares) and law_revoke_answer (which revokes). It does not name those siblings explicitly, but the preparation/publish/revoke triad is inferable from the verb choice.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the precondition that a document must already be prepared and identified by preparationId, which implies law_prepare_answer runs first. However, it never states when to use this versus alternatives, nor what happens if the preparationId is unknown or expired.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_queryARead-onlyInspect
A deterministic LawQL query over the CLIR of a formalization: a question about the model of the act itself, not about a case. Relations (14): anchors, edges, fields, imports, interpretations, labels, links, literals, nodes, norms, positions, rules, variables, windows. Full field lists: law query --schema. Functions (9): anchor/1, labels/1..2, short/1, contains/2, overlaps/2, starts_with/2, ends_with/2, position/2, derivation/2. exists/not exists over a bound variable; equality and membership only, no arithmetic and no ordering comparisons. Scope: corpus by package.name (for example kz.corpus.labour_code, not a file name) or a glob; without corpus, the whole profile slice; a scope outside the profile is empty (CORPUS_EMPTY). Examples: from r in rules where r.head_predicate == "urn:…#eligible" select r.id as producer, r.strength as strength, anchor(r.id) as anchors — who produces; from l in literals where l.predicate == "urn:…#eligible" select l.node as reader, l.context as context — who reads; query eligible over "pkg" { for x: Person; where applicant(x); select eligible(x); } — inference by the core. This is orchestration over the CLIR and the core; no new legal semantics is implemented here. Instead of text, a question from the catalog with arguments: anchors-of, imports-of, links-of, producers, readers, type-step (see law query --list for the set) (predicate/node/type parameters are URNs, pkg is a package.name or a glob). A structural answer is a queryPage: resultHash of the full queryResult, snapshot (hash of the scope package list), rowCount, rows by rowLimit (20, at most 5000) and rowOffset, next with the snapshot for continuation; full: true returns the full queryResult when the scope is one package. Every row carries provenance (CLIR nodes); an empty answer carries the explain funnel (emptyAt names the clause); errors carry LDC-Qxxxx codes with hints; a source product too wide is refused before execution (QUERY_TOO_BROAD), a continuation on another snapshot as SNAPSHOT_CHANGED.
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | the case for query-over; it replaces the case clause | |
| full | No | return the full queryResult instead of a page; only when the scope is one package | |
| limit | No | an explicit cap on eval() materialisations (it does NOT bound the rows — see rowLimit) | |
| query | No | inline LawQL | |
| corpus | No | the snapshot scope: a package.name (for example kz.corpus.labour_code) or a glob over package.name; without corpus, the whole profile slice | |
| engine | No | there is one engine — the core; the reference implementation is called by its own command | lawc |
| question | No | the name of a question from the named-query catalog (producers, readers, anchors-of, imports-of, links-of, type-step) or of a lint; instead of query | |
| rowLimit | No | how many rows in structuredContent (20; the budget may lower it) | |
| snapshot | No | the snapshot hash from next.snapshot of the previous page: a continuation on another snapshot is refused (SNAPSHOT_CHANGED) | |
| arguments | No | the question parameters: an object of name → string (predicate, node, type — URNs; pkg — a package.name or a glob) | |
| rowOffset | No | from which row (0); continuation comes from next together with snapshot; structural queries only |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint/destructiveHint=false annotations, the description discloses refusal-before-execution behavior (QUERY_TOO_BROAD), CORPUS_EMPTY for out-of-profile scope, SNAPSHOT_CHANGED on stale continuations, LDC-Qxxxx error codes with hints, row-limit budgeting (default 20, cap 5000), and the explain funnel on empty results. This is exactly the kind of operational context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded, but the body is a dense run-on that enumerates 14 relations and 9 function signatures plus scope, examples, catalog questions, and pagination in one block — much of which the description itself defers to `law query --schema`. It is information-rich but substantially over-sized for a description field.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 11 parameters, nested objects, and no output schema, the description carries the full return-shape burden and does so: queryPage with resultHash, snapshot, rowCount, rows/rowLimit/rowOffset, next-with-snapshot, and full:true semantics. Provenance, empty-answer, and error behaviors are all covered, so an agent has what it needs to call and interpret it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it clarifies that `query` is inline LawQL vs `question` naming a catalog entry vs `case`/`arguments` replacing clauses, and it explains rowLimit's budget vs an eval cap. It largely restates the schema's own parameter docs for corpus/snapshot/full, so it does not reach a 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening states a specific verb and resource — a deterministic LawQL query over the CLIR of a formalization — and immediately scopes it as "a question about the model of the act itself, not about a case," which distinguishes it from case-oriented siblings like law_case_ask. It stops short of naming those siblings or summarizing the tool in plain terms, so the dense jargon keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for when the tool applies (model-level questions, structural query over relations/functions, or a catalog question from `--list`), and it contrasts the model scope against case queries. It does not explicitly route the agent between this and siblings such as law_ask or law_search, so it lacks a true when/not/alternative statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_revoke_answerADestructiveIdempotentInspect
Revoke a published document using its separate secret. The public id alone grants no control; revocation closes the HTML page, the API and the download.
| Name | Required | Description | Default |
|---|---|---|---|
| publicId | Yes | ||
| revokeSecret | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| revoked | Yes | |
| publicId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive=true, idempotent=true and readOnlyHint=false, so the safety profile is covered. The description adds genuine value beyond them by enumerating the blast radius — 'revocation closes the HTML page, the API and the download' — which tells the agent exactly what stops working.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler, and the action-with-required-credential is front-loaded ahead of the consequence. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described. The scope of destruction and the credential requirement are covered; only errant cases (invalid/rotated secret, already-revoked state) are unaddressed, a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains the security model (the public id grants no control; the separate secret is what authorizes the action), which meaningfully clarifies revokeSecret, but it gives no format, length, or acquisition guidance for either parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Revoke a published document') with the key mechanism named (separate secret). It is clearly distinguishable in intent, though it never names its natural sibling (law_publish_answer) or any other tool, so the agent must infer routing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It implies when it applies (a document was published and you hold the revoke secret) via 'The public id alone grants no control,' but there is no explicit when-to-use, when-not-to-use, or alternative clause. Adequate but inferential.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_rulesARead-onlyInspect
The rules of formalised law put into words: exactly how a predicate is derived (premises, source articles). Call this BEFORE supplying facts to law_ask — the rules say which facts are needed instead of leaving them to be guessed. For large instruments package=… returns a table of contents; the full text comes from predicate=…. The listing by package is paged: limit (20 by default, 500 at most) and offset; the remainder is named in the text (showing a–b of N; k more) and in structuredContent (total, truncated, next — a ready-made continuation call).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | the language the rules are put into | |
| limit | No | package: how many rules per page (20; the budget may lower it) | |
| offset | No | package: from which rule (0) | |
| package | No | every rule of the instrument | |
| contract | No | Return a machine input contract over the same import/dependency world as law_ask. No case evaluation. | |
| predicate | No | the rules that derive this predicate | |
| inputLimit | No | Machine contract: leaf declarations per page (50). | |
| inputOffset | No | Machine contract: offset of leaf declarations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next | No | |
| limit | No | |
| rules | Yes | |
| total | No | |
| offset | No | |
| compact | No | |
| package | Yes | |
| ruleCount | No | |
| truncated | No | |
| factsTemplate | No | |
| inputContract | No | |
| verbalizationGaps | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, so the safety profile is covered. The description adds genuinely new behavioral context: paging behavior for package listings, the default/max limit and 'the budget may lower it', the human-readable remainder text, and the structuredContent fields (total, truncated, next) that form a ready-made continuation call. It does not address the non-idempotent hint, but otherwise this is rich disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose and the call-ordering rule before paging details. Dense parenthetical clauses ('20 by default, 500 at most', the 'showing a–b of N' sample) make it slightly heavy, but each sentence carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter tool with an output schema and full annotation coverage, the description supplies modes, ordering relative to law_ask, paging, and continuation guidance. Return values need not be re-explained because the output schema exists; the remaining omission is minor (no explicit note on the contract mode's interplay with the other flags).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema documents each parameter description. The description goes beyond it by explaining the mode interaction — package returns a table of contents for large instruments while predicate returns the full text — and by spelling out paging defaults and the continuation payload. This is more than the baseline repetition the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — it returns 'the rules of formalised law ... exactly how a predicate is derived (premises, source articles)'. It distinguishes its two modes (package= gives a table of contents for large instruments; predicate= gives the full derivation) and separates itself from the sibling law_ask.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Call this BEFORE supplying facts to law_ask', with the reason (the rules say which facts are needed rather than guessing). It names the alternative and the ordering condition, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_screenARead-onlyInspect
Build a necessary condition — a superset — for the preliminary selection of rows from an external source. This is NOT a legal answer and NOT SQL: the result is a typed tree and a manifest of the extensions up to TRUE. Every row that passes must then be computed in full by the engine, with a proof graph, on the same snapshot of the data. The binding is passed as a pinnable object; sourceSchemaContentHash is the actual hash of the source schema and is compared loudly with the pin. Case facts that carry provenance (origin, document, quote, extractor) are supplied to law_ask, not here. The confidence figure is read by the package EvidencePolicy, not by this tool and not by the engine.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | a StableId or a unique short name of the goal | |
| binding | Yes | a law.screen.binding/0.1 artefact | |
| package | Yes | the package key from law_packages | |
| legalTime | No | the date of the law YYYY-MM-DD; without it every window of every rule is taken into account | |
| sourceSchemaContentHash | Yes | the actual sha256 of the source schema |
Output Schema
| Name | Required | Description |
|---|---|---|
| manifest | Yes | |
| condition | Yes | |
| disclaimer | Yes | |
| schemaVersion | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive, closed-world), and the description adds substantial context beyond them: the output is a typed tree plus an extensions manifest, screening must be followed by full engine computation with a proof graph on the same snapshot, the binding is a pinnable object, and sourceSchemaContentHash is compared against the pin. These are non-obvious contract details an agent could not derive from annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence, followed by scope exclusions and contract details. Every sentence carries information, but the middle is thick with domain jargon and could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, annotations, and full schema coverage already present, the description still covers the result shape (typed tree + manifest), the two-stage execution contract with snapshot consistency, pin comparison semantics, where provenance facts belong, and what consumes the confidence value. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, and the description adds real semantics on top: the binding is 'passed as a pinnable object' and sourceSchemaContentHash is the actual hash 'compared loudly with the pin.' The legalTime fallback behavior is already in the schema, so it earns only modest additional credit.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Build a necessary condition — a superset — for the preliminary selection of rows from an external source.' It also fences itself off from siblings by declaring it is 'NOT a legal answer and NOT SQL' and routes provenance facts to law_ask. The jargon ('manifest of the extensions up to TRUE') is dense, so it is clear but not effortless.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-not guidance (not a legal answer, not SQL) and names the alternative for adjacent work ('Case facts that carry provenance ... are supplied to law_ask, not here'). It also states the downstream obligation that passing rows must be recomputed by the engine. It never states the positive trigger condition ('use this when you need to pre-filter candidates'), leaving that to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_searchARead-onlyInspect
A semantic SEARCH over formalised law: a question or a notion in your own words → candidates with addresses — predicates with signatures, rules, article fragments. This is the layer of DISCOVERY, not of the answer: the result says WHAT to ask next (law_ask by signature, law_rules, law_sources) and establishes neither a fact nor a norm. The ranking is a deterministic lexical embedder, and similarity of text is not applicability of a norm. If you know the exact name, go straight to law_packages/law_ask; an empty result does NOT mean the norm does not exist.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | narrow the kinds of candidate | |
| limit | No | how many candidates (8, at most 25) | |
| query | Yes | a question or a notion in your own words | |
| package | No | search inside this instrument only |
Output Schema
| Name | Required | Description |
|---|---|---|
| model | No | |
| query | Yes | |
| fallback | Yes | |
| candidates | Yes | |
| indexUnits | No | |
| jurisdiction | Yes | |
| corpusFingerprint | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/non-destructive, but the description goes well beyond them: it discloses the ranking mechanism (deterministic lexical embedder), warns that textual similarity is not normative applicability, clarifies the tool establishes neither fact nor norm, and pre-empts the empty-result false negative. This is exactly the extra behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core definition and follows with routing constraints, so almost every sentence earns its place. The ALL-CAPS emphasis, arrows, and em-dash fragments add stylistic noise that slightly obscures an otherwise tight structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value format need not be re-explained, and the description still characterizes results as addressed candidates. Combined with the discovery-layer framing and sibling routing, nothing an agent needs to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all four parameters (kinds, limit, query, package) are already documented in the schema, establishing a baseline of 3. The description reinforces query semantics ('a question or a notion in your own words') and implies the candidate kinds, but adds no syntax, default, or constraint detail beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('semantic SEARCH over formalised law') and concretely describes the output shape ('candidates with addresses — predicates with signatures, rules, article fragments'). It explicitly differentiates from siblings law_ask, law_rules, and law_sources, so an agent can route without opening another schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use/when-not guidance: 'This is the layer of DISCOVERY, not of the answer', 'If you know the exact name, go straight to law_packages/law_ask', plus the critical caveat that an empty result does not mean the norm is absent. Alternatives are named with the condition that selects them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_sourcesARead-onlyInspect
Sources: by default short excerpts (view=summary), 5 texts per page, with the address of the full text in fragments[].full. Either package or fragment is required (a StableId from law_search/law_rules). view=full returns exact parts of the text: textRange sets a range of Unicode characters, fragments[].next is the continuation with a contentHash. The hash refers to the WHOLE source, not to the excerpt or the part. textOffset/textLimit require fragment; a continuation requires contentHash. Lists are paged with offset/limit; the answer budget may shrink a page.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | summary | |
| limit | No | how many texts: summary 5, full 1 (the budget may lower it) | |
| offset | No | from which fragment (0) | |
| status | No | the status of the variant, as given on the source card | |
| package | No | the package key — every fragment of that instrument | |
| fragment | No | the StableId of a fragment | |
| language | No | the language of the variant, as given on the source card | |
| textLimit | No | the maximum number of Unicode characters in a part of the text (also ≤8000 bytes of UTF-8) | |
| textOffset | No | ||
| contentHash | No | the hash of the full text taken from the previous part |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish the safe read profile (readOnlyHint=true, destructiveHint=false), so the bar is lower; the description adds real value on top: pagination via offset/limit, that the answer budget may shrink a page, and the non-obvious rule that the contentHash refers to the WHOLE source rather than the excerpt. That is substantial behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four dense sentences, front-loaded with the default behavior and each clause carrying a distinct rule (view modes, required inputs, continuation/hash semantics, paging). Telegraphic style is efficient, though the run-on packing of rules slightly reduces scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter, no-required-param tool with no output schema, the description does the heavy lifting on paging, view modes, continuation, and partial return shape (fragments[].full, fragments[].next). It leaves status/language behavior to the source card and never describes error or empty-result handling, but coverage is otherwise strong.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 80% schema coverage the baseline is 3, but the description adds cross-parameter semantics the schema cannot express: textOffset/textLimit require fragment, a continuation requires contentHash, and the hash scope warning. It also explains the textRange/fragments[].next continuation model, though it references a textRange that is not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description makes clear this retrieves official text sources, defaulting to short excerpts (view=summary) and offering full text (view=full), and it names law_search/law_rules as the origin of the StableId inputs. It does not, however, explicitly distinguish itself from sibling retrieval tools such as law_packages or law_editions, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It specifies a key prerequisite ('Either package or fragment is required') and traces the StableId back to law_search/law_rules, which is genuine usage context. But it never states when to prefer this tool over the many sibling lookup tools, so usage is implied rather than spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
16 tool updates
- First observed
law_answer_capabilities - First observed
law_ask - First observed
law_capture_answer - First observed
law_case_ask - First observed
law_explain - First observed
law_inspect - First observed
law_packages - First observed
law_passport - First observed
law_prepare_answer - First observed
law_publish_answer - First observed
law_query - First observed
law_revoke_answer - First observed
law_rules - First observed
law_screen - First observed
law_search - First observed
law_sources
Related MCP Connectors
Pedagogical chess intelligence for AI agents: explain positions and games for a target Elo.
Open chess platform where AI agents register, get matched and play each other. Referee only.
Chess opening guides and names, FEN and PGN checks, the daily chess puzzle and Elo estimates.
French Civil Code (LEGI) as executable rules: facts and a legal date in, answers with grounds out
Related MCP Servers
- MIT
- AlicenseAqualityAmaintenanceDeterministic rails for game-running agents — verifies rule legality under SRD 5.2.1 via stateless, offline, sub-millisecond verdicts with citations.2439 PyPI3MIT
- AlicenseAqualityBmaintenanceMCP chess runtime that lets LLMs play, analyze, and adapt strength by exposing Stockfish, human move likelihood (Maia3), and Lichess statistics, with the LLM handling strategy and the server handling computation.1331 npmAGPL 3.0
- -licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables LLM agents and humans to play chess games together with comprehensive game management capabilities including move validation, draw detection, and game state tracking.-
Glama MCP Gateway
Add one secure layer between your agents and this server.