leginova-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@leginova-mcptrouve l'article Lp. 441-6 du code de commerce calédonien"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
leginova-mcp
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 |
| Recherche plein texte dans tous les fonds, avec facettes, filtres, dates et tri |
| Recherche structurée (mots, expression exacte, conditions ET/OU/SAUF, autorité, juridiction, type d'acte, codes...) |
| Retrouve un document à partir d'un titre partiel |
| Les 31 codes publiés, leur autorité déposante (État, Nouvelle-Calédonie, province) et la date de leur version |
| Sommaire d'un code, avec le nombre d'articles par division |
| Un article de code, recherché par identifiant ou par numéro, quel que soit le préfixe |
| Le texte intégral d'une division de code |
| Un texte consolidé (sommaire, texte paginé, article, historique, textes d'application) |
| Une décision de justice, texte extrait du PDF officiel |
| Un numéro du JONC : sommaire analytique ou acte du JONC électronique |
| 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 |
| Le compte rendu d'une séance du Congrès, page par page |
| Les entrées d'un fonds par année (textes consolidés, jurisprudence, débats, JONC) |
| 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é :
| Signification |
| Le numéro demandé existe tel quel. Si le même numéro existe sous un autre préfixe ( |
| Le préfixe demandé n'existe pas, l'équivalent |
| Aucun préfixe donné, un seul article porte ce numéro. |
| Plusieurs articles conviennent : ils sont listés, aucun n'est choisi. |
| Le numéro n'existe que sous un préfixe d'une autre nature ( |
| 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) ounot_availableavec un motif.pdf_without_text_layersignale un scan image sans couche texte : aucune autre page n'en aura, inutile de réessayer. Les autres motifs sontpdf_not_found,pdf_too_large,download_failedetextraction_failed.next_pagen'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_modeetpdf_scope.whole_issuesignifie 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 articlesL.issus du droit de l'État à côté des articlesLp..
Installation
Chaque release publie deux fichiers, toujours disponibles à la même adresse pour la dernière version :
Fichier | Usage | Lien « latest » |
| Extension Claude Desktop | |
| Serveur en un seul fichier, pour Claude Code et les autres clients (Node.js 22 ou plus récent) |
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.mjsRelancez 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@leginovaLe 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-mcpLe 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 |
|
| Site interrogé |
|
| Délai maximal par requête |
|
| Requêtes simultanées vers Leginova |
|
| Nouvelles tentatives sur erreur transitoire (429, 5xx, réseau) |
|
| Taille du cache mémoire |
|
| Durée de vie du cache |
|
| Taille maximale d'un PDF téléchargé pour extraction |
|
| User-Agent envoyé |
|
| Écoute en mode HTTP |
| Noms d'hôte acceptés quand l'écoute n'est pas en boucle locale (obligatoire dans ce cas) | |
|
| 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:livele 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 Desktopnpm 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 + buildLa 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
npm run version:set 0.2.0aligne le numéro de version danspackage.json,package-lock.json,manifest.json,src/version.tset les manifestes du plugin, et fait pointer la marketplace sur l'archive du plugin de cette version ;npm run version:checkle vérifie.Ajouter la section
## 0.2.0 (date)àCHANGELOG.md: elle devient le texte de la release.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.tsLicence
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 toolsleginova_advanced_searchAdvanced search (structured criteria)ARead-onlyIdempotent
Structured search mirroring leginova.gouv.nc/recherche-avancee. Pick a target, then either keyword groups (all_words / any_words / exclude_words / exact_phrase) or boolean conditions (ET/OU/SAUF with a field scope), plus filters. Use it for precise requests: acts of a given type and authority over a period, decisions of a given court, articles of selected codes. IDs for themes, authorities, collectivities, act types, courts and codes come from leginova_get_catalogue. Filters apply per target: act_types/authority_ids (actes, textes_consolides), collectivity_ids (actes, codes, global), code_slugs/section_types (codes), courts/court_orders/decision_types/case_number (jurisprudence), consolidated_* (textes_consolides). The meaning of date_from/date_to follows the target: publication date (actes), application date (codes), text date (textes_consolides), hearing date (jurisprudence). There is no article-number field here: use leginova_get_code_article, which tolerates L./Lp. prefixes.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number | |
| sort | No | global target only | |
| courts | No | e.g. ["COUR_APPEL", "TRIBUNAL_ADMINISTRATIF"] | |
| target | Yes | ||
| date_to | No | ||
| act_types | No | e.g. ["ARRETE", "DELIBERATION", "LOIS_DU_PAYS"] | |
| all_words | No | Every word must appear | |
| any_words | No | At least one of these words | |
| date_from | No | ||
| page_size | No | Results per page (max 50) | |
| theme_ids | No | ||
| code_slugs | No | ||
| conditions | No | Boolean conditions, evaluated in order (expert mode). Not combinable with the keyword fields. | |
| case_number | No | Jurisprudence reference number, e.g. "13-15646" | |
| court_orders | No | ||
| exact_phrase | No | Words that must appear as an exact phrase | |
| authority_ids | No | ||
| exclude_words | No | None of these words | |
| section_types | No | e.g. ["PARTIE", "LIVRE", "TITRE", "CHAPITRE"] | |
| decision_types | No | e.g. ["ARRET", "JUGEMENT", "ORDONNANCE", "DECISION"] | |
| consolidated_to | No | ||
| collectivity_ids | No | ||
| consolidated_from | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | Yes | |
| query | Yes | |
| total | Yes | |
| facets | No | |
| results | Yes | |
| site_url | Yes | |
| page_size | Yes | |
| best_matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/open-world, but the description adds behavior they cannot convey: filters are target-scoped, the meaning of date_from/date_to shifts by target, boolean `conditions` are evaluated in order and are 'not combinable with the keyword fields'. That incompatibility rule alone is high-value 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core mode-of-operation ('Pick a `target`, then either keyword groups or boolean conditions'), then proceeds to filter mapping and date semantics. Dense, run-on sentences, but for a 23-parameter tool nearly every clause carries necessary 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?
Covered: target semantics, filter-to-target mapping, target-dependent date meaning, the keyword-vs-boolean exclusivity, prerequisite catalogue lookups, and the article-number workaround. An output schema exists, so return values need not be described. An agent has everything needed to construct a valid call.
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 57% schema description coverage, the description carries real weight: it enumerates which filters apply to each target (act_types/authority_ids, collectivity_ids, code_slugs/section_types, courts/court_orders/decision_types/case_number, consolidated_*) and redefines date_from/date_to per target. It does not clarify sort/page/page_size beyond the schema, leaving some gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (structured search) and immediately scopes it to 'precise requests: acts of a given type and authority over a period, decisions of a given court, articles of selected codes', which makes the tool's niche legible. It stops short of naming leginova_search as the simpler sibling alternative, so the contrast is inferred 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to reach for it ('Use it for precise requests...') and routes prerequisites to siblings: IDs must come from leginova_get_catalogue, and there is a stated negative case with an alternative ('no article-number field here: use leginova_get_code_article'). This is textbook when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leginova_browseBrowse a collection by yearARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| limit | No | ||
| offset | No | ||
| collection | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| year | No | |
| total | No | |
| years | No | |
| entries | No | |
| collection | Yes | |
| next_offset | No |
TDQS
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.
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.
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.
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.
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.
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 searchARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| section | No | all | |
| contains | No | Case-insensitive filter on labels, e.g. "province sud" |
TDQS
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.
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.
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.
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.
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.
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 articleARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| code_slug | No | Code to look in; omit to search all codes by article_number | |
| article_slug | No | e.g. "partie-legislative-article-lp-334-26" | |
| article_number | No | e.g. "L. 441-6", "Lp. 122-13", "R. 4211-1", "2276", "1er" |
Output Schema
| Name | Required | Description |
|---|---|---|
| text | Yes | The full answer as Markdown: notices, article text, history, neighbours |
| notice | No | |
| article | No | |
| requested | Yes | |
| candidates | Yes | |
| match_status | Yes |
TDQS
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.
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.
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.
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.
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.
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 codeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | Levels to expand; articles are listed once the depth reaches them | |
| code_slug | Yes | Code slug, e.g. "code-du-travail-de-nouvelle-caledonie" (see leginova_list_codes) | |
| section_slug | No | Restrict the outline to this section |
TDQS
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.
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.
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.
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.
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.
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 debateARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| numero | Yes | Debate number, e.g. "DR-2026-00005" | |
| page_end | No | Last PDF page to return (default: as many as max_chars allows) | |
| max_chars | No | ||
| page_start | No | First PDF page to return |
TDQS
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.
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.
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.
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.
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.
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 issueARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| numero | Yes | JONC number, e.g. "10068" or "2026-00020" |
TDQS
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.
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.
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.
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.
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.
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 JONCARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| kind | No | acte | |
| page_end | No | Last PDF page to return (default: as many as max_chars allows) | |
| pdf_text | No | auto | |
| max_chars | No | ||
| page_start | No | First PDF page to return | |
| jonc_numero | No | JONC number the item belongs to, used for the citation URL and to locate the act in a whole-issue PDF |
TDQS
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.
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.
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.
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.
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.
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 decisionARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Decision slug, e.g. "cour-de-cassation-arret-13-15646-2014-11-04" | |
| page_end | No | Last PDF page to return (default: as many as max_chars allows) | |
| max_chars | No | ||
| page_start | No | First PDF page to return |
TDQS
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.
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.
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.
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.
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.
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 textARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | Consolidated text id (texteConsolideId in search results) | |
| mode | No | full | |
| offset | No | ||
| max_chars | No | ||
| article_id | No | Read only this article | |
| include_history | No | Append the list of amending acts |
TDQS
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.
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.
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.
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.
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.
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 codesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| note | Yes | |
| codes | Yes |
TDQS
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.
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.
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.
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.
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.
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 codeARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| offset | No | ||
| code_slug | Yes | Code slug, e.g. "code-du-travail-de-nouvelle-caledonie" (see leginova_list_codes) | |
| max_chars | No | ||
| section_slug | Yes | From leginova_get_code_outline or a SECTION_CODE search result |
TDQS
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.
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.
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.
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.
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.
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_searchSearch Leginova (full text)ARead-onlyIdempotent
Full-text search across the official law of New Caledonia on leginova.gouv.nc: Journal officiel (JONC) acts, consolidated texts (lois du pays, délibérations, arrêtés...), codes, case law and Congress debates. Write queries in French. Words are AND-ed by default; "double quotes" search an exact phrase; OU / SAUF (or OR / NOT) combine terms. Each result carries its official URL (cite it) and a next tool call to open it. Restrict scope to get facets (themes, courts, act types...) that can be fed back through filters. An empty result is not proof that a rule does not exist; to fetch a code article by number use leginova_get_code_article.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | 1-based page number | |
| sort | No | Default is relevance. CONSOLIDATION_* and ADOPTION_* apply to consolidated texts, ALPHABETIQUE to titles | |
| query | Yes | Search terms in French, e.g. "bail commercial" or "\"licenciement économique\"" | |
| scope | No | Collection to search | all |
| date_to | No | Upper bound of the document date, YYYY-MM-DD | |
| filters | No | Facet filters as returned in `facets`, e.g. {"filterJuridiction": ["COUR_APPEL"], "filterTheme": ["30"]}. Several values are OR-ed. | |
| date_from | No | Lower bound of the document date, YYYY-MM-DD | |
| page_size | No | Results per page (max 50) | |
| include_facets | No | Return facet counts (only when scope is not "all") | |
| consolidated_to | No | Consolidated texts only: consolidation date upper bound | |
| consolidated_from | No | Consolidated texts only: consolidation date lower bound |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | |
| notes | Yes | |
| query | Yes | |
| total | Yes | |
| facets | No | |
| results | Yes | |
| site_url | Yes | |
| page_size | Yes | |
| best_matches | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly/idempotent/non-destructive), so the description uses its space for genuinely additive behavior: default AND semantics, exact-phrase quoting, operator keywords, the shape of each result (official URL to cite plus a `next` tool call), and the scope→facets→filters round-trip. This is real behavioral context beyond structured fields.
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?
Dense but front-loaded: what it searches, then query grammar, then result shape, then facet loop, then the alternative-tool caveat. Every sentence carries information, though the single block is long and could be broken up for faster scanning.
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 11 parameters, nested `filters`, an output schema, and a rich set of 13 siblings, the description supplies what the schema cannot: the query language, the facets/filters workflow, and routing to leginova_get_code_article. Since an output schema exists, it correctly avoids describing return values in detail.
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 parameters are already well documented and the baseline is 3. The description adds meaning the schema lacks: that `scope` must be restricted for facets, that facet values flow back through `filters`, and that queries are French-language with a specific operator grammar. It does not cover date or pagination semantics, which the schema handles.
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 ('full-text search across the official law of New Caledonia on leginova.gouv.nc') and enumerates the covered collections (JONC, consolidated texts, codes, case law, Congress debates). It explicitly distinguishes itself from the sibling leginova_get_code_article for article-by-number lookups.
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 concrete when-to-use guidance (write queries in French, use scope to get facets, feed facets back through filters) and an explicit when-not: an empty result is not proof a rule doesn't exist, and to fetch a code article by number use leginova_get_code_article. Query-operator semantics (AND default, quotes for exact phrase, OU/SAUF) are documented in the description itself.
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 documentARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Partial title in French | |
| scope | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| suggestions | Yes |
TDQS
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.
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.
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.
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.
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.
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.
14 tool updates
v1.0.0- First observed
leginova_advanced_search - First observed
leginova_browse - First observed
leginova_get_catalogue - First observed
leginova_get_code_article - First observed
leginova_get_code_outline - First observed
leginova_get_debat - First observed
leginova_get_jonc - First observed
leginova_get_jonc_item - First observed
leginova_get_jurisprudence - First observed
leginova_get_texte_consolide - First observed
leginova_list_codes - First observed
leginova_read_code_section - First observed
leginova_search - First observed
leginova_suggest
TDQS
Scored across 14 tools
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.
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.
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.
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
Related MCP Connectors
Search French-language and European case law and French legal texts (codes, statutes, treaties).
Resolve, search and verify legal citations against the official sources, with provenance.
Search 18M+ legal documents worldwide — case law, legislation, and doctrine across 110+ countries.
Temporal search and comparison for official Luxembourg and reviewed EU law, with provenance.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides access to official French legal databases (Légifrance and JudiLibre) to search and retrieve French legislation, legal codes, case law, and judicial decisions through authenticated APIs.33MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to search and retrieve French legislation, case law, and EU law integrations from official sources via MCP.115 npm1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables querying and retrieving legal texts and decisions from French public APIs Légifrance and JudiLibre for legal research.MIT
- AlicenseNot gradedqualityBmaintenanceEnables searching, querying, and retrieving metadata for datasets from New Caledonia Open Data (data.gouv.nc) using ODSQL.141 npmMIT