Skip to main content
Glama

leginova-mcp

CI Release Downloads License: AGPL-3.0-or-later Node.js MCP

Télécharger pour Claude Desktop

Serveur MCP pour Leginova, le portail officiel du droit de la Nouvelle-Calédonie édité par le Gouvernement. Il donne à Claude (et à tout client MCP) un accès en lecture, en direct, au Journal officiel (JONC), aux codes, aux textes consolidés, à la jurisprudence et aux débats du Congrès, avec l'URL officielle de chaque source pour la citer.

Aucun compte ni clé d'API n'est nécessaire : le serveur interroge l'API publique qui alimente le site.

Ce que Claude peut faire avec

  • « Que prévoit le droit calédonien sur le télétravail dans le secteur privé ? »

  • « Vérifie la référence "article L. 441-6 du code de commerce" dans le droit applicable en Nouvelle-Calédonie. »

  • « Résume les arrêtés publiés au JONC en septembre 2026 sur la fiscalité. »

  • « Trouve les arrêts de la cour d'appel de Nouméa sur la rupture d'un bail commercial depuis 2020 et lis le plus récent. »

  • « Donne-moi l'historique des modifications de la loi du pays n° 2021-2. »

Related MCP server: French Law MCP Server

Outils

Outil

Rôle

leginova_search

Recherche plein texte dans tous les fonds, avec facettes, filtres, dates et tri

leginova_advanced_search

