French family benefits (CNAF corpus)
Server Details
French family-benefit models (CNAF corpus) as executable rules with sources; independent demo
- Status
- Healthy
- Uptime
- 100.0% over 22 days
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- arxohq/arxo-cnaf
- GitHub Stars
- 0
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 16 tools
Several clusters overlap heavily: law_ask, law_case_ask, law_query and law_screen all 'execute/answer' over the corpus, and law_explain vs law_inspect both work on proof/evaluation artifacts, with law_prepare_answer vs law_capture_answer also adjacent. The very long descriptions do draw explicit boundaries (discovery vs answer, replay vs snapshot), which rescues it from lower, but an agent must read carefully to pick correctly.
All 16 tools share the 'law_' prefix and are readable, following a verb_or_noun convention (law_ask, law_search, law_rules, law_packages). Minor deviation: some are verb_verb_noun (law_capture_answer, law_prepare_answer, law_case_ask, law_publish_answer) while others are bare nouns, but the pattern remains predictable overall.
16 tools is slightly heavy for a single corpus server but each maps to a real stage (discovery, execution, proof/explanation, publication lifecycle). It sits just above the comfortable 3-15 band rather than being genuinely bloated.
The surface covers a full lifecycle: discovery (search, packages, rules, sources), answering (ask, case_ask, query, screen), explanation (explain, inspect) and reproducible publication (prepare, capture, publish, revoke, passport, capabilities). Coverage is strong for the stated domain; only niche operations like bulk case listing or corpus mutation appear absent.
Available Tools
16 toolslaw_answer_capabilitiesARead-onlyInspect
Une matrice lisible par machine des producteurs Lens réellement installés, des contrôles replay/projection, des profils, des limites et des tests de contrat qui les confirment. declared_only désigne un schéma sans témoin exécutable.
| 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 and openWorldHint=false, so safety is covered. The description adds real semantic value the annotations do not: the matrix describes what is *actually installed* versus declared, and it defines declared_only as 'a schema without an executable witness', which tells the agent how to interpret unconfirmed entries.
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, no filler, with the content inventory front-loaded and the glossary notion of declared_only appended as a clarifying second sentence. Dense but every clause adds 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?
With no input params and no output schema, the description carries the burden of explaining what comes back, and it does so by enumerating the matrix's sections and defining its key status term. Missing only guidance on when in a workflow to call it relative to sibling inspection tools.
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 takes zero parameters, so the baseline of 4 applies. The description correctly implies a parameterless snapshot by framing the output as a machine-readable matrix rather than a filtered report.
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 resource and enumerates its contents (installed Lens producers, replay/projection controls, profiles, limits, contract tests), so the agent knows this is an introspection/capabilities-matrix tool rather than a query tool. It does not differentiate itself from siblings such as law_inspect, law_packages or law_rules, which also sound like introspection endpoints.
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, no prerequisites, and no mention of any alternative. The agent must infer from the name and content list that this is the discovery endpoint to use before other Lens calls.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_askARead-onlyInspect
Poser une question au droit formalisé. Quand la réponse est « non établi », elle porte whyNot — le rapport why_not du moteur : les règles candidates et l'état de chaque conjonct (satisfait / non satisfait / indéterminé) ; les faits manquants y sont visibles et n'ont pas à être inventés. AVANT LE PREMIER appel, obtenez les noms de prédicats par law_search (une question dans vos propres mots → adresses) ou law_packages (les signatures d'un acte connu) — un nom inventé sera rejeté. Si l'outil a renvoyé une erreur ou « non établi », C'EST LA RÉPONSE : transmettez-la à l'utilisateur et ne la substituez pas par des connaissances générales sur le droit d'un autre pays. Mais « je n'ai trouvé aucun acte convenable » N'EST PAS une réponse tant que law_search n'a pas été interrogé : le silence du catalogue est une propriété de la recherche par titre, non une conclusion sur le corpus. kind='truth' — si un fait est établi ; kind='collect' — énumérer les enregistrements ; kind='deadline' — calculer un délai sur le calendrier officiel ; kind='positions' — quelles OBLIGATIONS sont nées des faits et quels sont leurs statuts ; kind='why_not' — le rapport why_not sur le même but, quel que soit le statut de la réponse. La réponse porte les règles appliquées, les avertissements et la provenance avec empreintes ; truth/collect portent aussi un bloc signature pour la présentation. Le serveur n'invente pas : là où une norme n'est pas formalisée, la réponse est « non établi » ou une erreur.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | les arguments du prédicat dans l'ordre de sa signature ; avec kind='collect', exactement l'un d'eux est la variable de sélection ?name (par exemple ['urn:x:water', 'urn:x:mix', '?value']), les autres sont des valeurs. Les valeurs suivent le type du paramètre : une entité — 'urn:…' ou un nom court ; Date — 'YYYY-MM-DD' ; Money — '<nombre> <devise>' ('43250 KZT') ; Quantity — '<nombre> <unité>' avec l'unité exactement telle que le paquet l'écrit ; une constante du paquet — son nom | |
| calc | No | kind='calc' : un arbre {op,left,right}, op ∈ add|sub|mul|div|le|lt|ge|gt|eq|ne (les synonymes divide/multiply/plus/minus et les signes sont acceptés) ; les feuilles sont 5 | '3932 KZT' | '2 mrp' | {lookup: 'mrp', args: [2026]} — une valeur légale du corpus ; les agrégats sont {aggregate: 'sum', element: '?v', over: [{predicate, args with '?variables'}]} sur les faits donnés dans facts | |
| days | No | deadline : la durée de la période | |
| kind | No | le type de question (truth par défaut) | |
| unit | No | ||
| after | No | deadline : la date de l'événement | |
| facts | No | faits de l'affaire : [{predicate, args, provenance, negated?, package?, judgment?}]. provenance est obligatoire et doit être un objet ; {} est accepté. Ses champs sont facultatifs : {origin?, evidence?: StableId, span?: {page?, quote?, offset?}, extractor?: {name, version?, confidence?}, observedAt?, recordedAt?}. origin vaut case_input par défaut. evidence et observedAt ne sont pas obligatoires ; l'extracteur est abaissé en was_generated_by et le document en was_derived_from. confidence est une chaîne décimale ; le seuil est lu par l'EvidencePolicy du paquet, pas par l'hôte. package résout un nom court ambigu ; args suit la même notation que les args de la question | |
| proof | No | renvoyer dans la réponse le champ evaluation avec le graphe de preuve — une entrée toute prête pour law_explain (kind truth|collect ; par défaut un résumé sans le graphe) | |
| cutoff | No | deadline : l'heure de clôture des opérations | |
| context | No | Contexte temporel explicite : timezone est un nom IANA ; decisionTime et knowledgeTime sont des instants complets avec UTC ou un décalage, conservés sans substitution. legalTime est aussi requis avec context ; le profil peut exiger tous ces champs | |
| focused | No | kind='truth' : poser la question en focused_truth — la même réponse que le truth complet, mais la preuve et les avertissements ne couvrent que le cône de la question ; la réponse porte evaluationKind et les empreintes de la coupe (focus) ; dans focus, le cône est réduit à coneHash et au nombre de prédicats, le manifeste complet du cône vient dans evaluation.focusManifest avec proof=true. Une coupe n'est pas un document d'audit : law_prepare_answer ne l'accepte pas pour publication | |
| package | No | restreindre la question à un paquet de droit | |
| version | No | la version exacte du paquet figée par le client (open('name@version')) ; si elle diffère de la composition du profil, l'hôte refuse au lieu de répondre avec une autre version | |
| evidence | No | documents de l'affaire, section 74, nœuds evidence_item. Un document est référencé depuis provenance.evidence de plusieurs faits. payload.confidence est une donnée pour l'EvidencePolicy ; le moteur n'évalue pas le nombre | |
| afterTime | No | deadline : l'heure de dépôt | |
| legalTime | No | la date du droit (YYYY-MM-DD) | |
| predicate | No | ce qui est demandé, p. ex. 'duty_amount' | |
| responseMode | No | full (défaut) — la réponse complète. compact est accepté par compatibilité : ce serveur ne construit pas de réponse courte et renvoie la même réponse complète dans les deux modes ; il n'y a ni référence fullAnswer ni instantané enregistré de la réponse. | |
| supportEdges | No | appuis, section 75, nœuds support_edge : from est l'id du document, to est le littéral du fait, relation est supports ou refutes. L'admission est décidée par l'EvidencePolicy du paquet, pas par l'hôte | |
| deadlinePolicy | No | la politique de décompte des délais exprimés en jours : le StableId d'une deadline policy déclarée dans le monde de la question (p. ex. 'urn:kz:corpus:clir:administrative-code#AC_WORKING_DAY_TERMS'), ou son nom court lorsqu'une seule déclaration le porte. Un objet en ligne {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']} n'est accepté que par un monde 0.1 ; un monde 0.2 le refuse, et le refus nomme les politiques déclarées. Sans politique, une norme portant un délai répond MISSING_POLICY — la politique est fixée par le droit de la procédure et le serveur n'en suppose jamais une. L'instantané du calendrier officiel pour les jours ouvrables est fourni par le serveur lui-même dès qu'un acte les compte. | |
| evidencePolicy | No | StableId d'un nœud evidence_policy, section 78.2. Sans lui, les appels précédents gardent leur comportement. Le seuil de confidence est une règle de cette politique, pas un argument de l'appel | |
| selectedInterpretations | No | lectures nommées ; pour un groupe exactly_one, choisir exactement un StableId parmi law_packages/law_rules |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only/non-destructive, and the description adds substantial context beyond them: what the response carries (applied rules, warnings, provenance with fingerprints, a signature block), the semantics of "non établi" and the why_not report, the no-invention guarantee, MISSING_POLICY behavior for deadlines, and the version-mismatch refusal. It also discloses that responseMode=compact returns the full answer unchanged.
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 in the first sentence, but the remainder is a single dense wall of text that mixes prerequisites, error semantics, and per-kind definitions, and re-explains the why_not report twice. Little of it is filler, yet the size and duplication 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?
For a 22-parameter tool with nested objects and no output schema, the description covers the workflow, error handling, and rough shape of the return value (rules, warnings, provenance, signature block). It is close to complete, though a tighter statement of the default return payload would remove the last ambiguity.
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 95% schema coverage the baseline is 3, and the description adds real meaning on top: each kind value is spelled out behaviorally, focused/proof are tied to law_explain and law_prepare_answer, and version/deadlinePolicy/responseMode get operational nuance not present in the schema. The remaining parameter plumbing (args notation, facts shape) is left to 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 opening sentence names a concrete verb+resource ("Poser une question au droit formalisé") and the body enumerates the six question kinds, so the agent knows exactly what the tool answers. It also differentiates itself from siblings by naming law_search/law_packages as prerequisites and law_explain as the consumer of the proof graph. It falls short of 5 only because the core purpose statement is buried under a dense block of behavioral 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?
Explicitly states the precondition for the first call (obtain predicate names via law_search or law_packages; an invented name is rejected) and names both alternatives with their conditions. It also gives when-not guidance: an error or "non établi" IS the answer and must not be substituted, while "no suitable act found" is not an answer until law_search has been queried.
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
Exécuter un producteur enregistré et obtenir producerControl/0.2 pour une préparation ultérieure vérifiable d'une Lens. Le producteur n'est choisi que dans le registre livré.
| 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, so the safety profile is covered by structured data. The description adds the registry-limited producer constraint and names the produced artifact, but it does not explain why the operation is non-idempotent or what execution entails, which is the one behavioral trait the annotations cannot convey.
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, front-loaded with the action, so there is no filler. The terseness tips into under-specification rather than disciplined brevity, and the dense jargon makes the little text present harder to parse.
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 required nested object, no output schema, no parameter descriptions, and a domain-specific artifact ('producerControl/0.2'), the description does far too little. Naming the artifact helps slightly, but the caller still lacks the request shape, expected result, and workflow context needed 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 coverage is 0% for two parameters, so the description must carry the semantics. It clarifies that 'producer' must come from the delivered registry, which is genuinely useful, but the required nested 'request' object is left entirely 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 names a verb ('Exécuter') and a resource ('un producteur enregistré') plus the returned artifact ('producerControl/0.2'), so it is more than a restatement of the name. However, the vocabulary is opaque jargon (Lens, producerControl/0.2, registre livré) and it never distinguishes itself from sibling tools like law_prepare_answer or law_publish_answer, so an agent cannot readily tell why this step comes first.
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 one implicit constraint – 'Le producteur n'est choisi que dans le registre livré' – but no statement of when to call this versus the many prepare/publish/ask siblings. No prerequisites, ordering, or exclusions are given, leaving the agent to guess at the workflow position.
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
L'opération ask : exécuter une affaire enregistrée d'un paquet-affaire sur ses dépendances épinglées et renvoyer la réponse : par défaut une projection du document d'évaluation sans graphe de preuve, avec responseMode full ou proof: true le document canonique avec une preuve et un manifeste. La question est du JSON selon query.schema.json (query), une chaîne evaluate (evaluate + queryId), un queryId enregistré sans query, ou card + args. Un refus de préparation est une erreur avec un code LDC-*, jamais une réponse vide.
| Name | Required | Description | Default |
|---|---|---|---|
| args | No | les paramètres de la carte : nom → expression textuelle du langage | |
| card | No | l'id d'une carte d'un catalogue installé | |
| case | No | le nom de la déclaration d'affaire dans [[cases]] ; facultatif s'il n'y a qu'une affaire | |
| proof | No | true — le document complet avec le graphe de preuve (comme responseMode full) ; false — la projection. La même forme que dans law_ask. | |
| query | No | la question en JSON selon query.schema.json ; queryId est un URN dans l'espace de noms du paquet, ou un nom court donné dans queryId | |
| package | Yes | le chemin du paquet-affaire (le répertoire qui contient law.toml) depuis la racine du dépôt | |
| queryId | No | sans query/evaluate — le choix d'un queries/*.json enregistré par nom court ou URN complet ; avec evaluate — l'id de la question exécutée | |
| evaluate | No | la chaîne `evaluate <expression>;` ; exige queryId | |
| responseMode | No | compact — une projection pour un agent : results, positions, conflicts, le manifeste, les issues au-dessus de info et tous les hachages sont conservés, proofGraph est remplacé par son hachage, ses racines et le nombre de nœuds (champ proof), le nombre d'issues info retirées est issuesOmitted. full — le document d'évaluation canonique complet, celui qu'écrit `law ask` ; proof: true demande la même chose. Le resultHash de la projection est celui du document complet ; une preuve ou une publication exige full. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, destructiveHint=false, idempotentHint=false and openWorldHint=false, and the description adds real behavioral context on top: the default response is a projection without the proof graph, proof:true/full returns the canonical document with proof and manifest, and a preparation refusal surfaces as an LDC-* error rather than an empty response. The explicit error contract is particularly valuable, though return-field specifics remain thin.
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 and default behavior are front-loaded, but the single dense paragraph chains multiple semicolon-separated clauses (response modes, four input forms, error contract) that would read better as discrete sentences. No obvious filler, yet the run-on structure reduces scanability.
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 9-parameter, no-output-schema, read-only tool, the description covers the response-shape distinction, input-mode combinations, and failure semantics. What it omits is guidance on the sibling-tool landscape and the concrete contents of the projection beyond a few named fields, but overall it is sufficient to call the tool 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 coverage is 100%, so baseline is 3, but the description adds cross-parameter semantics the schema does not: 'evaluate' requires queryId, queryId alone selects a registered query, and card+args is an alternative input mode. These interactions help the agent assemble a valid call beyond what per-field descriptions convey.
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 ('exécuter une affaire enregistrée d'un paquet-affaire') and describes the returned artifact (projection vs canonical evaluation document). It references the sibling law_ask for shape parity but never explicitly differentiates this case-scoped tool from law_ask or law_query, so an agent must infer the distinction.
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 enumerates the accepted input forms (query, evaluate+queryId, queryId, card+args) but gives no when-to-use guidance relative to the many sibling tools (law_ask, law_query, law_prepare_answer). It never states when this tool should be chosen over an alternative or any precondition beyond 'an enregistrée affaire'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_explainARead-onlyInspect
Déplier la preuve d'une réponse law_ask en une chaîne « règle ← prémisses → conclusion ». L'entrée compacte : question (les arguments law_ask d'origine, truth/collect), resultHash et codeHash issus de la provenance de la réponse. Le serveur répète le calcul et compare les empreintes ; si quelque chose a changé, il refuse explicitement. Autrement, passer l'évaluation de law_ask(proof=true). answerResource=fullAnswer.uri explique un instantané compact stocké sans recalcul et sans que le client charge des pages ; par défaut seulement la chaîne proofRef. nodeId sélectionne un nœud et toutes ses prémisses (jusqu'à 24 Ko, sinon un refus explicite). proofHash se rapporte au graphe entier ; scope marque la partie sélectionnée.
| Name | Required | Description | Default |
|---|---|---|---|
| nodeId | No | ||
| codeHash | No | ||
| question | No | les arguments law_ask d'origine | |
| evaluation | No | le document d'évaluation issu de law_ask | |
| resultHash | No | ||
| answerResource | No | le fullAnswer.uri d'une réponse stockée prise avec 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?
Annotations already declare readOnly/non-destructive/openWorld=false, so the safety bar is met. The description adds genuine behavioral detail beyond that: the server repeats the computation and compares fingerprints, explicitly refusing when something changed; nodeId returns up to 24 Ko or refuses; and answerResource explains a stored snapshot with no recomputation. These are meaningful operational traits an agent needs.
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 a single dense paragraph but front-loads the core purpose before enumerating the input modes, and each sentence carries a distinct piece of information (recompute/refuse, snapshot path, nodeId selection, hash semantics). It leans toward run-on density rather than clean separation, but there is little filler.
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?
Given an existing output schema, the description need not explain return values, and it covers the complex oneOf input mode well: the three accepted shapes, the hash-verification/refusal contract, and the nodeId size limit. For a nested-object, multi-mode tool this is nearly complete, with the only loose end being the stray proofHash/scope references.
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 usefully compensates: it explains question as the original law_ask arguments (truth/collect), resultHash/codeHash as coming from the answer provenance, nodeId as selecting a node plus all its premises with a 24 Ko cap, and answerResource as fullAnswer.uri. It does mention proofHash and scope, which do not appear in the schema properties, which could mildly confuse, but the documented parameters are well clarified.
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 gives a specific verb and resource — 'Déplier la preuve d'une réponse law_ask en une chaîne règle ← prémisses → conclusion' — and names law_ask as the originating sibling, so the agent can distinguish it from plain answer retrieval. It is clear what the tool produces (a proof chain), though it does not contrast itself against other siblings like law_inspect or law_query.
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 lays out three distinct invocation modes with their conditions: the compact question/resultHash/codeHash path (server recomputes and verifies hashes), passing the evaluation from law_ask(proof=true), and answerResource=fullAnswer.uri for a stored snapshot without recomputation. That is explicit when-to-use guidance, though it stops short of stating when to prefer another sibling tool instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_inspectARead-onlyIdempotentInspect
Inspecteur d'évaluation sur un document d'évaluation ENREGISTRÉ : summary — la fiche d'origine, la vérification de resultHash et de l'instantané, les listes de résultats, de positions et d'issues ; slice — la clôture des nœuds de preuve pour une question, une règle, une position ou un nœud avec leurs adresses, les deux côtés de BOTH, les défaites, les valeurs, les noms résolus d'après l'instantané ; diff — ce qui a changé entre deux documents aux niveaux du contexte, du résultat et de la justification ; locate — la déclaration par StableId. Rien n'est évalué ni recalculé : la source est evaluation de law_ask(proof=true) ou un answerResource. Une donnée absente est un état de limite (limits), jamais une négation.
| 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, but the description adds real behavioral semantics beyond them: nothing is evaluated or recalculated, and absent data is a limit state, never a negation. That last point is a meaningful caveat an agent would otherwise get wrong when interpreting empty results.
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?
One dense paragraph, front-loaded with the operation breakdown and closing with the limit-semantics caveat. Every clause carries information, though the long compound sentences make it harder to scan than a short bulleted breakdown would.
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 and annotations present, return values and safety need not be restated, and the description covers operations and limit semantics. However, for an 11-parameter nested schema at 0% coverage, several structural parameters remain undocumented anywhere, leaving the definition incomplete for correct invocation.
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 must carry the load. It clarifies the operation modes, the select targets (question, rule, position, node), the two-document nature of diff, StableId lookup for locate, and the evaluation/answerResource source — but leaves page, budgetBytes, index, bundle, context, sources and snapshot entirely unexplained.
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 read-only inspection tool over a recorded evaluation document and then defines each of the four operation modes (summary, slice, diff, locate) with the resource each one acts on. It even signals provenance (law_ask(proof=true) or answerResource), which helps separate it from sibling tools like law_explain or law_query.
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 text states the accepted input source and that nothing is recomputed, which implies when the tool applies, but it never explicitly contrasts usage against siblings such as law_explain, law_query or law_rules, nor states when not to use it. Usage is inferable rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_packagesARead-onlyInspect
Le catalogue du droit formalisé : actes, prédicats avec signatures, frontières de couverture. C'est d'ici que viennent les NOMS des prédicats — ils ne doivent jamais être inventés. Mais ne commencez PAS par le catalogue pour trouver le bon acte : l'aperçu est vaste, et le titre d'un acte coïncide rarement avec les mots d'une question (« Newton's laws of motion » ne contient pas le mot « physics »). Une question dans vos propres mots va d'abord à law_search, qui renvoie des adresses ; le catalogue sert à la signature exacte de ce que vous avez trouvé. Sans arguments — l'aperçu : une ligne par acte (clé, titre, ordre juridique, compteurs de règles, faits, signatures, normes, constantes) ; un acte entier — package="kz-gpk" ; une recherche sur les signatures, étiquettes et constantes de tous les actes — query="substring". Les trois modes sont PAGINÉS : limit et offset, le reste nommé dans le texte (showing a–b of N; k more) et dans structuredContent (total, truncated, next — un appel de continuation tout prêt). L'unité d'une page est nommée par pageUnit : l'aperçu et query paginent les ACTES (20 et 20 par défaut), package=… pagine les SIGNATURES d'un acte (20 par défaut, 300 au plus) — les grands codes en portent des milliers. package=… avec catalog=… pagine une liste séparée de l'acte : "questions" — le CATALOGUE DES QUESTIONS : quelles demandes sont prévues (une question en mots, une forme, un prédicat ou des normes) et à quoi l'acte NE répond PAS, avec le type de motif ; une fiche est un modèle de demande, non une réponse, et tous les actes n'en ont pas ; "norms" — les NORMES de l'acte, "constants" — les CONSTANTES (noms des déclarations). "task-guides" — les PARCOURS DE TÂCHE : l'ordre d'application d'un canon à un document — quoi recueillir, quelles cartes interroger et comment lire les réponses ; un parcours ne répond à rien. catalog="task-guides" est admis aussi sans package — tous les parcours du profil ; guide=… — le détail d'un parcours ; le parcours lui-même — MCP Prompts sous le même nom. Le détail d'un acte imprime un aperçu de ces listes et nomme le compte et l'appel tout prêt du mode.
| Name | Required | Description | Default |
|---|---|---|---|
| guide | No | avec catalog="task-guides" : le détail d'un parcours — un nom <paquet>/<id> (comme dans prompts/list) ou un id avec package | |
| limit | No | combien par page : actes (aperçu 20, query 20), signatures d'un acte (20, 300 au plus) ou éléments d'une liste catalog (questions 20, normes 20, constantes 100, parcours de tâche 20) | |
| query | No | un filtre de sous-chaîne sur signatures, étiquettes et constantes (sans distinction de casse) | |
| offset | No | à partir de quel élément de la page (0) ; l'unité est le pageUnit de la réponse | |
| catalog | No | avec package : paginer le catalogue des questions, les normes, les constantes ou les parcours de tâche de l'acte au lieu de ses signatures ; "task-guides" aussi sans package : tous les parcours de tâche du profil | |
| package | No | les signatures complètes de cet acte |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare safety hints (readOnly/openWorld/destructive), so the description carries the real behavioral load: it discloses the three modes, pageUnit semantics, per-mode defaults (20/20/20/300), the `showing a–b of N; k more` text and structuredContent fields (total, truncated, next with a ready continuation call). This is rich context well beyond the annotations, and it is internally consistent with readOnlyHint.
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 long and dense, but for a six-parameter, multi-mode catalog almost every clause carries operational facts (modes, pagination, catalog types, guide handling). Purpose is front-loaded in the first sentence; structure would benefit from lists, but there is little pure filler.
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 no output schema and six optional parameters, the description is complete enough to call correctly: it covers all modes, pagination units and defaults, the structuredContent continuation fields, the catalog list types, and the relationship to MCP Prompts for task-guides.
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 3 is the baseline; the description exceeds it by giving per-mode defaults and caps for limit, explaining that offset's unit is the response's pageUnit, and clarifying what package vs. query vs. catalog select. It adds operational meaning (defaults, caps, mode interactions) that the schema alone does not convey.
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 resource and scope ("Le catalogue du droit formalisé : actes, prédicats avec signatures, frontières de couverture") and explicitly distinguishes itself from the sibling law_search, explaining that predicate NAMES come from here and must never be invented. An agent can tell this apart from law_search/law_query without opening a 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-not guidance ("ne commencez PAS par le catalogue... Une question dans vos propres mots va d'abord à law_search") and the precise condition for using it ("le catalogue sert à la signature exacte de ce que vous avez trouvé"). It even gives the selectable modes by argument. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_passportCRead-onlyInspect
Passeport d'une publication exacte : objet, interface, frontières, contrôles et performance. La section reports conserve l'historique des mesures, y compris les échecs. Les enregistrements sont paginés par JSON Pointer ; next poursuit la réponse.
| 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?
The readOnlyHint/destructiveHint/openWorldHint annotations already cover the safety profile, and the description usefully adds that records are paginated by JSON Pointer with a 'next' cursor and that reports retain failures. It does not disclose permission requirements, response size limits, or cost. Adds value beyond annotations but not rich 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences that are front-loaded with the resource definition, then pagination behavior. Little waste, though the metaphor 'passeport' and the section enumeration add some density without precise operational meaning.
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 tool with 0% schema coverage and no output schema, the description should explain the required identity parameters (name, version, contentHash) and the sections selector, but it does not. Pagination and the reports retention note are helpful but far from complete.
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 full burden and only partially compensates: it hints at the pagination parameters (limit/offset via 'enregistrements sont paginés' and 'next') and at the 'sections' parameter via the mention of 'reports'. It says nothing about the required name/version/contentHash triple or the sha256 pattern constraint.
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 resource ('passeport d'une publication exacte') and enumerates the content it returns (objet, interface, frontières, contrôles, performance), so an agent knows what data it yields. However, it never names a verb explicitly and gives no differentiation from the many sibling tools (law_inspect, law_search, law_query, etc.).
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 use this tool versus alternatives; the closest is a note that 'reports' retains measurement history, which is about content, not usage context. The agent is left to infer that this is the go-to retrieval for a specific immutable publication.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_prepare_answerBInspect
À la demande explicite de l'utilisateur, répéter entre 1 et 12 appels law_ask ou law_process_run antérieurs, comparer strictement leurs replayControl, et préparer un document figé non public pour 24 heures. Le client ne fournit jamais la réponse machine : le serveur ne l'obtient qu'en exécutant à nouveau. Un écart dans une entrée, dans le droit, dans une ressource, dans le code du serveur, dans la bibliothèque du moteur ou dans le résultat rejette le document entier.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | ||
| question | Yes | ||
| assistant | No | ||
| calculations | No | ||
| producerRuns | No | Exécutions de producteurs enregistrés avec control/0.2 ; mutuellement exclusives avec calculations. | |
| documentVersion | No | Version du document immuable ; 0.1 est conservée pour la compatibilité transitoire, 0.2 inclut tous les résultats natifs et le lecteur commun. |
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?
Goes well beyond the annotations by disclosing the core mechanism: the client never supplies the answer, the server re-executes, and any discrepancy in input/law/resource/server code/engine library/result rejects the entire document. The 24-hour non-public frozen-document lifetime is also new information. This is genuinely useful behavioral context for a readOnlyHint=false tool.
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 dense sentences, front-loaded with the triggering action and with the rejection rule last. Every sentence carries substantive meaning for a tool with this much machinery, though the prose is heavy and could be split for scanability.
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 detail is not required, and the description covers the replay/compare/freeze workflow well. Still incomplete on parameter usage (documentVersion choice, calculations vs producerRuns) which matters for correct invocation of this nested, oneOf-constrained schema.
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% across 6 parameters, so the description must compensate, yet it only indirectly maps to the schema ('1 à 12 appels' matches the maxItems=12 arrays and it names replayControl). It does not explain question, language, assistant, documentVersion, or the oneOf exclusivity between calculations and producerRuns.
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 compound action: replay 1–12 prior law_ask/law_process_run calls, strictly compare their replayControl, and produce a frozen non-public document for 24h. The verb+resource+scope are identifiable and it names the input source tools, though the density and French phrasing make it somewhat harder to parse than a crisp one-liner.
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 one gating condition ('à la demande explicite de l'utilisateur') which is useful context, and references law_ask/law_process_run as the runs to replay. However it never contrasts itself with siblings like law_publish_answer, law_capture_answer or law_ask, so an agent must infer when this is the right tool over those.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_publish_answerAIdempotentInspect
Publier un document préparé. La répétition avec le même preparationId renvoie de façon idempotente la même URL et le même secret de révocation distinct.
| 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 declare readOnlyHint=false, destructiveHint=false, openWorldHint=true and idempotentHint=true. The description adds meaning beyond them by specifying what idempotency actually yields: the same URL and the same distinct revocation secret on repeated calls with an identical preparationId. It still does not disclose permission requirements or what the returned revocation secret is for.
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 the core action front-loaded and the idempotency caveat immediately after. No filler, and the reader gets the essential contract in the first clause.
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 enumerated, and annotations cover the safety profile. The description supplements this with the idempotent-return guarantee. The remaining gap is the absence of workflow linkage to the prepare and revoke siblings, which matters given the large sibling set.
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 burden for the single preparationId. It does add real semantics — that the same value produces the same idempotent result — but never states where preparationId comes from or that it identifies the artifact produced by the preparation step.
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 ('Publier un document préparé'), which is clear and action-oriented. It does not, however, distinguish itself from siblings such as law_prepare_answer or law_revoke_answer, so an agent must infer the prepare→publish→revoke pipeline rather than being routed explicitly.
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 only implied: the phrase 'document préparé' and the required preparationId suggest this must be called after a preparation step. There is no explicit when-to-use, when-not-to-use, or named alternative (e.g., revoke_answer for the inverse operation), leaving the agent to infer the workflow position.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_queryARead-onlyInspect
Une requête LawQL déterministe sur le CLIR d'une formalisation : une question sur le modèle de l'acte lui-même, pas sur une affaire. Relations (14) : anchors, edges, fields, imports, interpretations, labels, links, literals, nodes, norms, positions, rules, variables, windows. Listes des champs : law query --schema. Fonctions (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 sur une variable liée ; égalité et appartenance seulement, sans arithmétique ni comparaisons d'ordre. Périmètre : corpus par package.name (par exemple kz.corpus.labour_code, pas un nom de fichier) ou un glob ; sans corpus, toute la tranche du profil ; un périmètre hors profil est vide (CORPUS_EMPTY). Exemples : from r in rules where r.head_predicate == "urn:…#eligible" select r.id as producer, r.strength as strength, anchor(r.id) as anchors — qui produit ; from l in literals where l.predicate == "urn:…#eligible" select l.node as reader, l.context as context — qui lit ; query eligible over "pkg" { for x: Person; where applicant(x); select eligible(x); } — inférence par le noyau. C'est une orchestration au-dessus du CLIR et du noyau ; aucune sémantique juridique nouvelle n'est implémentée ici. Au lieu du texte, une question du catalogue avec arguments : anchors-of, imports-of, links-of, producers, readers, type-step (composition : law query --list) (les paramètres predicate/node/type sont des URN, pkg un package.name ou un glob). La réponse structurelle est une queryPage : resultHash du queryResult complet, snapshot (hachage de la liste des paquets du périmètre), rowCount, rows selon rowLimit (20, au plus 5000) et rowOffset, next avec le snapshot pour continuer ; full: true renvoie le queryResult complet quand le périmètre est un seul paquet. Chaque ligne porte sa provenance (nœuds CLIR) ; une réponse vide porte l'entonnoir explain (emptyAt nomme la clause) ; les erreurs portent des codes LDC-Qxxxx avec des indices ; un produit de sources trop large est refusé avant exécution (QUERY_TOO_BROAD), une continuation sur un autre instantané — SNAPSHOT_CHANGED.
| Name | Required | Description | Default |
|---|---|---|---|
| case | No | l'affaire pour query-over ; elle remplace la clause case | |
| full | No | renvoyer le queryResult complet au lieu d'une page ; seulement quand le périmètre est un seul paquet | |
| limit | No | un plafond explicite des matérialisations eval() (il ne borne PAS les lignes — voir rowLimit) | |
| query | No | inline LawQL | |
| corpus | No | le périmètre de l'instantané : un package.name (par exemple kz.corpus.labour_code) ou un glob sur package.name ; sans corpus, toute la tranche du profil | |
| engine | No | il y a un moteur — le noyau ; l'implémentation de référence est appelée par sa propre commande | lawc |
| question | No | le nom d'une question du catalogue de questions nommées (producers, readers, anchors-of, imports-of, links-of, type-step) ou d'un lint ; à la place de query | |
| rowLimit | No | combien de lignes dans structuredContent (20 ; le budget peut le baisser) | |
| snapshot | No | le hachage d'instantané de next.snapshot de la page précédente : une continuation sur un autre instantané est refusée (SNAPSHOT_CHANGED) | |
| arguments | No | les paramètres de la question : un objet « nom → chaîne » (predicate, node, type — des URN ; pkg — un package.name ou un glob) | |
| rowOffset | No | à partir de quelle ligne (0) ; la continuation vient de next avec snapshot ; requêtes structurelles seulement |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover the safety profile (readOnly, non-destructive), and the description adds substantial behavior beyond them: queryPage pagination with resultHash/snapshot/rowCount/rowLimit/rowOffset, per-row CLIR provenance, the empty-response explain funnel, and explicit error codes (CORPUS_EMPTY, QUERY_TOO_BROAD, SNAPSHOT_CHANGED, LDC-Qxxxx). This is exactly the extra context an agent needs.
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 definition is front-loaded with the core purpose, and most sentences carry real information, but it is an extremely dense single block that mixes query syntax, relations/functions, scope, examples, pagination and error codes, making it hard to scan. Structure suffers even though little is truly redundant.
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 11-parameter, nested, no-output-schema tool, the description covers the return structure (queryPage fields), continuation protocol, scope resolution, and error taxonomy well enough to call correctly. Only minor details such as the full catalog of named questions remain to be discovered via the referenced CLI.
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%, establishing a baseline of 3. The description goes further by clarifying scope semantics (package.name or glob, whole profile slice when absent), URN typing for predicate/node/type, and continuation semantics that tie snapshot across calls, adding meaning beyond the field-level 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?
States a specific verb+resource ("Une requête LawQL déterministe sur le CLIR d'une formalisation") and immediately scopes it as "une question sur le modèle de l'acte lui-même, pas sur une affaire", distinguishing it from case-oriented siblings. An agent can identify the operation and its domain without opening the 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?
The exclusion "pas sur une affaire" implicitly routes case questions elsewhere, and named-question alternatives (anchors-of, producers, readers, type-step) are listed. However, no sibling tool is named explicitly as the alternative, so the when/when-not guidance is clear but not fully mapped to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_revoke_answerADestructiveIdempotentInspect
Révoquer un document publié au moyen de son secret distinct. L'identifiant public à lui seul ne donne aucun contrôle ; la révocation ferme la page HTML, l'API et le téléchargement.
| 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 destructiveHint=true, idempotentHint=true and openWorldHint=true, so the safety profile is covered. The description still adds concrete value by specifying exactly what the destructive action shuts down (the HTML page, the API, and the download), which the annotations do not convey.
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 tight sentences with no filler; the purpose is front-loaded and the credential requirement and effect follow in order of importance.
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 two-parameter mutation with an output schema present, the description covers purpose, the mandatory credential, and the blast radius of the action. Remaining gaps (reversibility, failure modes) are minor given the idempotent and destructive hints.
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 does clarify the roles: publicId is an identifier that confers no control on its own, and revokeSecret is the distinct credential that authorizes revocation. It does not give format, length, or error behavior for either parameter, so it only partially compensates.
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 (révoquer) and resource (un document publié), plus the scope of the effect. It is clear what the tool does, but it never names the counterpart sibling law_publish_answer, so the differentiation from siblings is left implicit.
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 rather than stated: the description makes clear the operation applies to an already-published document and that a distinct revoke secret is mandatory ('L'identifiant public à lui seul ne donne aucun contrôle'). There is no explicit when-to-use/when-not or named alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_rulesARead-onlyInspect
Les règles du droit formalisé mises en mots : comment exactement un prédicat est dérivé (prémisses, articles sources). Appelez ceci AVANT de fournir des faits à law_ask — les règles disent quels faits sont nécessaires au lieu de les laisser à inventer. Pour les grands actes, package=… renvoie une table des matières ; le texte complet vient de predicate=…. La liste par paquet est paginée : limit (20 par défaut, 500 au plus) et offset ; le reste est nommé dans le texte (showing a–b of N; k more) et dans structuredContent (total, truncated, next — un appel de continuation tout prêt).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | la langue dans laquelle les règles sont mises | |
| limit | No | package : combien de règles par page (20 ; le budget peut le baisser) | |
| offset | No | package : à partir de quelle règle (0) | |
| package | No | toutes les règles de l'acte | |
| contract | No | Return a machine input contract over the same import/dependency world as law_ask. No case evaluation. | |
| predicate | No | les règles qui dérivent ce prédicat | |
| 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 read-only, non-destructive, closed-world behavior, and the description adds real context on top: large acts return a table of contents rather than full text, package listings are paginated, and truncation is surfaced in both text ('showing a–b of N; k more') and structuredContent with a ready-made continuation call. It does not explain the idempotentHint=false or any auth constraints, so it stops short of a 5.
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 purpose and the law_ask ordering before pagination mechanics, and every sentence carries information. The pagination/truncation behavior is stated twice (narrative and structuredContent), which is slightly redundant but defensible.
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 read-only lookup tool with an output schema and full schema coverage, the description covers the main retrieval paths, ordering guidance, and truncation recovery. The lang, contract, inputLimit, and inputOffset modes exist only in the schema, so the description is not exhaustive for all 8 parameters.
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 baseline is 3; the description goes further by explaining what package (table of contents for large acts) and predicate (full text) actually return, and by restating the working pagination defaults (20, 500 max) that govern limit/offset.
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: it returns inference rules showing how exactly a predicate is derived (premises, source articles). It also distinguishes its scope from the sibling law_ask by framing itself as the rule source that precedes fact supply.
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 sequencing guidance ('Appelez ceci AVANT de fournir des faits à law_ask') along with the reason (rules say which facts are needed instead of leaving them to invention). It also routes between the two main modes: package= for a table of contents of large acts, predicate= for full text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_screenARead-onlyInspect
Construire une condition nécessaire — un surensemble — pour la présélection de lignes d'une source externe. Ce n'est PAS une réponse juridique et PAS du SQL : le résultat est un arbre typé et un manifeste des extensions jusqu'à TRUE. Chaque ligne qui passe doit ensuite être calculée en entier par le moteur, avec un graphe de preuve, sur le même instantané des données. Le binding est passé comme objet épinglable ; sourceSchemaContentHash est l'empreinte réelle du schéma source et est comparée bruyamment avec l'épingle. Les faits d'affaire qui portent une provenance (origin, document, citation, extractor) sont fournis à law_ask, pas ici. Le nombre confidence est lu par l'EvidencePolicy du paquet, pas par cet outil et pas par le moteur.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | un StableId ou un nom court unique de l'objectif | |
| binding | Yes | un artefact law.screen.binding/0.1 | |
| package | Yes | la clé de paquet depuis law_packages | |
| legalTime | No | la date du droit YYYY-MM-DD ; sans elle, toutes les fenêtres de toutes les règles sont prises en compte | |
| sourceSchemaContentHash | Yes | le sha256 réel du schéma source |
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?
Beyond the annotations (readOnlyHint, openWorldHint=false, idempotentHint=false), the description discloses that sourceSchemaContentHash is compared loudly against the pin, that the confidence number is consumed by the package's EvidencePolicy rather than this tool or the engine, and that downstream rows are fully computed with a proof graph on the same snapshot. That is meaningful behavioral context not derivable from annotations. No auth/rate-limit detail, so not a 5.
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 scope and exclusions are front-loaded and each sentence carries boundary or behavioral information rather than filler. Density of jargon (arbre typé, manifeste des extensions jusqu'à TRUE) makes it heavier than needed, but nothing is redundant.
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 spelled out, yet the description still frames the output shape (typed tree + manifest). Given 5 parameters, 4 required, and nested objects, the description covers the workflow and responsibility boundaries adequately. Minor gaps around lifecycle/idempotency expectations (idempotentHint=false) remain.
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 the baseline is 3. The description adds role context for two parameters (binding as a pinnable object, sourceSchemaContentHash as the real schema fingerprint compared with the pin) but says nothing about goal, package, or legalTime beyond the schema. The marginal gain is real but limited, so it stays at the baseline.
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?
Front-loads a specific verb and resource: build a necessary condition (superset) for pre-selecting rows from an external source, and clarifies the output is a typed tree plus manifest, not a legal answer and not SQL. This cleanly separates it from answer-producing siblings like law_ask and law_answer_capabilities. It does not fully distinguish it from data-oriented siblings such as law_query or law_search, keeping it 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?
Explicit exclusions are stated: it is NOT a legal answer and NOT SQL, and business facts with provenance (origin, document, citation, extractor) are directed to law_ask rather than here. This gives real routing context. It lacks an explicit positive 'use this when...' statement contrasting with law_query/law_search, so it falls just under a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
law_searchARead-onlyInspect
Une RECHERCHE sémantique sur le droit formalisé : une question ou une notion dans vos propres mots → des candidats avec adresses — prédicats avec signatures, règles, fragments d'articles. C'est la couche de DÉCOUVERTE, non de la réponse : le résultat dit QUOI demander ensuite (law_ask par signature, law_rules, law_sources) et n'établit ni un fait ni une norme. Le classement est un embedder lexical déterministe, et la similarité de texte n'est pas l'applicabilité d'une norme. Si vous connaissez le nom exact, allez directement à law_packages/law_ask ; un résultat vide ne signifie PAS que la norme n'existe pas.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | restreindre les types de candidat | |
| limit | No | combien de candidats (8, 25 au plus) | |
| query | Yes | une question ou une notion dans vos propres mots | |
| package | No | chercher uniquement dans cet acte |
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 readOnlyHint=true, destructiveHint=false, and idempotentHint=false, but the description adds meaningful context beyond them: ranking uses a deterministic lexical embedder, text similarity is not norm applicability, and results are non-authoritative (establish neither fact nor norm). It does not cover return format or pagination, but the output schema carries that.
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 dense but front-loaded: purpose first, then the discovery-vs-answer framing, then the routing caveat. Every sentence contributes (the empty-result warning and embedder note are non-trivial), though the phrasing is somewhat verbose.
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 search tool with a full output schema, the description need not explain return values, and it covers purpose, routing, and behavioral caveats thoroughly. Nothing essential for correct invocation or interpretation 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 the schema already documents all four parameters including enums for kinds and the limit hint. The description adds no syntax or format details for query, kinds, limit, or package beyond what the schema provides, so the baseline 3 is appropriate.
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 formalized law) and precisely defines the scope: returns candidate predicates, rules, and article fragments rather than answers. It explicitly distinguishes itself from siblings by naming law_ask, law_rules, and law_sources, so an agent can route correctly without opening schemas.
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 when-to-use (discovery layer for exploring a notion in your own words) and when-not (if you know the exact name, go directly to law_packages/law_ask). It also names the follow-up alternatives (law_ask by signature, law_rules, law_sources) and warns that an empty result does not imply the norm is absent.
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 : par défaut de courts extraits (view=summary), 5 textes par page, avec l'adresse du texte complet dans fragments[].full. package ou fragment est requis (un StableId issu de law_search/law_rules). view=full renvoie des parties exactes du texte : textRange fixe une plage de caractères Unicode, fragments[].next est la continuation avec un contentHash. L'empreinte se rapporte à la source ENTIÈRE, non à l'extrait ni à la partie. textOffset/textLimit exigent fragment ; une continuation exige contentHash. Les listes sont paginées avec offset/limit ; le budget de réponse peut réduire une page.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | summary | |
| limit | No | combien de textes : summary 5, full 1 (le budget peut le baisser) | |
| offset | No | à partir de quel fragment (0) | |
| status | No | le statut de la variante, tel qu'indiqué sur la fiche source | |
| package | No | la clé de paquet — tous les fragments de cet acte | |
| fragment | No | le StableId d'un fragment | |
| language | No | la langue de la variante, telle qu'indiquée sur la fiche source | |
| textLimit | No | le nombre maximal de caractères Unicode dans une partie du texte (aussi ≤8000 octets d'UTF-8) | |
| textOffset | No | ||
| contentHash | No | l'empreinte du texte complet reprise de la partie précédente |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), and the description adds genuinely non-structured behavioral detail: the default view yields short extracts, continuations require contentHash, textOffset/textLimit are only valid with fragment, and the fingerprint covers the ENTIRE source rather than the extract. The only unmentioned trait is whether content can shift between pages (relevant given idempotentHint=false).
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?
Defaults are front-loaded, followed by the full-view mechanics, then constraints, then pagination — a logical order with almost no filler. The single dense paragraph is slightly run-on, which is the only cost.
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 read tool with no output schema, the description supplies what an agent needs: default behavior, page sizing, the fragments[].full and fragments[].next continuation fields, hash scope, pagination, and the oneOf-style requirement that the schema (0 required params) cannot convey. Nothing material 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 already 80%, yet the description adds cross-parameter constraints the schema cannot express: one of package or fragment is required, textOffset/textLimit require fragment, and a continuation requires contentHash. It also clarifies limit semantics per view (5 for summary, 1 for full) and notes the budget may lower it.
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 (official source texts) and specifies its scope precisely: default short extracts via view=summary, 5 texts per page, full text address at fragments[].full, and view=full returning exact text parts. The retrieving verb is only implied ('Sources : par défaut...'), but the behavior is unambiguous and clearly distinguished from the ID-producing siblings law_search/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?
It states a prerequisite ('package ou fragment est requis') and points to law_search/law_rules as where the StableId comes from, which is useful routing. However, it never says when to choose this tool over law_packages, law_inspect, or law_query, so usage is only implied rather than delimited.
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
French Civil Code (LEGI) as executable rules: facts and a legal date in, answers with grounds out
German Civil Code (BGB) as executable rules: periods, deadlines and more, answered with grounds
Author rules from policy docs, then decide: a Rete engine gives the verdict, an LLM explains why.
Open healthcare quality measures: CQL, SQL and FHIR with provenance and known issues
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceDemo MCP for insurance underwriting decision support, reading application forms, health questionnaires, and medical exam results to return justified recommendations using deterministic rules.-
- AlicenseAqualityAmaintenanceAuthor rules from policy docs, then decide: a Rete engine gives the verdict, an LLM explains why.9MIT
- AlicenseAqualityDmaintenanceSWI-Prolog execution for LLMs with CLP(FD) and recursion — boosts logic/constraint accuracy from 73% to 90% on a 30-problem benchmark.524 PyPI12MIT
- AlicenseAqualityDmaintenanceDeterministic logical reasoning server for MCP clients that compiles facts, rules, and queries to Prolog and returns exact answers with proof trees.4MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.