Recherche structurée (mots, expression exacte, conditions ET/OU/SAUF, autorité, juridiction, type d'acte, codes...)

leginova_suggest

Retrouve un document à partir d'un titre partiel

leginova_list_codes

Les 31 codes publiés, leur autorité déposante (État, Nouvelle-Calédonie, province) et la date de leur version

leginova_get_code_outline

Sommaire d'un code, avec le nombre d'articles par division

leginova_get_code_article

Un article de code, recherché par identifiant ou par numéro, quel que soit le préfixe

leginova_read_code_section

Le texte intégral d'une division de code

leginova_get_texte_consolide

Un texte consolidé (sommaire, texte paginé, article, historique, textes d'application)

leginova_get_jurisprudence

Une décision de justice, texte extrait du PDF officiel

leginova_get_jonc

Un numéro du JONC : sommaire analytique ou acte du JONC électronique

leginova_get_jonc_item

Un acte, une publication légale ou une association, avec sa date de publication au JONC et repli sur le PDF officiel quand Leginova n'a que les métadonnées

leginova_get_debat

Le compte rendu d'une séance du Congrès, page par page

leginova_browse

Les entrées d'un fonds par année (textes consolidés, jurisprudence, débats, JONC)

leginova_get_catalogue

Les identifiants acceptés par la recherche avancée

Tous les outils sont en lecture seule et annotés comme tels. Chaque résultat de recherche indique l'outil à appeler pour ouvrir le document.

Le serveur fournit aussi des ressources (leginova://guide, leginova://codes, articles, textes et décisions par URI) et des prompts : legal_research, analyze_consolidated_text, code_article_check, jonc_watch. Dans Claude Code, ils apparaissent comme commandes, par exemple /leginova:code_article_check.

Numéros d'article : L., Lp. et les autres

Dans les codes calédoniens, le préfixe fait partie du numéro. Un article adopté ou localisé par une loi du pays passe de la numérotation métropolitaine L. 441-6 à Lp. 441-6. Sur Leginova, le code de commerce applicable en Nouvelle-Calédonie ne contient pas de L. 441-6, seulement un Lp. 441-6. La recherche avancée du site compare le numéro à la lettre : L. 441-6, 441-6 ou Lp 441-6 n'y renvoient rien. Ce faux négatif se lit comme « la disposition n'existe pas » alors qu'elle existe sous un autre numéro.

leginova_get_code_article compare donc les numéros sans tenir compte du préfixe (L., Lp., R., D., PS., PN., AN., numéros nus, 1er = 1) et dit toujours comment il a trouvé :

match_status

Signification

exact

Le numéro demandé existe tel quel. Si le même numéro existe sous un autre préfixe (L. 450-1 et Lp. 450-1 sont deux articles distincts du code de commerce), un avertissement le signale.

prefix_variant

Le préfixe demandé n'existe pas, l'équivalent L./Lp. existe : l'article est renvoyé avec un avertissement en tête.

unique_unprefixed

Aucun préfixe donné, un seul article porte ce numéro.

ambiguous

Plusieurs articles conviennent : ils sont listés, aucun n'est choisi.

other_prefix_only

Le numéro n'existe que sous un préfixe d'une autre nature (R., D....) : rien n'est substitué.

not_found

Aucun article de ce numéro, quel que soit le préfixe. La réponse précise ce qui a été vérifié, cherche dans les autres codes et rappelle qu'une absence sur Leginova ne prouve pas l'absence de fondement légal.

Sans code_slug, la recherche porte sur les 31 codes. Le champ « numéro d'article » de la recherche avancée du site n'est volontairement pas exposé.

Plus généralement, toute recherche sans résultat est accompagnée du même rappel : le droit de l'État applicable en Nouvelle-Calédonie n'est parfois publié que sur Légifrance, et une recherche vide n'autorise pas à écrire « aucun fondement légal ».

Ce que disent les réponses

Chaque outil de lecture renvoie le texte en Markdown et, dans structuredContent, la même réponse complète : texte compris, plus toutes les métadonnées. Certains clients ne transmettent au modèle que la partie structurée ; elle ne résume donc jamais, elle contient tout.

  • text_status : structured (texte saisi sur Leginova), pdf_text (texte extrait du PDF officiel) ou not_available avec un motif. pdf_without_text_layer signale un scan image sans couche texte : aucune autre page n'en aura, inutile de réessayer. Les autres motifs sont pdf_not_found, pdf_too_large, download_failed et extraction_failed. next_page n'est proposé que si une page suivante porte du texte.

  • Actes du JONC : published_in_jonc_on (date de publication au Journal officiel de la Nouvelle-Calédonie), filing_authority, import_mode et pdf_scope. whole_issue signifie que Leginova ne sert pas de PDF propre à l'acte mais le numéro entier ; la page imprimée où commence l'acte est alors indiquée (printed_page_in_jonc). Les résultats de recherche portent aussi la date de publication au JONC.

  • Codes : filing_authority, l'autorité qui dépose et tient le code sur Leginova. Elle est plus fiable que le titre, car « applicable en Nouvelle-Calédonie » figure aussi bien sur des codes de l'État que de la Nouvelle-Calédonie. Elle ne tranche pas pour autant la compétence dans un code mixte : le code de commerce applicable en NC, déposé par la Nouvelle-Calédonie, garde des articles L. issus du droit de l'État à côté des articles Lp..

Installation

Chaque release publie deux fichiers, toujours disponibles à la même adresse pour la dernière version :

Fichier

Usage

Lien « latest »

leginova.mcpb

Extension Claude Desktop

releases/latest/download/leginova.mcpb

leginova-mcp.mjs

Serveur en un seul fichier, pour Claude Code et les autres clients (Node.js 22 ou plus récent)

releases/latest/download/leginova-mcp.mjs

Les mêmes fichiers existent sous un nom versionné (leginova-1.0.0.mcpb). La release contient aussi leginova-claude-plugin-<version>.zip, l'archive du plugin Claude Code, et les sommes SHA256SUMS.

Claude Desktop : extension MCPB (recommandé)

Téléchargez leginova.mcpb, double-cliquez dessus ou faites-le glisser dans la fenêtre de Claude Desktop, puis validez l'installation. Autre chemin : Settings > Extensions > Advanced settings > Install Extension... L'extension s'appuie sur le Node.js intégré à Claude Desktop ; la taille du cache et la taille maximale des PDF se règlent dans ses paramètres. Pour mettre à jour, installez la nouvelle version par-dessus.

Serveur en un fichier

Les autres modes d'installation lancent leginova-mcp.mjs avec Node.js 22 ou plus récent :

mkdir -p ~/.local/share/leginova-mcp
curl -L -o ~/.local/share/leginova-mcp/leginova-mcp.mjs \
  https://github.com/Gecka-Apps/leginova-mcp/releases/latest/download/leginova-mcp.mjs

Relancez la même commande pour passer à la dernière version. Dans les exemples ci-dessous, remplacez /chemin/vers/leginova-mcp.mjs par le chemin absolu du fichier. On peut aussi le construire depuis les sources (voir Développement).

Claude Desktop : configuration manuelle

Dans claude_desktop_config.json (Settings > Developer > Edit Config) :

{
  "mcpServers": {
    "leginova": {
      "command": "node",
      "args": ["/chemin/vers/leginova-mcp.mjs"]
    }
  }
}

Redémarrez Claude Desktop.

Claude Code

claude mcp add --scope user leginova -- node /chemin/vers/leginova-mcp.mjs

--scope user rend le serveur disponible dans tous vos projets ; --scope project l'écrit dans le .mcp.json du projet pour le partager avec l'équipe. Vérifiez avec claude mcp list ou /mcp dans une session.

Claude Code : plugin

Le dépôt est aussi une marketplace de plugins Claude Code (version 2.1.224 ou plus récente) :

/plugin marketplace add Gecka-Apps/leginova-mcp
/plugin install leginova@leginova

Le plugin est téléchargé depuis la release, sous la forme de l'archive leginova-claude-plugin-<version>.zip qui contient le serveur, et son empreinte SHA-256 est vérifiée. Il lance le serveur avec le node du PATH (Node.js 22 ou plus récent). Pour recevoir les nouvelles versions, lancez /plugin marketplace update leginova, ou activez la mise à jour automatique de la marketplace dans /plugin, onglet Marketplaces.

Pour tester le plugin depuis un clone : npm run build copie le serveur dans claude-plugin/server/, puis claude --plugin-dir claude-plugin le charge sans passer par la marketplace.

claude.ai, Claude Desktop et mobile : connecteur distant

Les connecteurs personnalisés sont appelés depuis l'infrastructure d'Anthropic : le serveur doit être joignable en HTTPS depuis Internet. Lancez-le en mode HTTP derrière un reverse proxy TLS, par exemple avec le Dockerfile du dépôt :

git clone https://github.com/Gecka-Apps/leginova-mcp.git && cd leginova-mcp
docker build -t leginova-mcp .
docker run -d --name leginova-mcp -p 127.0.0.1:3000:3000 \
  -e MCP_ALLOWED_HOSTS=leginova-mcp.example.nc \
  leginova-mcp

Le point d'entrée MCP est https://leginova-mcp.example.nc/mcp et /healthz répond pour la supervision. Ajoutez ensuite le connecteur :

  • offres Pro et Max : Customize > Connectors, « + », Add custom connector, puis l'URL ;

  • offres Team et Enterprise : un administrateur passe par Organization settings > Connectors, Add, Custom, Web.

Activez-le ensuite dans une conversation avec le bouton « + », puis Connectors. Voir Get started with custom connectors using remote MCP.

Les données servies sont publiques, le serveur ne demande donc pas d'authentification. Une instance exposée relaie toutefois les requêtes de ses utilisateurs vers leginova.gouv.nc : prévoyez une limitation de débit au niveau du proxy.

Sans Docker, avec le serveur en un fichier : node /chemin/vers/leginova-mcp.mjs --http --host 0.0.0.0 --port 3000 --allowed-hosts leginova-mcp.example.nc.

Autres clients MCP

Tout client qui lance un serveur stdio accepte la même configuration que Claude Desktop (command: node, args: ["/chemin/vers/leginova-mcp.mjs"]). Les clients qui parlent Streamable HTTP se connectent à l'URL /mcp d'une instance HTTP.

Configuration

Variable

Défaut

Rôle

LEGINOVA_BASE_URL

https://leginova.gouv.nc

Site interrogé

LEGINOVA_TIMEOUT_MS

30000

Délai maximal par requête

LEGINOVA_MAX_CONCURRENCY

4

Requêtes simultanées vers Leginova

LEGINOVA_RETRIES

2

Nouvelles tentatives sur erreur transitoire (429, 5xx, réseau)

LEGINOVA_CACHE_MB

256

Taille du cache mémoire

LEGINOVA_CACHE_TTL_S

3600

Durée de vie du cache

LEGINOVA_MAX_PDF_MB

80

Taille maximale d'un PDF téléchargé pour extraction

LEGINOVA_USER_AGENT

leginova-mcp/<version> (...)

User-Agent envoyé

HOST, PORT

127.0.0.1, 3000

Écoute en mode HTTP

MCP_ALLOWED_HOSTS

Noms d'hôte acceptés quand l'écoute n'est pas en boucle locale (obligatoire dans ce cas)

MCP_ALLOWED_ORIGINS

MCP_ALLOWED_HOSTS

Origines navigateur acceptées

En mode HTTP, les en-têtes Host et Origin sont vérifiés pour bloquer le DNS rebinding.

Fonctionnement et limites

  • Leginova ne publie pas la documentation de son API. Les points d'accès utilisés sont ceux qu'appelle le site lui-même, relevés dans son client ; une évolution du site peut casser un outil. npm run test:live le détecte.

  • La jurisprudence, les débats du Congrès et beaucoup d'actes anciens du JONC (pour lesquels Leginova ne détient que les métadonnées) n'existent qu'en PDF. Leur texte est extrait page par page à la demande. La plupart des PDF anciens, même scannés, portent une couche texte ; quelques-uns n'en ont pas (des numéros du JONC de fin 1990, par exemple). La réponse le dit alors (pdf_without_text_layer) et renvoie vers le PDF : aucune reconnaissance de caractères n'est faite. Le premier accès à un débat télécharge jusqu'à 60 Mo, soit quelques secondes.

  • Les images incluses dans les textes (tableaux scannés, plans) sont remplacées par un repère : le document complet reste accessible par son URL ou son PDF.

  • Les textes consolidés sont la version en vigueur à leur date de consolidation, les codes à leur date d'application : les outils l'indiquent à chaque fois.

  • Le serveur reste poli avec le site : quatre requêtes simultanées au plus, cache, nouvelles tentatives espacées.

  • Ces informations juridiques ne constituent pas un conseil juridique.

Développement

Depuis les sources (Node.js 22 ou plus récent) :

git clone https://github.com/Gecka-Apps/leginova-mcp.git
cd leginova-mcp
npm ci
npm run build        # dist/leginova-mcp.mjs, un fichier unique sans dépendance
npm run pack:mcpb    # leginova-<version>.mcpb, l'extension Claude Desktop
npm run typecheck    # TypeScript strict
npm test             # tests unitaires et protocole, sans réseau
npm run test:live    # tests contre leginova.gouv.nc
npm run inspect      # MCP Inspector sur le bundle
npm run check        # typecheck + tests + build

La CI GitHub teste sur Node.js 22, 24 et 26, puis construit l'extension à chaque push : le .mcpb est téléchargeable dans les artefacts du run pendant 30 jours.

Publier une version

  1. npm run version:set 0.2.0 aligne le numéro de version dans package.json, package-lock.json, manifest.json, src/version.ts et les manifestes du plugin, et fait pointer la marketplace sur l'archive du plugin de cette version ; npm run version:check le vérifie.

  2. Ajouter la section ## 0.2.0 (date) à CHANGELOG.md : elle devient le texte de la release.

  3. Committer, puis pousser un tag annoté v0.2.0. Son message sert de titre à la release.

Le workflow release.yml vérifie que le tag correspond partout au numéro de version, relance les tests (y compris contre leginova.gouv.nc), construit l'extension et publie la release avec leginova-0.2.0.mcpb, leginova.mcpb, leginova-mcp-0.2.0.mjs, leginova-mcp.mjs, leginova-claude-plugin-0.2.0.zip et SHA256SUMS. Il ajoute ensuite sur main un commit qui inscrit l'empreinte SHA-256 de l'archive du plugin dans la marketplace. Un tag avec suffixe (v0.2.0-rc.1) donne une pré-version, qui ne remplace pas la cible des liens « latest ».

Le serveur repose sur le SDK MCP TypeScript v2 (@modelcontextprotocol/server, spécification 2026-07-28, compatible avec les clients 2025) et sur Zod 4. Les schémas d'entrée et de sortie des outils sont déclarés, et les réponses portent à la fois un texte Markdown et un structuredContent.

src/
  index.ts            CLI : stdio ou HTTP
  server.ts           assemblage du serveur
  instructions.ts     instructions transmises au client et guide
  articles.ts         index des numéros d'article, tolérant aux préfixes
  client/             API Leginova : HTTP, cache, types
  format/             HTML vers Markdown, PDF, URL canoniques, résultats
  tools/              un fichier par famille d'outils
  resources.ts, prompts.ts

Licence

AGPL-3.0-or-later. Les contenus juridiques restent ceux de leginova.gouv.nc, soumis à ses conditions d'utilisation.


Built with 🥥 and ☕ by Gecka — Kanaky-New Caledonia 🇳🇨

Available Tools

14 tools
leginova_browseBrowse a collection by yearA
Read-onlyIdempotent

Lists a collection chronologically, like the site map: without year, the number of entries per year; with year, every entry of that year (paged with offset/limit). Collections: textes_consolides (by adoption year), jurisprudence (by hearing year), debats (Congress debates), jonc (Journal officiel issues). Useful for "what was published in 2025" questions that a keyword search cannot express.

ParametersJSON Schema
NameRequiredDescriptionDefault
yearNo
limitNo
offsetNo
collectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
yearNo
totalNo
yearsNo
entriesNo
collectionYes
next_offsetNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, open-world behavior, so the bar is low; the description adds the dual-mode return shape and the offset/limit paging behavior, which is genuine extra context. It omits auth requirements, rate limits, and the shape of the per-year count vs full-entry responses, keeping it 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.

Conciseness4/5

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

Three sentences, front-loaded with the core behavior, then collection semantics, then a usage cue; each sentence earns its place. Slightly dense but no wasted filler.

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

Completeness5/5

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

An output schema exists, so return values needn't be explained. The description covers both modes, all collection values, paging, and a use-case trigger, giving an agent everything needed to invoke it correctly alongside its many siblings.

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

Parameters4/5

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

With 0% schema description coverage, the description carries the full burden and largely succeeds: it explains `year` semantics per collection (adoption year, hearing year, etc.), that offset/limit drive paging, and lists all four enum values for `collection`. It does not convey the year bounds (1850-2300) or limit cap (500), so not fully compensatory.

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

Purpose5/5

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

States a specific verb (Lists) and resource (a collection) and precisely describes the two operating modes: without `year` returns counts per year, with `year` returns every entry paged by offset/limit. It enumerates the four collection values with their year semantics, so an agent can distinguish this from the search/get siblings 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.

Usage Guidelines4/5

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

Gives a concrete when-to-use trigger ('what was published in 2025' questions that a keyword search cannot express), implicitly routing away from keyword search. It does not name the actual sibling (e.g. leginova_search or leginova_advanced_search) or state when-not conditions, so it falls short of explicit alternative naming.

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

leginova_get_catalogueReference lists for advanced searchA
Read-onlyIdempotent

Identifiers accepted by leginova_advanced_search: codes, themes, issuing authorities, collectivities, act types, courts, decision types, section types and condition scopes. Filter by section and by a contains substring to keep the answer short.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionNoall
containsNoCase-insensitive filter on labels, e.g. "province sud"

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare this a safe, idempotent, read-only, open-world lookup, so the safety profile is covered. The description adds one useful behavioral hint – that the unfiltered result can be long, hence the `contains`/`section` filters – but says nothing about result size limits, pagination, or whether identifiers are returned with labels.

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

Conciseness4/5

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

Two tightly-packed sentences, front-loaded with what the tool returns and followed by the filtering advice. Every clause earns its place, though the phrase "keep the answer short" is slightly informal where a concrete size hint would be more useful.

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

Completeness4/5

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

For a two-optional-param reference-lookup tool whose annotations cover the safety profile and which has no output schema, the description tells the agent what the payload is (search identifiers) and how to constrain it. It does not describe the shape of a returned entry (identifier plus label), which is the only meaningful remaining gap.

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

Parameters3/5

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

Schema coverage is only 50%: `contains` is documented in-schema (case-insensitive label filter) while `section` is a bare enum. The description restates the section categories, which maps loosely to the enum values (though it omits `all` and `court_orders`), adding minimal meaning beyond what the enum already conveys. Baseline 3 for partial coverage is appropriate.

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

Purpose4/5

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

The description makes clear this returns the vocabulary/identifiers that leginova_advanced_search accepts, and names the sibling it supports, which distinguishes it from list/browse siblings. It never states an explicit verb ("Lists" or "Returns"), leaving the action implicit, which keeps it just 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.

Usage Guidelines4/5

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

Usage context is clearly implied: fetch these identifiers to feed leginova_advanced_search, and narrow with `section`/`contains` when the full list is too long. There is no explicit when-not or a stated alternative tool for the same need, so it stops short of 5.

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

leginova_get_code_articleRead a code articleA
Read-onlyIdempotent

Returns one code article (text, amendment history, place in the code, previous/next articles, official URL). Give either article_slug (from search results or outlines) or article_number. article_number matching is prefix-tolerant: "L. 441-6", "Lp 441-6", "441-6" or "art. 1er" all resolve, and the result states how the match was made (match_status). "Lp." numbers articles adopted or localized by a New Caledonian loi du pays: the metropolitan "L. 441-6" is "Lp. 441-6" in the Code de commerce applicable en Nouvelle-Calédonie. The same number can also exist under several prefixes as distinct articles; the result lists them. Without code_slug, every code is searched. A not_found status is never proof that no legal basis exists: relay the notice.

ParametersJSON Schema
NameRequiredDescriptionDefault
code_slugNoCode to look in; omit to search all codes by article_number
article_slugNoe.g. "partie-legislative-article-lp-334-26"
article_numberNoe.g. "L. 441-6", "Lp. 122-13", "R. 4211-1", "2276", "1er"

Output Schema

ParametersJSON Schema
NameRequiredDescription
textYesThe full answer as Markdown: notices, article text, history, neighbours
noticeNo
articleNo
requestedYes
candidatesYes
match_statusYes

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/open-world safety, so the description is free to add the behavior that matters: prefix-tolerant matching, the match_status disclosure, the Lp. vs L. New Caledonia distinction, duplicate numbers across prefixes, and the critical caveat that not_found is never proof no legal basis exists.

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

Conciseness4/5

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

Front-loads the return value and the two input paths before the edge cases, which is well ordered. It is dense and the New Caledonian loi du pays digression is lengthy, but each sentence carries real disambiguation value.

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

Completeness5/5

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

With an output schema present, return values need no elaboration, and the description covers matching semantics, defaults and the failure-mode caveat. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description genuinely adds meaning: it explains that article_number matching is prefix-tolerant with concrete variants, and that omitting code_slug broadens the search to all codes, which the schema only states tersely.

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

Purpose5/5

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

States a specific verb and resource ('Returns one code article') and enumerates what comes back (text, amendment history, place in the code, previous/next articles, official URL). This clearly separates it from search, outline and section-reading siblings.

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

Usage Guidelines4/5

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

Explains the two entry paths (article_slug from search results or outlines, or article_number) and that omitting code_slug searches every code. It gives a clear usage context but does not explicitly say when to prefer read_code_section or search instead.

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

leginova_get_code_outlineTable of contents of a codeA
Read-onlyIdempotent

Table of contents of a code (parts, books, titles, chapters, sections) with article counts and the section_slug / article_slug needed to read them. Start broad (depth 2), then zoom in with section_slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNoLevels to expand; articles are listed once the depth reaches them
code_slugYesCode slug, e.g. "code-du-travail-de-nouvelle-caledonie" (see leginova_list_codes)
section_slugNoRestrict the outline to this section

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, destructiveHint=false, so safety is covered. The description adds real behavioral value by disclosing the shape of the response (counts, slugs) and the intended iterative browse strategy, though it says nothing about size limits or pagination of large outlines.

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

Conciseness5/5

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

Two sentences, zero filler. The resource/return summary comes first and the traversal advice second, so the agent gets purpose then action in reading order.

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

Completeness4/5

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

With no output schema, the description usefully names the returned artifacts (article counts, section_slug/article_slug), which is what an agent needs to chain into a follow-up call. It is slightly thin on the depth/result-size tradeoff, but otherwise complete for a read-only outline tool.

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

Parameters3/5

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

Schema coverage is 100%, so depth, code_slug and section_slug are already documented, including the depth default and the pointer to leginova_list_codes. The description only reinforces depth 2 and the section_slug drill-down, adding marginal meaning beyond the schema.

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

Purpose5/5

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

Names a specific resource (a code's table of contents) and enumerates the hierarchy it covers (parts, books, titles, chapters, sections), plus what it returns (article counts, section_slug/article_slug). This clearly separates it from siblings like leginova_get_code_article and leginova_read_code_section.

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

Usage Guidelines4/5

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

Gives explicit operating guidance: start broad with depth 2, then drill in via section_slug. That's a usable when/how, but it never names an alternative sibling (e.g. read_code_section) or states when to prefer reading a section directly over navigating the outline.

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

leginova_get_debatRead a Congress debateA
Read-onlyIdempotent

Reads the record of a sitting of the Congrès de la Nouvelle-Calédonie ("compte rendu des débats", numbers like "DR-2026-00005"), extracted from the official PDF by page range. These PDFs run to hundreds of pages and the first access downloads up to 60 MB (a few seconds): read them page range by page range.

ParametersJSON Schema
NameRequiredDescriptionDefault
numeroYesDebate number, e.g. "DR-2026-00005"
page_endNoLast PDF page to return (default: as many as max_chars allows)
max_charsNo
page_startNoFirst PDF page to return

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so safety is covered. The description adds meaningful behavioral context beyond that: documents run to hundreds of pages and first access downloads up to 60 MB taking a few seconds, which explains latency and why paging is required.

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

Conciseness4/5

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

A single compact paragraph with the core purpose front-loaded and the operational warning attached at the end. Efficient, though the parenthetical detail about PDF size slightly crowds the purpose statement.

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

Completeness4/5

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

With no output schema, the description does enough: it identifies the document type, identifier format, paging approach and the download cost. The one gap is that max_chars behavior and the default page window remain unexplained.

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

Parameters3/5

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

Schema description coverage is 75% and the description reinforces the page-range model and the numero format. However, max_chars is undocumented in both schema and description, and no extra syntax or defaulting guidance is added beyond what the schema provides.

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

Purpose5/5

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

States a specific verb (Reads) and resource (record of a sitting, 'compte rendu des débats') with the identifier format, and the extraction mechanism (official PDF by page range). This clearly distinguishes it from siblings like leginova_get_jonc or leginova_get_jurisprudence, which cover different document types.

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

Usage Guidelines3/5

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

The closing instruction 'read them page range by page range' gives implied usage guidance driven by document size, but there is no explicit statement of when to choose this tool over alternatives such as leginova_search or leginova_browse, and no exclusions.

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

leginova_get_joncOpen a Journal officiel issueA
Read-onlyIdempotent

Opens an issue of the Journal officiel de la Nouvelle-Calédonie (JONC). Numbers like "2026-00020" are items of the new electronic JONC and return the full act directly; plain numbers like "10068" are classic issues and return their table of contents (acts by section, legal publications, associations), each with the id to pass to leginova_get_jonc_item. The issue date is the JONC publication date of every act it contains. leginova_browse lists the issues of a year.

ParametersJSON Schema
NameRequiredDescriptionDefault
numeroYesJONC number, e.g. "10068" or "2026-00020"

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/openWorld, so safety is covered; the description adds genuinely new behavior by describing the two return shapes (full act vs. TOC with act ids) and the semantic meaning of the issue date. No output schema exists, so this prose return-shape disclosure is doing real work; it stops short of describing pagination or failure modes.

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

Conciseness4/5

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

Front-loaded with the core action, then dense but useful routing in three sentences. Slightly parenthesis-heavy, yet every sentence carries distinct information (return shapes, item hand-off, year listing).

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

Completeness4/5

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

With one parameter, no output schema, and annotations covering safety, the description supplies the missing return-value semantics and sibling routing. It is complete enough to invoke correctly; only edge cases (invalid numbers, empty TOC) are unaddressed.

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

Parameters4/5

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

Schema coverage is 100% and the single param is already described, so the baseline is 3; the description goes beyond it by explaining what the two number formats mean and what each yields, which the schema's bare 'e.g.' does not convey.

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

Purpose5/5

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

States a specific verb+resource ('Opens an issue of the Journal officiel de la Nouvelle-Calédonie') and crucially disambiguates itself from siblings: it explains that JONC-number lookups return the act while plain numbers return a table of contents, and points to leginova_get_jonc_item and leginova_browse. An agent can distinguish this from leginova_browse and leginova_get_jonc_item without opening any schema.

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

Usage Guidelines5/5

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

Explicit routing: it tells the agent that plain numbers return a TOC whose per-act ids are passed to leginova_get_jonc_item, and that leginova_browse lists the issues of a year. When to use this tool versus the two nearest alternatives is spelled out rather than inferred.

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

leginova_get_jonc_itemRead an act or publication from the JONCA
Read-onlyIdempotent

Reads one item published in the JONC: an act (arrêté, délibération, loi du pays, State law...), a legal publication or an association notice. Returns published_in_jonc_on (date of publication in the JONC) and the filing authority with every act. Recent acts come as structured text. For many older acts Leginova holds metadata only: with pdf_text "auto" the text is then extracted from the official PDF. text_status is "structured", "pdf_text" or "not_available" with a reason (pdf_without_text_layer = image scan, retrying other pages will not help). pdf_scope "whole_issue" means the PDF is the entire JONC issue, not the act alone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes
kindNoacte
page_endNoLast PDF page to return (default: as many as max_chars allows)
pdf_textNoauto
max_charsNo
page_startNoFirst PDF page to return
jonc_numeroNoJONC number the item belongs to, used for the citation URL and to locate the act in a whole-issue PDF

TDQS

A4.2/5.0
Behavior5/5

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

Beyond the readOnly/idempotent/openWorld annotations, the description discloses important behavior: returned publication date and filing authority, text_status values, automatic PDF text extraction with pdf_text "auto", and why pdf_without_text_layer means retrying pages is futile. It also explains pdf_scope "whole_issue" as a potential PDF scope. This is unusually rich operational context.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then moves efficiently through return values, text availability, and PDF scope. Despite covering complex behavior, every sentence contributes useful information without repetition.

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

Completeness4/5

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

Given the lack of an output schema and low schema description coverage, the description supplies the most important return and text-extraction context. It still leaves some parameter semantics implicit, notably id, max_chars, and full page-range behavior, so it is strong but not airtight.

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

Parameters3/5

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

Schema description coverage is only 43%, so the description must compensate. It explains pdf_text behavior and maps item categories to the kind enum, but id, max_chars, and much of the page-range semantics remain undocumented outside the schema.

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

Purpose5/5

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

The description gives a specific verb and resource: reads one item published in the JONC, with examples of item types. It clearly distinguishes item-level reading from broader JONC access, allowing an agent to identify the tool 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.

Usage Guidelines3/5

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

The description establishes that this tool reads one JONC item and explains PDF/text extraction behavior, but it never explicitly names when to choose it over siblings like leginova_get_jonc or the search tools. Usage is implied rather than contrasted against alternatives.

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

leginova_get_jurisprudenceRead a court decisionA
Read-onlyIdempotent

Reads a decision published on Leginova (Conseil d'État, Cour de cassation, Cour d'appel de Nouméa, Tribunal administratif, Conseil constitutionnel...): metadata plus the full text extracted from the official PDF, by page range. text_status says whether text was found and, if not, why.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesDecision slug, e.g. "cour-de-cassation-arret-13-15646-2014-11-04"
page_endNoLast PDF page to return (default: as many as max_chars allows)
max_charsNo
page_startNoFirst PDF page to return

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld, non-destructive). The description adds real behavioral context beyond that: text comes from the official PDF, output is paginated by page range, and `text_status` reports whether text was found and why if not — a useful failure-mode disclosure.

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

Conciseness4/5

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

Front-loaded with the core purpose, and the second clause about text_status is well-placed and earns its space. The parenthetical list of jurisdictions is long but informational rather than padding.

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

Completeness4/5

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

With no output schema, the description must carry return-value burden, and it does flag metadata, full text, and the text_status field. It stops short of describing what the metadata contains or how pages interact with max_chars truncation, but it is complete enough to invoke correctly.

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

Parameters4/5

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

Schema coverage is 75% (slug, page_start, page_end documented; max_chars only carries a default and bounds). The description reinforces the page-range semantics and ties max_chars to the page window ('default: as many as max_chars allows'), adding meaning the raw schema doesn't state.

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

Purpose5/5

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

States a specific verb (Reads) and resource (a decision published on Leginova), and enumerates the courts covered, so it is immediately distinguishable from siblings like leginova_search or leginova_get_code_article. The scope — metadata plus extracted full text — is spelled out rather than implied.

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

Usage Guidelines3/5

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

It is clear this tool fetches a decision once you have a slug, but there is no explicit when-to-use guidance and no mention of how it relates to the sibling search tools that produce the slug. The usage is inferable from the slug requirement and the verb, not stated.

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

leginova_get_texte_consolideRead a consolidated textA
Read-onlyIdempotent

Reads a consolidated text (loi du pays, délibération, arrêté... in its current version with all amendments applied). mode "outline" returns metadata, the table of articles and the amendment history; mode "full" returns the text itself, chunked by max_chars (pass back offset to continue). Pass article_id to read a single article with its own history. Always state the consolidation date when quoting: the text is the version in force on that date.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesConsolidated text id (texteConsolideId in search results)
modeNofull
offsetNo
max_charsNo
article_idNoRead only this article
include_historyNoAppend the list of amending acts

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/openWorld, so the bar is lower, but the description adds real behavioral context: chunked pagination via max_chars/offset, per-mode return shapes, and the important warning that the text is the version in force on the consolidation date and that date must be quoted.

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

Conciseness4/5

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

Three tight sentences, front-loaded with the core action and the mode semantics, then the pagination mechanic and the citation caveat. Dense but every clause carries information; no filler.

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

Completeness4/5

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

With no output schema and six parameters, the description does the heavy lifting by describing what each mode returns and how paging works. The only modest gap is that include_history's effect is left entirely to the schema's short note.

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

Parameters4/5

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

Schema coverage is only 50%, so the description must compensate, and it does for the key parameters: it explains what each mode returns, that max_chars chunks the output, that offset continues the read, and that article_id scopes to one article with its history. Only `include_history` and `id` are left to the schema.

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

Purpose4/5

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

Clearly states a specific verb and resource ('Reads a consolidated text') and disambiguates from the code-oriented siblings by naming the legal source types (loi, délibération, arrêté). It also spells out the two operating modes, so the agent knows the tool's shape, though it never explicitly contrasts itself with leginova_get_code_article or leginova_read_code_section.

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

Usage Guidelines4/5

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

Gives clear selection guidance between mode 'outline' and 'full', explains when to pass article_id, and instructs the agent to pass back `offset` to continue paging. It lacks any explicit when-not or named-alternative routing, but the context is strong.

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

leginova_list_codesList the codesA
Read-onlyIdempotent

Lists the 31 consolidated codes published on Leginova with the slug every other code tool expects, the filing authority of each code (Etat, Nouvelle-Calédonie, Province) and the date of the published version. Titles alone mislead: "Code civil applicable en Nouvelle-Calédonie" is filed by New Caledonia, "Code de la consommation applicable en Nouvelle-Calédonie" by the State, next to a separate "Code de la consommation de Nouvelle-Calédonie". Codes can also be mixed: the Code de commerce applicable en Nouvelle-Calédonie, filed by New Caledonia, keeps State-law articles (L.) next to loi du pays articles (Lp.), so competence is read article by article from the prefix. The first call reads every code and takes a few seconds.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
codesYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already establish the safe read-only, idempotent, open-world profile, so the bar is lower. The description still adds real value beyond them by disclosing latency ('takes a few seconds' on the first call) and the fact that the call reads every code, 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.

Conciseness3/5

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

The core purpose is front-loaded, but the description runs long: the two Nouvelle-Calédonie filing examples and the mixed-code/prefix explanation are educational and back-loaded, only tangentially serving tool selection. Useful for interpreting output but not tightly edited.

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

Completeness4/5

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

An output schema exists, so return-value documentation is not required, and the description instead prepares the agent for data quirks (misleading titles, mixed State/loi-du-pays codes, per-article competence). That is adequate coverage for a no-argument listing tool; only the absence of explicit routing to siblings leaves a small gap.

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

Parameters4/5

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

The tool takes zero parameters and schema coverage is effectively complete, so there is nothing for the description to clarify. Baseline 4 applies.

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

Purpose4/5

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

States a specific verb (lists) and resource (the 31 consolidated codes) and enumerates the fields returned: slug, filing authority, and published-version date. It hints at its role as the entry point for the other code tools but never names a sibling it should be preferred over, so differentiation is implicit rather than explicit.

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

Usage Guidelines3/5

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

The phrase 'the slug every other code tool expects' and 'the first call reads every code' imply this is the prerequisite entry point before the code-outline/article tools, which is useful. However, no alternative tool is named and no explicit when-to-use/when-not-to-use condition is stated, so guidance is inferred rather than given.

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

leginova_read_code_sectionRead a section of a codeA
Read-onlyIdempotent

Full text of a code section (chapter, section...) with all its articles, in reading order. Long sections are returned in chunks: pass back offset to continue.

ParametersJSON Schema
NameRequiredDescriptionDefault
offsetNo
code_slugYesCode slug, e.g. "code-du-travail-de-nouvelle-caledonie" (see leginova_list_codes)
max_charsNo
section_slugYesFrom leginova_get_code_outline or a SECTION_CODE search result

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly, idempotent, non-destructive), so the bar is lower. The description adds real behavioral context beyond them: results are in reading order and long sections are chunked with an offset continuation protocol. It does not mention limits or what happens at the end of content, keeping it 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.

Conciseness5/5

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

Two sentences, front-loaded with the return content and followed by the one operational rule that matters. No filler, no restatement of the title.

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

Completeness4/5

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

There is no output schema, so the description carries the burden of describing returns, and it does so adequately (full text, all articles, reading order, chunking). The only meaningful omission is max_chars, which an agent may need to tune for large sections.

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

Parameters3/5

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

Schema coverage is 50%: code_slug and section_slug are documented in the schema, while offset and max_chars are not. The description compensates for offset by explaining its continuation role, but max_chars (default 30000, range 2000-100000) is left entirely unexplained in both places. Baseline 3 is appropriate.

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

Purpose4/5

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

States a concrete verb+resource ('Full text of a code section ... with all its articles, in reading order'), which implicitly separates it from leginova_get_code_article (single article) and leginova_get_code_outline (structure only). It never names those siblings explicitly, so the differentiation is inferable rather than stated.

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

Usage Guidelines3/5

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

The second sentence gives a clear operational instruction for pagination ('pass back `offset` to continue'), which is genuinely useful. However, there is no when-to-use/when-not guidance relative to siblings like get_code_article or get_code_outline; the intended usage is only implied by the content description.

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

leginova_suggestResolve a title to a Leginova documentA
Read-onlyIdempotent

Autocomplete over titles: turns a partial name ("code du travail", "loi du pays 2021-2", "télétravail") into documents with their ids and slugs. Cheaper than a search when the target is known by name.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesPartial title in French
scopeNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
suggestionsYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, openWorld and non-destructive, so the safety profile is covered structurally. The description adds a cost/latency trait relative to search, which is genuinely useful, but says nothing about result caps, ranking, or pagination behavior for an autocomplete endpoint.

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

Conciseness5/5

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

Two sentences, zero filler, with the core behavior and output shape front-loaded and the cost comparison as a trailing qualifier. Nothing could be cut without losing information.

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

Completeness4/5

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

An output schema exists, so return values need not be explained, and the description still hints at the id/slug payload. Combined with annotation coverage, the definition is nearly sufficient; only the undocumented scope parameter leaves a small gap.

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

Parameters3/5

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

Schema coverage is 50%: 'query' is documented and the description's sample strings ('code du travail', 'loi du pays 2021-2', 'télétravail') usefully indicate expected phrasing, including accented French. However, the six-value 'scope' enum carries no explanation in either schema or description, so the description does not fully compensate for the coverage gap.

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

Purpose5/5

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

The description names a specific operation ('Autocomplete over titles') and states exactly what it returns (documents with their ids and slugs), which is enough to distinguish it from leginova_search without opening either schema. The examples of partial inputs make the resource concrete.

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

Usage Guidelines4/5

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

It gives an explicit selection rule against a named sibling: use this 'cheaper than a search when the target is known by name'. That is clear routing guidance, but it stops short of stating when-not-to-use cases (e.g. broad or fuzzy discovery, where search should win).

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.

  1. 14 tool updatesv1.0.0
    • First observedleginova_advanced_search
    • First observedleginova_browse
    • First observedleginova_get_catalogue
    • First observedleginova_get_code_article
    • First observedleginova_get_code_outline
    • First observedleginova_get_debat
    • First observedleginova_get_jonc
    • First observedleginova_get_jonc_item
    • First observedleginova_get_jurisprudence
    • First observedleginova_get_texte_consolide
    • First observedleginova_list_codes
    • First observedleginova_read_code_section
    • First observedleginova_search
    • First observedleginova_suggest

TDQS

A4.1/5.0

Scored across 14 tools

Disambiguation4/5

The tools target distinct resources and workflows, but there is some overlap between leginova_search, leginova_advanced_search, and leginova_suggest, and between the code retrieval tools. Descriptions clarify intended use, so misselection is possible but manageable.

Naming Consistency4/5

Nearly all tools use a consistent leginova_ prefix with snake_case naming. Minor deviations include mixed retrieval verbs (get vs read) and the adjective-first leginova_advanced_search, but the pattern remains readable and predictable.

Tool Count5/5

With 14 tools, the server is well-scoped for legal research across codes, texts, JONC, jurisprudence, and debates. Each tool appears to cover a distinct retrieval or navigation need.

Completeness5/5

The surface covers search, advanced search, autocomplete, code browsing, article and section reading, consolidated texts, jurisprudence, JONC issues and items, debates, chronological browsing, and catalogue identifiers. This provides complete lifecycle coverage for the legal research domain without obvious dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers