Server definition
- Hash
- sha256:50279a0a9cf60395cdf1f1b7db759bd5250c9562ce3152ed383189bc6611441d
- What it is
- What a remote MCP server returned when asked what it offers: 35 tools
The blob, as servednamed by its sha256
{
"instructions": "Protocole d'accès libre à la jurisprudence et au droit positif français + européen.\n\nTOOL D'ENTRÉE : `search_all` — recherche fédérée fan-out avec ranking BM25\n+ thésaurus juridique FR automatique (ex : \"harcèlement\" → aussi\n\"intimidation\", \"vexation morale\"). À UTILISER EN PRIORITÉ pour toute\nrequête floue ou multi-source.\n\nSOURCES DE JURISPRUDENCE (pertinence BM25) :\n• `search_admin` — ~570 k décisions JADE (CE + Tribunal des conflits + CAA, TA partiels) full text\n• `search_judiciaire_libre` — 2,6 M (Cass, CA, TJ 717 756, trib. de commerce 175 152, Conseil constit.)\n• `search_conseil_etat` — plus de 150 k décisions du CE via Sinequa (moteur sémantique natif)\n• `search_cedh` — 76 k décisions Cour EDH\n• `search_cjue` — 44 k arrêts CJUE + Tribunal UE\n\nEXTRACTION TEXTE INTÉGRAL — ⚠️ RÈGLE IMPÉRATIVE : les tools `search_*` ne\nrenvoient qu'un EXTRAIT tronqué (~28 mots autour du match), JAMAIS le texte\ncomplet. Pour lire une décision en entier, TOUJOURS enchaîner avec le tool\nd'extraction correspondant à l'id renvoyé. Ne JAMAIS conclure « texte\nindisponible / pas dans la base » à partir d'un snippet seul, ni rediriger\nl'utilisateur vers Légifrance sans avoir tenté l'extraction. Ces tools\npeuvent être chargés à la demande par certains clients MCP.\n• `get_decision_text` (admin : DCE_*/DTA_*/DCAA_*/CETATEXT*/Ariane_Web)\n• `get_decision_judiciaire_libre` (judiciaire : JURITEXT*/CONSTEXT*)\n• `get_decision_cedh` (001-*) • `get_decision_cjue` (CELEX/ECLI)\n\nARTICLES DE LOI (killer feature unique à justicelibre) :\n• `get_law_article(code, num, date)` — version en vigueur À LA DATE donnée\n selon la base (qui peut retarder sur Légifrance : voir sa description).\n Ex : art. 1128 CC en 1992 → texte napoléonien, pas la réforme 2016.\n• `get_law_versions(code, num)` — timeline complète historique.\n• `get_law_landscape(code, num)` — carte : textes qui citent, modifient,\n appliquent l'article (arrêtés, décrets) et leur succession.\n• `get_travaux_preparatoires(query|loi)` — dossier législatif d'une loi.\n• `search_legi` — ~1,8 M articles, ~146 000 textes (tous les codes\n consolidés + lois, ordonnances et décrets).\n• `search_decisions_citing(code, num)` — cross-référence inverse.\n\nDROIT POSITIF COMPLÉMENTAIRE :\n• `search_jorf` — JO post-1990 (lois, décrets, arrêtés, circulaires)\n• `search_kali` — conventions collectives + accords de branche\n• `search_cnil` — délibérations CNIL (RGPD, données personnelles)\n\nSECONDAIRES (tri date-desc, pour l'actualité d'une juridiction) :\n`search_admin_recent`, `search_admin_recent_all_ta`,\n`search_admin_recent_all_caa` — À éviter pour la recherche de jurisprudence\npertinente (utiliser `search_admin` qui a BM25).\n\nPISTE JUDILIBRE (auth OAuth2) :\n`search_judiciaire` + `get_decision_judiciaire` — pour les décisions\njudiciaires récentes non encore archivées. Token obtenable sur\njusticelibre.org/tutoriel-piste.html.\n\nPROTOCOLE D'USAGE : pour tout doute, commencer par `about_justicelibre`\nqui détaille la cartographie. Sinon : `search_all(query)` couvre 90% des\nbesoins. ~110 codes/textes supportés pour les articles de loi (CC, CP,\nCPC, CPP, CT, CSP, CJA, COJ, CGI, CESEDA…) + Constitution + lois non\ncodifiées, et LEGITEXT/JORFTEXT direct pour le reste (liste complète via\nla resource `justicelibre://codes-supportes`).\n",
"tools": [
{
"description": "Vue d'ensemble du protocole JusticeLibre : cartographie des sources\n et règles d'acheminement.\n\n Appeler cet outil en priorité pour appréhender la matrice de\n compatibilité des identifiants, les périmètres de recherche de chaque\n juridiction, et les spécificités des bases de données exploitées.\n ",
"inputSchema": {
"properties": {},
"title": "about_justicelibreArguments",
"type": "object"
},
"name": "about_justicelibre",
"outputSchema": {
"additionalProperties": true,
"title": "about_justicelibreDictOutput",
"type": "object"
}
},
{
"description": "Construit l'URL canonique d'un document à partir de son identifiant.\n\n Utile pour vérifier les sources à la main sur le site officiel (Légifrance,\n Conseil constitutionnel, EUR-Lex, HUDOC, etc.) ou pour inclure un lien\n cliquable dans un courrier.\n\n Identifiants reconnus :\n - `LEGIARTI*` → Légifrance article (passer `legitext` du texte parent\n pour distinguer code (/codes/) vs loi non codifiée (/loda/)\n - `LEGITEXT*` / `JORFTEXT*` → texte entier Légifrance\n - `JURITEXT*` / `CONSTEXT*` / `CETATEXT*` → décisions Légifrance\n - CELEX (`6XXXXCJXXXX`) → EUR-Lex (CJUE)\n - `ECLI:*` → EUR-Lex deeplink\n - itemid HUDOC (`001-XXXXXX`) → Cour EDH\n - ArianeWeb (`/Ariane_Web/AW_DCE/|XXXXXX`) → conseil-etat.fr\n\n Args:\n identifier: l'ID à convertir\n legitext: (optionnel) LEGITEXT du texte parent si `identifier` est un\n LEGIARTI — améliore la précision de l'URL (codes/ vs loda/)\n date: (optionnel, YYYY-MM-DD) — appendé à l'URL Légifrance pour pointer\n vers la version de l'article en vigueur à cette date\n (ex: `/loda/article_lc/LEGIARTI.../2023-01-01`). Indispensable pour\n vérifier l'état du droit à une date historique, sinon Légifrance\n affiche la version courante même si l'article a été abrogé depuis.\n\n Returns:\n `{\"id\", \"source_url\"}` ou `{\"error\"}` si format non reconnu.\n ",
"inputSchema": {
"properties": {
"date": {
"default": "",
"description": "(optionnel, YYYY-MM-DD) — appendé à l'URL Légifrance pour pointer vers la version de l'article en vigueur à cette date (ex: `/loda/article_lc/LEGIARTI.../2023-01-01`). Indispensable pour vérifier l'état du droit à une date historique, sinon Légifrance affiche la version courante même si l'article a été abrogé depuis.",
"title": "Date",
"type": "string"
},
"identifier": {
"description": "l'ID à convertir",
"title": "Identifier",
"type": "string"
},
"legitext": {
"default": "",
"description": "(optionnel) LEGITEXT du texte parent si `identifier` est un LEGIARTI — améliore la précision de l'URL (codes/ vs loda/)",
"title": "Legitext",
"type": "string"
}
},
"required": [
"identifier"
],
"title": "build_source_urlArguments",
"type": "object"
},
"name": "build_source_url",
"outputSchema": {
"additionalProperties": true,
"title": "build_source_urlDictOutput",
"type": "object"
}
},
{
"description": "Récupère une décision administrative par son **numéro de requête exact**.\n\n Couvre toutes les juridictions : Conseil d'État, cours administratives\n d'appel (CAA), tribunaux administratifs (TA). Utilise un lookup SQL exact\n sur le champ `numero` — pas de FTS5, pas de faux positifs.\n\n ⚠️ **Désambiguïsation indispensable** : un même numéro à 7 chiffres\n (ex: 2200433) est partagé par 24+ tribunaux administratifs différents\n (chaque TA a sa propre série annuelle qui repart à 1). **Si tu sais\n quelle juridiction a rendu la décision, passe-la TOUJOURS.**\n\n Sans `juridiction`, un numéro de CAA (« 26VE02318 ») est cherché dans\n la cour que désignent ses lettres (VE = Versailles, DA = Douai…) ; les\n autres numéros sont cherchés au Conseil d'État et dans la jurisprudence\n citée des CAA. Un numéro de TA peut alors ressortir « introuvable »\n alors qu'il existe : réessaie en nommant le tribunal.\n\n ⚠️ **Numéros réutilisés dans le temps** : au-delà du partage entre\n tribunaux, un même numéro désigne parfois plusieurs décisions de LA\n MÊME juridiction, rendues à des époques différentes (7 938 numéros du\n CE, mesuré le 29 août 2026). La réponse porte alors un champ\n `avertissement` et un champ `homonymes`. **Ne jamais conclure d'une\n seule réponse qu'une décision n'existe pas.**\n\n Args:\n numero: numéro de requête (ex : \"2200433\", \"2116343\", \"497566\")\n juridiction: identifiant de la juridiction. **Recommandé pour tout\n numéro à 7 chiffres** (TA/CAA codifié). Formats acceptés :\n - **Nom long (recommandé)** : \"Cour administrative d'appel de Lyon\",\n \"Tribunal administratif de Paris\", \"Conseil d'État\" (avec ou sans\n accent, casse libre). Matching tolérant via extraction de ville.\n - **Code court** : \"TA69\", \"TA75\", \"CAA69\", \"CE\", \"TC\" — et\n formes courtes \"TA Lyon\", \"CAA Douai\". Depuis le 8 septembre\n 2026, code, nom et forme courte sont traduits en écritures\n EXACTES de la base (113 formes pour 45 juridictions) : un code\n ne rate plus les arrêts anciens.\n Note : \"Lyon\" seul reste ambigu (TA Lyon ou CAA Lyon) et n'écarte\n ni l'un ni l'autre. Dès que le nom porte l'ordre de juridiction\n (\"Tribunal administratif de…\", \"CAA…\", \"Conseil d'État\"), il est\n CONTRÔLÉ : une décision d'un autre ordre n'est jamais servie à la\n place, le tool répond introuvable. Avant le 23 août 2026, demander\n le TA de Lyon renvoyait silencieusement la CAA de Lyon.\n\n Returns:\n Décision avec métadonnées (id, juridiction, numero, date, titre) —\n plus `homonymes` et `avertissement` si d'autres décisions du même\n ordre de juridiction portent ce numéro. Ou `{\"error\": \"introuvable\"}`\n si aucun résultat dans JADE.\n\n Exemples :\n get_admin_decision(\"2200433\", juridiction=\"Tribunal Administratif de Lyon\")\n → DTA_2200433_20230214 (TA Lyon, 14 fév 2023, RSA dérogatoire)\n get_admin_decision(\"473286\") # CE n'a pas de doublon, juridiction inutile\n → DCE_473286_20231123 (CE, non-admission du pourvoi sur la précédente)\n ",
"inputSchema": {
"properties": {
"juridiction": {
"default": "",
"description": "identifiant de la juridiction. **Recommandé pour tout numéro à 7 chiffres** (TA/CAA codifié). Formats acceptés : - **Nom long (recommandé)** : \"Cour administrative d'appel de Lyon\", \"Tribunal administratif de Paris\", \"Conseil d'État\" (avec ou sans accent, casse libre). Matching tolérant via extraction de ville. - **Code court** : \"TA69\", \"TA75\", \"CAA69\", \"CE\", \"TC\" — et formes courtes \"TA Lyon\", \"CAA Douai\". Depuis le 8 septembre 2026, code, nom et forme courte sont traduits en écritures EXACTES de la base (113 formes pour 45 juridictions) : un code ne rate plus les arrêts anciens. Note : \"Lyon\" seul reste ambigu (TA Lyon ou CAA Lyon) et n'écarte ni l'un ni l'autre. Dès que le nom porte l'ordre de juridiction (\"Tribunal administratif de…\", \"CAA…\", \"Conseil d'État\"), il est CONTRÔLÉ : une décision d'un autre ordre n'est jamais servie à la place, le tool répond introuvable. Avant le 23 août 2026, demander le TA de Lyon renvoyait silencieusement la CAA de Lyon.",
"title": "Juridiction",
"type": "string"
},
"numero": {
"description": "numéro de requête (ex : \"2200433\", \"2116343\", \"497566\")",
"title": "Numero",
"type": "string"
}
},
"required": [
"numero"
],
"title": "get_admin_decisionArguments",
"type": "object"
},
"name": "get_admin_decision",
"outputSchema": {
"additionalProperties": true,
"title": "get_admin_decisionDictOutput",
"type": "object"
}
},
{
"description": "Récupère une décision du Conseil constitutionnel par son numéro.\n\n Format attendu : \"AA-NNN NATURE\" ou juste \"AA-NNN\" (ex : \"79-105 DC\",\n \"2020-800 DC\", \"2023-1048 QPC\"). Lookup EXACT sur le numéro (aucune\n recherche plein texte : une décision qui se contente d'en CITER une\n autre ne doit jamais être servie à sa place).\n\n ⚠️ La nature n'est pas décorative : un même numéro existe en plusieurs\n natures (2019-778 **DC** du 21 mars 2019 et 2019-778 **QPC** du 10 mai\n 2019). Sans nature et si le numéro est ambigu, le tool refuse de choisir\n et renvoie la liste des candidats.\n\n 💡 Les deux usages sont séparés, et complémentaires :\n · CETTE décision → `get_cc_decision(\"2019-778 DC\")`\n · les décisions qui la CITENT (sa postérité, les revirements, les\n confirmations) → `search_cc(query='\"2019-778 DC\"')`, qui renvoie la\n décision elle-même ET celles qui la visent.\n L'ancien lookup mélangeait les deux par accident et servait la citante\n à la place de la citée.\n\n Args:\n numero: numéro de décision CC (ex : \"79-105 DC\")\n nature: filtre optionnel (QPC, DC, L, etc.) — cf search_cc\n\n Returns:\n `{id, titre, date, juridiction, nature, numero, numero_demande,\n ecli, text}` — `numero` est le numéro RÉELLEMENT servi, à comparer\n mécaniquement à `numero_demande`. Ou dict d'erreur structuré\n `{error, error_category}` si introuvable ou ambigu.\n ",
"inputSchema": {
"properties": {
"nature": {
"default": "",
"description": "filtre optionnel (QPC, DC, L, etc.) — cf search_cc",
"title": "Nature",
"type": "string"
},
"numero": {
"description": "numéro de décision CC (ex : \"79-105 DC\")",
"title": "Numero",
"type": "string"
}
},
"required": [
"numero"
],
"title": "get_cc_decisionArguments",
"type": "object"
},
"name": "get_cc_decision",
"outputSchema": {
"additionalProperties": true,
"title": "get_cc_decisionDictOutput",
"type": "object"
}
},
{
"description": "Récupère une décision du Conseil d'État par son numéro de pourvoi.\n\n Essaie d'abord le bulk JADE DILA (lookup SQL exact), puis si introuvable\n tente ArianeWeb Sinequa — les deux bases ont des couvertures complémentaires.\n\n Pour retrouver une décision via identifiant DCE_*, utiliser\n `get_decision_text` à la place.\n\n ⚠️ **Numéros réutilisés** : le CE a réattribué ses numéros de pourvoi\n d'une époque à l'autre. 7 938 numéros sont portés par plusieurs\n décisions (16 143 décisions concernées, mesuré le 29 août 2026). Le\n n° 74052, par exemple, désigne à la fois un arrêt de 1969 sur des\n quotas de mouture et l'arrêt d'Assemblée du 3 février 1989 « Compagnie\n Alitalia ». Quand c'est le cas, la réponse porte un champ\n `avertissement` et un champ `homonymes` listant les autres décisions du\n même numéro. **Ne jamais conclure d'une seule réponse qu'un arrêt\n n'existe pas** : lire `homonymes`, et désambiguïser en citant toujours\n la date et la formation (« Ass., 3 février 1989, n° 74052 »).\n\n Args:\n numero: numéro de pourvoi (ex : \"497566\", \"358109\")\n\n Returns:\n Décision avec métadonnées — plus `homonymes` et `avertissement` si\n d'autres décisions portent le même numéro. Ou dict d'erreur\n structuré `{error, error_category: \"not_found\"}` si introuvable\n dans les deux bases.\n ",
"inputSchema": {
"properties": {
"numero": {
"description": "numéro de pourvoi (ex : \"497566\", \"358109\")",
"title": "Numero",
"type": "string"
}
},
"required": [
"numero"
],
"title": "get_ce_decisionArguments",
"type": "object"
},
"name": "get_ce_decision",
"outputSchema": {
"additionalProperties": true,
"title": "get_ce_decisionDictOutput",
"type": "object"
}
},
{
"description": "Extraction du texte intégral d'une décision de la Cour européenne des\n droits de l'homme sur la base de son identifiant système (itemid HUDOC).\n\n Args:\n decision_id: itemid HUDOC (ex : \"001-249914\")\n\n Returns:\n Décision avec `full_text`, ou dict d'erreur structuré\n `{error, error_category: \"not_found\"}` si l'itemid est inconnu.\n ",
"inputSchema": {
"properties": {
"decision_id": {
"default": "",
"description": "itemid HUDOC (ex : \"001-249914\")",
"title": "Decision Id",
"type": "string"
},
"id": {
"default": "",
"description": "Alias de l'identifiant de la décision (même valeur que decision_id).",
"title": "Id",
"type": "string"
}
},
"title": "get_decision_cedhArguments",
"type": "object"
},
"name": "get_decision_cedh",
"outputSchema": {
"additionalProperties": true,
"title": "get_decision_cedhDictOutput",
"type": "object"
}
},
{
"description": "Extraction du texte intégral d'une décision de la Cour de justice de\n l'Union européenne sur la base de son identifiant normalisé (CELEX).\n\n Seuls les identifiants CELEX sont acceptés — un ECLI seul ne suffit\n pas : retrouver d'abord le CELEX correspondant via `search_cjue`.\n\n Args:\n decision_id: identifiant CELEX (ex : \"62024CJ0072\")\n\n Returns:\n Décision avec `full_text`, ou dict d'erreur structuré\n `{error, error_category: \"not_found\"}` si le CELEX est inconnu.\n ",
"inputSchema": {
"properties": {
"decision_id": {
"default": "",
"description": "identifiant CELEX (ex : \"62024CJ0072\")",
"title": "Decision Id",
"type": "string"
},
"id": {
"default": "",
"description": "Alias de l'identifiant de la décision (même valeur que decision_id).",
"title": "Id",
"type": "string"
}
},
"title": "get_decision_cjueArguments",
"type": "object"
},
"name": "get_decision_cjue",
"outputSchema": {
"additionalProperties": true,
"title": "get_decision_cjueDictOutput",
"type": "object"
}
},
{
"description": "Extraction du texte intégral d'une décision judiciaire via l'API\n restreinte PISTE (authentification OAuth2 requise).\n\n À substituer systématiquement par `get_decision_judiciaire_libre`\n lorsque la décision figure dans les archives ouvertes de la DILA.\n\n Outil formellement inopérant pour les décisions relevant de l'ordre\n administratif (formats `DCE_*`, `DTA_*`, `DCAA_*`, `/Ariane_Web/...`).\n\n Authentification (les identifiants PISTE ne transitent JAMAIS par la\n conversation) : `session_token` obtenu sur\n justicelibre.org/tutoriel-piste.html, ou variables d'environnement\n PISTE_CLIENT_ID / PISTE_CLIENT_SECRET côté serveur (auto-hébergement).\n\n Args:\n decision_id: identifiant Judilibre de la décision\n session_token: jeton justicelibre temporaire (recommandé)\n ",
"inputSchema": {
"properties": {
"decision_id": {
"default": "",
"description": "identifiant Judilibre de la décision",
"title": "Decision Id",
"type": "string"
},
"id": {
"default": "",
"description": "Alias de l'identifiant de la décision (même valeur que decision_id).",
"title": "Id",
"type": "string"
},
"session_token": {
"default": "",
"description": "jeton justicelibre temporaire (recommandé)",
"title": "Session Token",
"type": "string"
}
},
"title": "get_decision_judiciaireArguments",
"type": "object"
},
"name": "get_decision_judiciaire",
"outputSchema": {
"additionalProperties": true,
"title": "get_decision_judiciaireDictOutput",
"type": "object"
}
},
{
"description": "Extraction du texte intégral d'une décision judiciaire depuis l'index\n indépendant (sans authentification).\n\n Accepte exclusivement les identifiants judiciaires libres (formats\n `JURITEXT*`, `CONSTEXT*`, `JURI*`), tels que retournés par\n `search_judiciaire_libre` (exemples : `\"JURITEXT000042579700\"`,\n `\"CONSTEXT000049574021\"`).\n\n Outil formellement inopérant pour les décisions relevant de l'ordre\n administratif (formats `DCE_*`, `DTA_*`, `DCAA_*`, `/Ariane_Web/...`).\n\n Args:\n decision_id: identifiant JURITEXT/JURI/CONSTEXT de la décision\n ",
"inputSchema": {
"properties": {
"decision_id": {
"default": "",
"description": "identifiant JURITEXT/JURI/CONSTEXT de la décision",
"title": "Decision Id",
"type": "string"
},
"id": {
"default": "",
"description": "Alias de l'identifiant de la décision (même valeur que decision_id).",
"title": "Id",
"type": "string"
}
},
"title": "get_decision_judiciaire_libreArguments",
"type": "object"
},
"name": "get_decision_judiciaire_libre",
"outputSchema": {
"additionalProperties": true,
"title": "get_decision_judiciaire_libreDictOutput",
"type": "object"
}
},
{
"description": "Extraction du texte intégral d'une décision relevant de l'ordre\n administratif (Conseil d'État, TA, CAA).\n\n Identifiants acceptés :\n - `DCE_XXX_YYYYMMDD` (CE), `DTA_XXX_YYYYMMDD` (TA),\n `DCAA_XXX_YYYYMMDD` (CAA) — extraction depuis le bulk JADE local.\n - `CETATEXT…` (id Légifrance/CETA renvoyé par `search_admin`) — lookup\n direct dans le bulk JADE local, texte intégral inclus.\n - `/Ariane_Web/AW_DCE/|XXXXXX` (ou abrégé `|XXXXXX`) — récupération EN\n DIRECT du texte intégral via le plugin Sinequa du Conseil d'État.\n Fonctionne pour toute décision ArianeWeb, y compris hors bulk JADE.\n\n INCOMPATIBILITÉS MAJEURES :\n - Identifiants JURITEXT — rediriger vers `get_decision_judiciaire_libre`\n ou `get_decision_judiciaire`.\n - Identifiants CELEX `6XXXXCJXXXX` — rediriger vers `get_decision_cjue`.\n - Identifiants HUDOC `001-XXXXXX` — rediriger vers `get_decision_cedh`.\n\n Args:\n decision_id: identifiant de la décision (avec ou sans suffixe .xml)\n\n Returns:\n Dict comportant les métadonnées complètes, `texte_integral` (booléen :\n ⚠️ quand il vaut false, `full_text` n'est QUE le sommaire du Centre de\n documentation — 68 % des décisions administratives d'avant 1990 n'ont\n pas de texte dans la source ouverte ; `note_texte` le dit en clair ;\n ne jamais citer ce champ comme un extrait de la décision) et `full_text` (texte\n intégral). Si la décision est introuvable, dict d'erreur structuré\n `{error, error_category: \"not_found\", retryable}` avec les tools\n alternatifs à essayer.\n ",
"inputSchema": {
"properties": {
"decision_id": {
"default": "",
"description": "identifiant de la décision (avec ou sans suffixe .xml)",
"title": "Decision Id",
"type": "string"
},
"id": {
"default": "",
"description": "Alias de l'identifiant de la décision (même valeur que decision_id).",
"title": "Id",
"type": "string"
}
},
"title": "get_decision_textArguments",
"type": "object"
},
"name": "get_decision_text",
"outputSchema": {
"additionalProperties": true,
"title": "get_decision_textDictOutput",
"type": "object"
}
},
{
"description": "Texte intégral d'un avis ou document de doctrine, par son `id`\n (forme `source:doc_id`, ex. `cada:20230456`, `ariane_crp:220`) tel que\n rendu par `search_doctrine`. Renvoie titre, date, administration, sujet,\n contenu intégral et l'URL officielle (`source_url`) à citer.\n ",
"inputSchema": {
"properties": {
"doc_id": {
"description": "Identifiant du document, tel que renvoyé par la recherche correspondante.",
"title": "Doc Id",
"type": "string"
}
},
"required": [
"doc_id"
],
"title": "get_doctrine_documentArguments",
"type": "object"
},
"name": "get_doctrine_document",
"outputSchema": {
"additionalProperties": true,
"title": "get_doctrine_documentDictOutput",
"type": "object"
}
},
{
"description": "Renvoie le texte d'un article de loi à une date donnée (ou version\n actuelle si `date` vide).\n\n Particularité justicelibre : quand une décision de 1992 cite\n l'article 1128 du Code civil, l'article a été totalement réécrit en\n 2016. Avec ce tool on récupère le texte **tel qu'il existait en 1992**\n (l'ancienne version napoléonienne), pas le texte actuel.\n\n Codes/textes supportés : ~110 sigles courts — les grands codes (CC, CP,\n CPC, CPP, CT, CSP, CJA, CRPA, CSS, COJ, CGFP, LPF, CSI, CSport…), la\n Constitution (CONST), des lois non codifiées (LIL, LO58, L2005-102) et\n 29 codes historiques (CP1810, CPC1807, CTACAA, CNat…).\n Liste complète : resource `justicelibre://codes-supportes`. Pour tout\n autre texte (loi, ordonnance, décret), passer un identifiant\n LEGITEXT/JORFTEXT direct — `resolve_law_number()` le trouve depuis un\n numéro (\"78-17\" → JORFTEXT…).\n\n Args:\n code: code court (ex : \"CC\" pour Code civil, \"CT\" pour Code du travail)\n num: numéro de l'article (ex : \"1128\", \"L1152-1\", \"132-1\")\n date: date ISO YYYY-MM-DD (optionnel — si absent, version en vigueur).\n Utiliser la date de la décision citante pour obtenir la\n version contemporaine de la citation.\n\n Returns:\n dict avec `legiarti`, `num`, `code`, `titre_texte`, `texte`, `etat`,\n `date_debut`, `date_fin`, `nota`. Un champ `note` est ajouté quand\n l'entrepôt ne trouve aucune version couvrant la date et retombe sur\n une autre ; son absence ne garantit pas que la version servie soit\n celle de Légifrance (des versions reportées par la DILA peuvent\n être servies à tort, audit du 2 octobre 2026).\n\n Valeurs de `etat` (vocabulaire de la DILA ; l'état en base peut être\n en retard sur Légifrance, audit du 2 octobre 2026) :\n · VIGUEUR : version en vigueur ;\n · VIGUEUR_DIFF : version à entrée en vigueur différée (date de\n début future au moment de sa publication) ;\n · MODIFIE : version remplacée par une version ultérieure ;\n · MODIFIE_MORT_NE : version modifiée avant d'être jamais entrée en\n vigueur ;\n · ABROGE : article abrogé, plus applicable ;\n · ABROGE_DIFF : abrogation programmée à une date future ;\n · PERIME : texte arrivé à son terme (disposition temporaire) ;\n · TRANSFERE : article déplacé sous un autre numéro ou texte ;\n · ANNULE : article annulé par une juridiction.\n\n `titre_texte` est le titre du TEXTE parent (« Code civil ») ;\n `titre_section` est le dernier niveau du plan du code (« Chapitre Ier :\n La responsabilité extracontractuelle en général »), servi depuis la\n ré-ingestion du 10 septembre 2026 (colonne `hierarchie`). Il peut être\n PÉRIMÉ (intitulé d'avant une réforme du texte : 7 articles sur 60\n contrôlés le 2 octobre 2026) : le vérifier avant de le citer. Le plan\n complet (partie / livre / titre / chapitre / section) n'est pas encore\n servi : ne pas l'inventer, renvoyer vers Légifrance s'il est demandé.\n ",
"inputSchema": {
"properties": {
"code": {
"description": "code court (ex : \"CC\" pour Code civil, \"CT\" pour Code du travail)",
"title": "Code",
"type": "string"
},
"date": {
"default": "",
"description": "date ISO YYYY-MM-DD (optionnel — si absent, version en vigueur). Utiliser la date de la décision citante pour obtenir la version contemporaine de la citation.",
"title": "Date",
"type": "string"
},
"num": {
"description": "numéro de l'article (ex : \"1128\", \"L1152-1\", \"132-1\")",
"title": "Num",
"type": "string"
}
},
"required": [
"code",
"num"
],
"title": "get_law_articleArguments",
"type": "object"
},
"name": "get_law_article",
"outputSchema": {
"additionalProperties": true,
"title": "get_law_articleDictOutput",
"type": "object"
}
},
{
"description": "Carte d'un article de loi : ses rédactions successives et tous les\n textes qui gravitent autour (c'est la page « carte » de justicelibre.org).\n\n Pour chaque rédaction de l'article : le texte qui l'a créée ou modifiée,\n et les textes qui le CITENT (autres codes, lois, décrets, arrêtés), d'après\n les liens de la base LEGI de la DILA. En plus : les arrêtés et décrets\n qui CITENT l'article (`vise`) ou appartiennent à la chaîne de ces arrêtés,\n avec leur état et les textes qui les ont modifiés ou abrogés\n (`succession` ; `abroge_partiel` = seuls certains articles du texte\n sont abrogés, il reste en vigueur). ⚠ Citer n'est pas appliquer : un décret listé peut\n seulement mentionner l'article (ex. décret 55-22 pour 751 CPC) ; lire son\n visa avant de le présenter comme « pris pour » l'article.\n\n Usage typique : « quels textes réglementaires appliquent l'article\n L. 1152-1 du Code du travail ? », « qu'est-ce qui renvoie à 1240 CC ? »,\n « cet arrêté d'application est-il encore en vigueur ? ».\n\n Limites : les liens sont ceux que la DILA a saisis (un renvoi non saisi\n n'apparaît pas). Les textes des rédactions ne sont pas renvoyés ici :\n utiliser get_law_article / get_law_versions. La construction est bornée\n (`meta.tronque` non vide = carte incomplète) ; `meta.liens_non_resolus_ids`\n nomme les textes cités que la base LEGI ne sait pas rattacher.\n\n Args:\n code: sigle court (« CC », « CT », « CPC »…, voir get_law_article) ou\n identifiant LEGITEXT/JORFTEXT direct.\n num: numéro de l'article (« 1240 », « L1152-1 »).\n\n Returns:\n dict avec `code`, `num`, `url` (la carte sur justicelibre.org),\n `versions` (par rédaction : `legiarti`, `etat`, `date_debut`,\n `date_fin`, `liens` = [{type, sens, libelle, legitext}] — sens\n « cible » = l'autre texte pointe vers cet article, « source » = cet\n article pointe vers l'autre ; les textes signés après la fin d'une\n rédaction sont retirés de ses liens), `arretes` et `decrets` liés,\n `succession` [{de, vers, type}], `meta`.\n ",
"inputSchema": {
"properties": {
"code": {
"description": "sigle court (« CC », « CT », « CPC »…, voir get_law_article) ou identifiant LEGITEXT/JORFTEXT direct.",
"title": "Code",
"type": "string"
},
"num": {
"description": "numéro de l'article (« 1240 », « L1152-1 »).",
"title": "Num",
"type": "string"
}
},
"required": [
"code",
"num"
],
"title": "get_law_landscapeArguments",
"type": "object"
},
"name": "get_law_landscape",
"outputSchema": {
"additionalProperties": true,
"title": "get_law_landscapeDictOutput",
"type": "object"
}
},
{
"description": "Renvoie toutes les versions historiques d'un article de loi, du plus\n ancien au plus récent.\n\n Utile pour construire une \"timeline\" de l'article et comprendre son\n évolution (ex : un article modifié en 1964, 1994, 2016 aura 3-4 lignes\n avec `date_debut`, `date_fin`, `etat`, `texte` distincts).\n\n Args:\n code: sigle court (voir get_law_article, liste complète dans la\n resource `justicelibre://codes-supportes`) ou identifiant\n LEGITEXT/JORFTEXT direct, comme pour get_law_article (accepté\n depuis le 2 octobre 2026). Pour un identifiant direct,\n `code_long` vaut null.\n num: numéro de l'article\n\n Returns:\n dict avec `code`, `code_long`, `num`, `count`, `versions`\n (liste ordonnée par `date_debut` ascendante).\n ",
"inputSchema": {
"properties": {
"code": {
"description": "sigle court (voir get_law_article, liste complète dans la resource `justicelibre://codes-supportes`) ou identifiant LEGITEXT/JORFTEXT direct, comme pour get_law_article (accepté depuis le 2 octobre 2026). Pour un identifiant direct, `code_long` vaut null.",
"title": "Code",
"type": "string"
},
"num": {
"description": "numéro de l'article",
"title": "Num",
"type": "string"
}
},
"required": [
"code",
"num"
],
"title": "get_law_versionsArguments",
"type": "object"
},
"name": "get_law_versions",
"outputSchema": {
"additionalProperties": true,
"title": "get_law_versionsDictOutput",
"type": "object"
}
},
{
"description": "Travaux préparatoires d'une loi : le dossier législatif (Assemblée et\n Sénat), ses étapes datées et les liens vers les pages officielles où\n lire rapports, amendements et débats.\n\n Couverture : dossiers de l'Assemblée nationale des XVIe et XVIIe\n législatures (depuis juin 2022) et lois promulguées recensées par le\n Sénat (plus anciennes, sans le détail des étapes). Données ouvertes de\n l'Assemblée et du Sénat, reconstruites régulièrement (`genere_le`).\n Le contenu des rapports et des débats n'est pas servi : suivre `an` /\n `senat`.\n\n Args:\n query: mots du titre (« fin de vie », « réseaux sociaux mineurs »),\n identifiant de dossier (« DLR5L17N51670 ») ou NOR.\n loi: numéro de loi promulguée (« 2026-794 »). Prioritaire sur query.\n limit: nombre de dossiers (défaut 5, max 20).\n etapes: inclure les étapes (défaut True ; False pour une liste légère).\n\n Returns:\n dict avec `total`, `dossiers` [{id, titre, type, loi, prom (date de\n promulgation), cc (décision du Conseil constitutionnel), nor, an,\n senat, etapes [[date, lecture, acte, résultat]]}], `genere_le`.\n ",
"inputSchema": {
"properties": {
"etapes": {
"default": true,
"description": "inclure les étapes (défaut True ; False pour une liste légère).",
"title": "Etapes",
"type": "boolean"
},
"limit": {
"default": 5,
"description": "nombre de dossiers (défaut 5, max 20).",
"title": "Limit",
"type": "integer"
},
"loi": {
"default": "",
"description": "numéro de loi promulguée (« 2026-794 »). Prioritaire sur query.",
"title": "Loi",
"type": "string"
},
"query": {
"default": "",
"description": "mots du titre (« fin de vie », « réseaux sociaux mineurs »), identifiant de dossier (« DLR5L17N51670 ») ou NOR.",
"title": "Query",
"type": "string"
}
},
"title": "get_travaux_preparatoiresArguments",
"type": "object"
},
"name": "get_travaux_preparatoires",
"outputSchema": {
"additionalProperties": true,
"title": "get_travaux_preparatoiresDictOutput",
"type": "object"
}
},
{
"description": "Référentiel exhaustif des codes juridictionnels.\n\n Restitue les 51 instances couvertes (Conseil d'État, 9 CAA, 40 TA,\n incluant les juridictions d'outre-mer) accompagnées de leur nomenclature\n canonique.\n\n Ces codes sont acceptés par `search_admin(juridiction=…)`,\n `get_admin_decision(juridiction=…)` et `search_admin_recent`. Les noms\n complets et les formes courtes (« TA Lille », « CAA Douai ») le sont\n aussi. S'y ajoutent, dans le bulk JADE seulement : `TC` (Tribunal des\n conflits, 1 831 décisions) et `CDBF` (Cour de discipline budgétaire et\n financière, 68).\n ",
"inputSchema": {
"properties": {},
"title": "list_juridictionsArguments",
"type": "object"
},
"name": "list_juridictions",
"outputSchema": {
"additionalProperties": true,
"title": "list_juridictionsDictOutput",
"type": "object"
}
},
{
"description": "Résout un numéro de loi/ordonnance/décret vers son identifiant LEGITEXT\n ou JORFTEXT Légifrance.\n\n Utile pour les textes non codifiés (lois, ordonnances, décrets) qui ne\n sont pas dans la liste des ~110 sigles courts (CC, CP, COJ, LIL, etc. — resource `justicelibre://codes-supportes`).\n Une fois le LEGITEXT/JORFTEXT résolu, on peut l'utiliser avec\n `get_law_article(code=<LEGITEXT>, num=<N>)` pour récupérer un article\n spécifique.\n\n Exemples :\n - `resolve_law_number(\"68-1250\")` → loi relative à la prescription des\n créances sur l'État, les départements, les communes et les\n établissements publics (LEGITEXT000006068317)\n - `resolve_law_number(\"79-587\")` → loi motivation des actes admin\n - `resolve_law_number(\"2000-321\")` → loi droits citoyens face à l'admin\n\n Args:\n numero: format \"YY-NNNN\" ou \"YYYY-NNNN\" (ex: \"68-1250\", \"2000-321\")\n\n Returns:\n `{numero, legitext, titre_texte, date_debut, articles_count, source_url}`\n ou `{error}` si introuvable.\n ",
"inputSchema": {
"properties": {
"numero": {
"description": "format \"YY-NNNN\" ou \"YYYY-NNNN\" (ex: \"68-1250\", \"2000-321\")",
"title": "Numero",
"type": "string"
}
},
"required": [
"numero"
],
"title": "resolve_law_numberArguments",
"type": "object"
},
"name": "resolve_law_number",
"outputSchema": {
"additionalProperties": true,
"title": "resolve_law_numberDictOutput",
"type": "object"
}
},
{
"description": "Recherche pondérée par pertinence BM25 sur la jurisprudence\n administrative complète (Conseil d'État + Tribunal des conflits + 9 CAA + 40 TA — pour le TC, filtrer avec juridiction=\"conflits\").\n\n Source : bulk JADE DILA (~570 k décisions full text). Contrairement aux\n outils `search_admin_recent*` qui trient par date, celui-ci classe par\n pertinence sémantique des mots-clés. Indispensable pour trouver LES\n bonnes décisions sur un sujet sans dépendre de l'ancienneté.\n\n ⚠️ **Si tu cherches par numéro de requête (7 chiffres ex: 2200433)**,\n utilise plutôt `get_admin_decision(numero, juridiction=...)` qui fait\n un lookup SQL exact. La recherche FTS5 d'un numéro court ne le trouve\n que dans les décisions qui le **citent** dans leur texte (ex: décision\n de cassation), pas la décision identifiée par ce numéro.\n\n Args:\n query: mots-clés (opérateurs FTS5 : AND/OR/NOT, \"phrase exacte\", mot*)\n juridiction: filtre d'ORIGINE (depuis le 8 septembre 2026). Accepte\n un code (`CE`, `CAA59`, `TA69`, `TC`), un nom complet (« Tribunal\n administratif de Lille ») ou une forme courte (« TA Lille »,\n « CAA Douai »). La base écrit la même cour de plusieurs façons\n (« CAA de LYON », « Cour administrative d'appel de Lyon »…) : le\n filtre les couvre toutes, et ne renvoie QUE des décisions rendues\n par cette juridiction. La réponse porte `juridiction_filtre`\n quand le filtre est actif. ⚠️ Valeur NON reconnue (une ville nue\n « Lyon », une faute de frappe) : elle est alors ajoutée comme\n mot-clé à la requête — les décisions qui la CITENT remontent\n aussi — et la réponse le dit dans `note`. Codes : `list_juridictions`.\n sort: \"relevance\" (défaut, BM25) ou \"date_desc\" / \"date_asc\"\n date_min: limite inférieure ISO YYYY-MM-DD (optionnel)\n date_max: limite supérieure ISO YYYY-MM-DD (optionnel)\n limit: nombre de résultats (défaut 20, max 50)\n offset: pagination\n\n Returns:\n {\"total\", \"returned\", \"decisions\": [...]} avec extracts BM25.\n ",
"inputSchema": {
"properties": {
"date_max": {
"default": "",
"description": "limite supérieure ISO YYYY-MM-DD (optionnel)",
"title": "Date Max",
"type": "string"
},
"date_min": {
"default": "",
"description": "limite inférieure ISO YYYY-MM-DD (optionnel)",
"title": "Date Min",
"type": "string"
},
"juridiction": {
"default": "",
"description": "filtre d'ORIGINE (depuis le 8 septembre 2026). Accepte un code (`CE`, `CAA59`, `TA69`, `TC`), un nom complet (« Tribunal administratif de Lille ») ou une forme courte (« TA Lille », « CAA Douai »). La base écrit la même cour de plusieurs façons (« CAA de LYON », « Cour administrative d'appel de Lyon »…) : le filtre les couvre toutes, et ne renvoie QUE des décisions rendues par cette juridiction. La réponse porte `juridiction_filtre` quand le filtre est actif. ⚠️ Valeur NON reconnue (une ville nue « Lyon », une faute de frappe) : elle est alors ajoutée comme mot-clé à la requête — les décisions qui la CITENT remontent aussi — et la réponse le dit dans `note`. Codes : `list_juridictions`.",
"title": "Juridiction",
"type": "string"
},
"limit": {
"default": 20,
"description": "nombre de résultats (défaut 20, max 50)",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "pagination",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés (opérateurs FTS5 : AND/OR/NOT, \"phrase exacte\", mot*)",
"title": "Query",
"type": "string"
},
"sort": {
"default": "relevance",
"description": "\"relevance\" (défaut, BM25) ou \"date_desc\" / \"date_asc\"",
"title": "Sort",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_adminArguments",
"type": "object"
},
"name": "search_admin",
"outputSchema": {
"additionalProperties": true,
"title": "search_adminDictOutput",
"type": "object"
}
},
{
"description": "Décisions admin **récentes** triées chronologiquement (API live).\n\n Priorité au récent : tri par date de lecture décroissante, pas par\n pertinence. Utile pour \"actualité d'une juridiction\" mais PAS pour\n trouver la jurisprudence pertinente sur un sujet — pour cela, utiliser\n `search_admin` (bulk JADE avec BM25 ranking).\n\n Périmètre : CE + 9 CAA + 40 TA (incluant l'outre-mer), depuis ~2022.\n\n Les identifiants générés (formats `DCE_*`, `DTA_*`, `DCAA_*`) sont\n nativement compatibles avec l'outil `get_decision_text`.\n\n Args:\n query: mots-clés de recherche\n juridiction: code de la juridiction. Exemples :\n - \"CE\" — Conseil d'État\n - \"CE-CAA\" — Conseil d'État + cours administratives d'appel\n - \"TA69\" — Tribunal administratif de Lyon\n - \"TA75\" — Tribunal administratif de Paris\n - \"CAA69\" — Cour administrative d'appel de Lyon\n Les codes \"TA\" ou \"CAA\" isolés retournent un résultat vide —\n un code spécifique est requis. Consulter `list_juridictions`\n pour la nomenclature complète.\n limit: nombre maximum de résultats (défaut 20)\n ",
"inputSchema": {
"properties": {
"juridiction": {
"default": "CE",
"description": "code de la juridiction. Exemples : - \"CE\" — Conseil d'État - \"CE-CAA\" — Conseil d'État + cours administratives d'appel - \"TA69\" — Tribunal administratif de Lyon - \"TA75\" — Tribunal administratif de Paris - \"CAA69\" — Cour administrative d'appel de Lyon Les codes \"TA\" ou \"CAA\" isolés retournent un résultat vide — un code spécifique est requis. Consulter `list_juridictions` pour la nomenclature complète.",
"title": "Juridiction",
"type": "string"
},
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20)",
"title": "Limit",
"type": "integer"
},
"query": {
"description": "mots-clés de recherche",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_admin_recentArguments",
"type": "object"
},
"name": "search_admin_recent",
"outputSchema": {
"additionalProperties": true,
"title": "search_admin_recentDictOutput",
"type": "object"
}
},
{
"description": "Requête simultanée de l'ensemble des 9 Cours Administratives d'Appel.\n\n Fusion et tri chronologique des résultats par date de lecture.\n\n Args:\n query: mots-clés de recherche\n limit_per_court: résultats par cour (défaut 5, soit jusqu'à 45\n résultats au total)\n total_limit: plafond global après fusion (0 = aucun plafond).\n ",
"inputSchema": {
"properties": {
"limit_per_court": {
"default": 5,
"description": "résultats par cour (défaut 5, soit jusqu'à 45 résultats au total)",
"title": "Limit Per Court",
"type": "integer"
},
"query": {
"description": "mots-clés de recherche",
"title": "Query",
"type": "string"
},
"total_limit": {
"default": 0,
"description": "plafond global après fusion (0 = aucun plafond).",
"title": "Total Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "search_admin_recent_all_caaArguments",
"type": "object"
},
"name": "search_admin_recent_all_caa",
"outputSchema": {
"additionalProperties": true,
"title": "search_admin_recent_all_caaDictOutput",
"type": "object"
}
},
{
"description": "Requête simultanée de l'ensemble des 40 Tribunaux Administratifs.\n\n Fusionne et trie chronologiquement (date de lecture décroissante) les\n résultats issus du territoire national. Pertinent pour cartographier\n rapidement les éventuelles divergences d'appréciation territoriale sur\n une même question de droit.\n\n Args:\n query: mots-clés de recherche\n limit_per_court: nombre de résultats par tribunal (défaut 5, soit\n jusqu'à 200 résultats totaux avant application de `total_limit`)\n total_limit: plafond global après fusion (défaut 60 ; 0 = aucun\n plafond). Si positif, tronque la liste fusionnée aux N entrées\n les plus récentes.\n\n Returns:\n Dict comportant `per_court_totals` (nombre de hits par TA),\n `decisions` (liste fusionnée triée chronologiquement) et les\n éventuelles `errors`.\n ",
"inputSchema": {
"properties": {
"limit_per_court": {
"default": 5,
"description": "nombre de résultats par tribunal (défaut 5, soit jusqu'à 200 résultats totaux avant application de `total_limit`)",
"title": "Limit Per Court",
"type": "integer"
},
"query": {
"description": "mots-clés de recherche",
"title": "Query",
"type": "string"
},
"total_limit": {
"default": 60,
"description": "plafond global après fusion (défaut 60 ; 0 = aucun plafond). Si positif, tronque la liste fusionnée aux N entrées les plus récentes.",
"title": "Total Limit",
"type": "integer"
}
},
"required": [
"query"
],
"title": "search_admin_recent_all_taArguments",
"type": "object"
},
"name": "search_admin_recent_all_ta",
"outputSchema": {
"additionalProperties": true,
"title": "search_admin_recent_all_taDictOutput",
"type": "object"
}
},
{
"description": "Recherche fédérée sur toutes les sources, par ENTRELACEMENT.\n\n Tool ONE-STOP quand on ne sait pas où chercher : interroge en parallèle\n les sources locales (DILA judic, JADE admin, LEGI, CEDH, CJUE).\n\n ⚠️ **Il n'y a pas de score global, et c'est délibéré.** Les scores BM25\n ne sont pas comparables d'une source à l'autre : la rareté d'un mot est\n calculée sur chaque corpus séparément, si bien qu'un même terme n'a pas\n le même poids dans 76 000 arrêts CEDH et dans 1,5 M de décisions\n judiciaires. Les résultats sont donc ENTRELACÉS — le 1er de chaque\n source, puis le 2e de chaque source, etc., les sources les plus faisant\n autorité en tête à rang égal. L'ordre interne de chaque source est\n préservé, et aucune source ne peut être affamée par une autre.\n\n Un champ `score` valant 1.0 était renvoyé pour tous les résultats : il\n ne mesurait rien et laissait croire à un tri par pertinence. Supprimé le\n 30 août 2026. Pour connaître la position d'un résultat DANS sa source,\n lire `source_rank` (0 = le mieux classé par cette source).\n\n ⚠️ **AND implicite** : tous les termes sont exigés simultanément. Une\n question rédigée en langage naturel (10 mots et plus) renverra\n fréquemment 0 sur les fonds français. Préférer 2 à 5 mots distinctifs.\n\n Args:\n query: mots-clés (ou phrase). Si `expand_synonyms=True` (défaut),\n les termes du thésaurus juridique FR sont automatiquement\n étendus à leurs équivalents (ex: \"harcèlement\" → aussi\n \"intimidation\", \"vexation morale\", etc.). Les mots trop courants\n du vocabulaire juridique (« État », « justice », « droit »,\n « responsabilité »…) ne sont PAS étendus : leurs « synonymes »\n de thésaurus sont des rubriques de classement, pas des\n équivalents, et ils noyaient les termes porteurs de sens.\n sources: liste optionnelle parmi [\"dila\", \"jade\", \"legi\", \"cedh\",\n \"cjue\"]. None = toutes.\n sort: \"relevance\" (défaut) ou \"date_desc\"\n date_min, date_max: ISO YYYY-MM-DD\n limit: nombre de résultats fusionnés (défaut 30, max 100 ; chaque\n source locale plafonne à 50 résultats par appel)\n expand_synonyms: active le thésaurus (défaut True)\n\n Returns:\n dict {\"query_expanded\", \"per_source_counts\", \"results\": [...]}.\n `per_source_counts` ne compte que les sources ayant répondu ; si\n une source est en panne, elle est détaillée dans `source_errors`\n et un `warning` signale des résultats potentiellement incomplets.\n `truncated: true` + `note` signalent que la fusion dépasse `limit`.\n ",
"inputSchema": {
"properties": {
"date_max": {
"default": "",
"description": "Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne.",
"title": "Date Max",
"type": "string"
},
"date_min": {
"default": "",
"description": "Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne.",
"title": "Date Min",
"type": "string"
},
"expand_synonyms": {
"default": true,
"description": "active le thésaurus (défaut True)",
"title": "Expand Synonyms",
"type": "boolean"
},
"limit": {
"default": 30,
"description": "nombre de résultats fusionnés (défaut 30, max 100 ; chaque source locale plafonne à 50 résultats par appel)",
"title": "Limit",
"type": "integer"
},
"query": {
"description": "mots-clés (ou phrase). Si `expand_synonyms=True` (défaut), les termes du thésaurus juridique FR sont automatiquement étendus à leurs équivalents (ex: \"harcèlement\" → aussi \"intimidation\", \"vexation morale\", etc.). Les mots trop courants du vocabulaire juridique (« État », « justice », « droit », « responsabilité »…) ne sont PAS étendus : leurs « synonymes » de thésaurus sont des rubriques de classement, pas des équivalents, et ils noyaient les termes porteurs de sens.",
"title": "Query",
"type": "string"
},
"sort": {
"default": "relevance",
"description": "\"relevance\" (défaut) ou \"date_desc\" date_min, date_max: ISO YYYY-MM-DD",
"title": "Sort",
"type": "string"
},
"sources": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "liste optionnelle parmi [\"dila\", \"jade\", \"legi\", \"cedh\", \"cjue\"]. None = toutes.",
"title": "Sources"
}
},
"required": [
"query"
],
"title": "search_allArguments",
"type": "object"
},
"name": "search_all",
"outputSchema": {
"additionalProperties": true,
"title": "search_allDictOutput",
"type": "object"
}
},
{
"description": "Recherche dans l'annuaire agrégé des adresses électroniques publiques\n des juridictions et administrations françaises.\n\n Agrège 3 sources hébergées sur justicelibre.org (~75 000 adresses\n fonctionnelles publiques, sous Licence Ouverte 2.0) :\n - dump quotidien DILA (services locaux : juridictions, mairies, sous-préf, etc.)\n - API `api-lannuaire.service-public.fr` (administrations centrales)\n - annuaire CADA (PRADA - personnes responsables L. 330-1 CRPA)\n - PDFs gouvernementaux scrapés (adresses inédites : bureaux internes,\n cabinets, écoles, DASEN, etc. absents des annuaires officiels)\n\n Recherche : substring case-insensitive sur mail, organisme et service.\n Cette version alpha ne fait pas de BM25 : classement par pertinence\n simple (match mail > organisme > service).\n\n Args:\n query: mots-clés (ex : \"mairie strasbourg\", \"dsden nord\", \"dacs-c3\",\n \"greffe caa douai\", \"prada culture\")\n category: filtre catégorie (ex : \"mairie\", \"bav\", \"ecole\", \"cour_appel\",\n \"dacs\", \"prada\", \"administration_centrale\")\n source: filtre origine (\"dila\", \"api\", \"prada\", \"pdf\", \"manuel\")\n limit: nombre maximum de résultats (défaut 20, max 200)\n\n Returns:\n dict avec `total` (matches totaux), `returned`, `results` (liste de\n dicts {mail, organisme, service, categorie, source, tel, site,\n adresse, date_source, url_page}). Les entrées issues de PDF scrapés\n (`source: \"pdf\"`) portent en plus la traçabilité complète :\n `role`, `source_url` (document officiel d'origine), `source_label`,\n `source_page` (page du PDF), `preuve_url` (copie archivée sur\n justicelibre.org/preuves/ — à citer si l'original a disparu).\n ",
"inputSchema": {
"properties": {
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "filtre catégorie (ex : \"mairie\", \"bav\", \"ecole\", \"cour_appel\", \"dacs\", \"prada\", \"administration_centrale\")",
"title": "Category"
},
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20, max 200)",
"title": "Limit",
"type": "integer"
},
"query": {
"description": "mots-clés (ex : \"mairie strasbourg\", \"dsden nord\", \"dacs-c3\", \"greffe caa douai\", \"prada culture\")",
"title": "Query",
"type": "string"
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "filtre origine (\"dila\", \"api\", \"prada\", \"pdf\", \"manuel\")",
"title": "Source"
}
},
"required": [
"query"
],
"title": "search_annuaireArguments",
"type": "object"
},
"name": "search_annuaire",
"outputSchema": {
"additionalProperties": true,
"title": "search_annuaireDictOutput",
"type": "object"
}
},
{
"description": "Recherche dédiée au **Conseil constitutionnel** (7 388 décisions).\n\n Quatrième pouvoir juridictionnel français aux côtés de la Cour de cassation,\n du Conseil d'État et de la Cour de justice de la République. Contrôle la\n constitutionnalité des lois (contrôle *a priori* via DC, *a posteriori* via\n QPC) et les élections nationales.\n\n Args:\n query: mots-clés (opérateurs FTS5)\n nature: filtre optionnel par type de décision :\n - \"QPC\" : Question Prioritaire de Constitutionnalité\n (contrôle a posteriori, saisine par justiciable via CE/Cass)\n - \"DC\" : Décision sur conformité de loi ordinaire ou organique\n (contrôle a priori avant promulgation)\n - \"L\" : Lois diverses, délégalisation\n - \"AN\" : Élections législatives, inéligibilités\n - \"SEN\" : Élections sénatoriales\n - \"PDR\" : Élection présidentielle\n - \"ORGA\": Organisation (règlement intérieur, composition)\n - \"REF\" : Référendum\n - \"ELEC\": Autres élections\n - \"I\" : Incompétence\n (si vide, toutes natures confondues)\n date_min, date_max: ISO YYYY-MM-DD\n limit: max 50 (défaut 20)\n offset: pagination\n\n Returns:\n `{\"total\", \"returned\", \"nature_filter\", \"decisions\": [...]}`\n ",
"inputSchema": {
"properties": {
"date_max": {
"default": "",
"description": "Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne.",
"title": "Date Max",
"type": "string"
},
"date_min": {
"default": "",
"description": "Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne.",
"title": "Date Min",
"type": "string"
},
"limit": {
"default": 20,
"description": "max 50 (défaut 20)",
"title": "Limit",
"type": "integer"
},
"nature": {
"default": "",
"description": "filtre optionnel par type de décision : - \"QPC\" : Question Prioritaire de Constitutionnalité (contrôle a posteriori, saisine par justiciable via CE/Cass) - \"DC\" : Décision sur conformité de loi ordinaire ou organique (contrôle a priori avant promulgation) - \"L\" : Lois diverses, délégalisation - \"AN\" : Élections législatives, inéligibilités - \"SEN\" : Élections sénatoriales - \"PDR\" : Élection présidentielle - \"ORGA\": Organisation (règlement intérieur, composition) - \"REF\" : Référendum - \"ELEC\": Autres élections - \"I\" : Incompétence (si vide, toutes natures confondues) date_min, date_max: ISO YYYY-MM-DD",
"title": "Nature",
"type": "string"
},
"offset": {
"default": 0,
"description": "pagination",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés (opérateurs FTS5)",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_ccArguments",
"type": "object"
},
"name": "search_cc",
"outputSchema": {
"additionalProperties": true,
"title": "search_ccDictOutput",
"type": "object"
}
},
{
"description": "Recherche textuelle dans la jurisprudence de la Cour européenne des\n droits de l'homme.\n\n Exploitation de l'index localisé regroupant les ~76 000 documents\n HUDOC francophones (arrêts, décisions, rapports de Chambre, Grande\n Chambre, Comité). Libre d'accès.\n\n Args:\n query: mots-clés (ex : \"article 8 vie familiale\", \"garde à vue\")\n limit: nombre maximum de résultats (défaut 20, max 50)\n offset: décalage pour paginer (défaut 0). Si la réponse contient\n `truncated: true`, réitérer avec `next_offset` pour la suite.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20, max 50)",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "décalage pour paginer (défaut 0). Si la réponse contient `truncated: true`, réitérer avec `next_offset` pour la suite.",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés (ex : \"article 8 vie familiale\", \"garde à vue\")",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_cedhArguments",
"type": "object"
},
"name": "search_cedh",
"outputSchema": {
"additionalProperties": true,
"title": "search_cedhDictOutput",
"type": "object"
}
},
{
"description": "Recherche textuelle dans la jurisprudence de la Cour de justice de\n l'Union européenne.\n\n Exploitation de l'index localisé des décisions de la CJUE, du Tribunal\n de l'UE, des ordonnances et des conclusions des avocats généraux\n (données EUR-Lex). Libre d'accès.\n\n Args:\n query: mots-clés (ex : \"libre circulation capitaux\", \"CJUE C-72/24\")\n limit: nombre maximum de résultats (défaut 20, max 50)\n offset: décalage pour paginer (défaut 0). Si la réponse contient\n `truncated: true`, réitérer avec `next_offset` pour la suite.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20, max 50)",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "décalage pour paginer (défaut 0). Si la réponse contient `truncated: true`, réitérer avec `next_offset` pour la suite.",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés (ex : \"libre circulation capitaux\", \"CJUE C-72/24\")",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_cjueArguments",
"type": "object"
},
"name": "search_cjue",
"outputSchema": {
"additionalProperties": true,
"title": "search_cjueDictOutput",
"type": "object"
}
},
{
"description": "Recherche dans les délibérations de la CNIL.\n\n Source : bulk CNIL (~27 000 délibérations). Utile pour le droit\n des données personnelles, RGPD, traitements algorithmiques.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "Nombre maximum de résultats renvoyés.",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Nombre de résultats à sauter, pour la pagination (0 = première page).",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "Mots-clés de recherche.",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_cnilArguments",
"type": "object"
},
"name": "search_cnil",
"outputSchema": {
"additionalProperties": true,
"title": "search_cnilDictOutput",
"type": "object"
}
},
{
"description": "Recherche sémantique ciblée sur la jurisprudence du Conseil d'État\n (base ArianeWeb, plus de 150 000 décisions).\n\n Moteur exclusif disposant d'un véritable algorithme de pertinence\n (Sinequa) avec extraction de contexte. À privilégier systématiquement\n pour le droit public.\n\n EXTRACTION DU TEXTE : les ids retournés (`/Ariane_Web/AW_DCE/|XXXXXX`)\n sont DÉSORMAIS exploitables directement par `get_decision_text(decision_id=…)`\n (récupération live via le plugin Sinequa).\n\n ⚠️ COUVERTURE : cet index ArianeWeb (Sinequa) couvre MAL les arrêts\n anciens/fondateurs (avant ~1990). Si une recherche ici renvoie 0, NE PAS\n conclure que l'arrêt est absent de JusticeLibre : le bulk JADE\n (`search_admin`) couvre le CE depuis 1873 (Trompier-Gravier 1944, PGD,\n etc. inclus). Et si tu connais déjà l'id Légifrance `CETATEXT…` d'un\n arrêt, `get_decision_text(\"CETATEXT…\")` le sort directement du bulk.\n\n Consigne de recherche : limiter les requêtes à 2-5 mots-clés\n distinctifs ; les requêtes en phrase complète retournent généralement\n zéro résultat.\n\n Args:\n query: mots-clés de recherche (ex : \"référé liberté\", \"QPC 145\")\n limit: nombre maximum de résultats (défaut 20)\n offset: décalage pour paginer (défaut 0). Réitérer avec offset=20,\n offset=40, etc. pour obtenir les pages suivantes.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20)",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "décalage pour paginer (défaut 0). Réitérer avec offset=20, offset=40, etc. pour obtenir les pages suivantes.",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés de recherche (ex : \"référé liberté\", \"QPC 145\")",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_conseil_etatArguments",
"type": "object"
},
"name": "search_conseil_etat",
"outputSchema": {
"additionalProperties": true,
"title": "search_conseil_etatDictOutput",
"type": "object"
}
},
{
"description": "Cherche les décisions qui citent EXPLICITEMENT un article de loi donné.\n\n Exploite l'index FTS5 sur les sources jurisprudence disponibles pour\n matcher les formulations courantes de citation (`\"article 1382 du code\n civil\"`, `\"art. L. 1152-1 du Code du travail\"`, etc.). Cross-référencement\n inverse : partant d'un article, on trouve la jurisprudence pertinente.\n\n **LIMITATION CONNUE** : ce tool trouve UNIQUEMENT les citations explicites\n du numéro d'article. Il ne capte PAS :\n - les références indirectes (\"conformément aux dispositions du Code civil\n relatives à la responsabilité délictuelle…\")\n - les renvois à une section entière sans numéro précis\n - les citations du code par abréviation seule sans article (\"en vertu du CT\")\n Pour une recherche conceptuelle plus large, préférer `search_all` avec\n l'expansion thésaurus (ex: \"harcèlement\" → inclut \"intimidation\" etc.).\n\n Args:\n code: code court de l'article (ex : \"CT\", \"CC\")\n num: numéro de l'article (ex : \"L1152-1\", \"1240\")\n sources: liste optionnelle de sources à interroger parmi\n [\"dila\", \"jade\", \"cedh\", \"cjue\"]. Par défaut : toutes.\n limit: nombre de décisions par source (défaut 20, max 50)\n\n Returns:\n dict `{\"code\", \"num\", \"total\", \"per_source\": {source: count},\n \"decisions\": [{source, id, juridiction, date, title, extract}]}`.\n Si une source est en panne, elle est absente de `per_source` et\n détaillée dans `source_errors` (résultats alors incomplets).\n ",
"inputSchema": {
"properties": {
"code": {
"description": "code court de l'article (ex : \"CT\", \"CC\")",
"title": "Code",
"type": "string"
},
"limit": {
"default": 20,
"description": "nombre de décisions par source (défaut 20, max 50)",
"title": "Limit",
"type": "integer"
},
"num": {
"description": "numéro de l'article (ex : \"L1152-1\", \"1240\")",
"title": "Num",
"type": "string"
},
"sources": {
"anyOf": [
{
"items": {
"type": "string"
},
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "liste optionnelle de sources à interroger parmi [\"dila\", \"jade\", \"cedh\", \"cjue\"]. Par défaut : toutes.",
"title": "Sources"
}
},
"required": [
"code",
"num"
],
"title": "search_decisions_citingArguments",
"type": "object"
},
"name": "search_decisions_citing",
"outputSchema": {
"additionalProperties": true,
"title": "search_decisions_citingDictOutput",
"type": "object"
}
},
{
"description": "Recherche plein texte dans les avis et la doctrine administrative :\n 107 273 documents indexés (BM25).\n\n Sources : `cada` (avis et conseils de la CADA, ~61 000), `ddd` (Défenseur\n des droits : décisions, règlements amiables, rapports, ~15 000),\n `ariane_crp` (conclusions des rapporteurs publics au Conseil d'État,\n ~9 000), `bofip` (commentaires fiscaux, ~5 700), `ctn` (Code du travail\n numérique, ~14 000). Ces fonds étaient en base sans être servis avant le\n 10 septembre 2026.\n\n ⚠️ Ce ne sont PAS des décisions de justice : un avis CADA ou une\n conclusion de rapporteur public ne lie pas le juge. Citer comme tel.\n\n Args:\n query: mots-clés (FTS5 : AND/OR/NOT, \"phrase exacte\", mot*)\n source: filtre optionnel parmi cada, ddd, ariane_crp, bofip, ctn\n limit: max 100\n offset: pagination\n Returns:\n {\"total\", \"returned\", \"results\": [{id, source_id, type, titre, date,\n administration, source_url, extract}]} — `id` (source:doc_id) sert à\n `get_doctrine_document`.\n ",
"inputSchema": {
"properties": {
"limit": {
"default": 20,
"description": "max 100",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "pagination",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés (FTS5 : AND/OR/NOT, \"phrase exacte\", mot*)",
"title": "Query",
"type": "string"
},
"source": {
"default": "",
"description": "filtre optionnel parmi cada, ddd, ariane_crp, bofip, ctn",
"title": "Source",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_doctrineArguments",
"type": "object"
},
"name": "search_doctrine",
"outputSchema": {
"additionalProperties": true,
"title": "search_doctrineDictOutput",
"type": "object"
}
},
{
"description": "Recherche dans le Journal officiel (JORF post-1990).\n\n Source : bulk JORF DILA (1,1 Go). Contient les textes publiés au JO\n non codifiés : lois, décrets, arrêtés, circulaires, ordonnances.\n\n Args:\n query: mots-clés FTS5\n nature: filtre optionnel (\"LOI\", \"DECRET\", \"ARRETE\", \"CIRCULAIRE\"...)\n date_min/date_max: fourchette de publication (ISO)\n limit: max 50\n\n Returns:\n {\"total\", \"returned\", \"textes\": [...]}\n ",
"inputSchema": {
"properties": {
"date_max": {
"default": "",
"description": "Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne.",
"title": "Date Max",
"type": "string"
},
"date_min": {
"default": "",
"description": "Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne.",
"title": "Date Min",
"type": "string"
},
"limit": {
"default": 20,
"description": "max 50",
"title": "Limit",
"type": "integer"
},
"nature": {
"default": "",
"description": "filtre optionnel (\"LOI\", \"DECRET\", \"ARRETE\", \"CIRCULAIRE\"...) date_min/date_max: fourchette de publication (ISO)",
"title": "Nature",
"type": "string"
},
"offset": {
"default": 0,
"description": "Nombre de résultats à sauter, pour la pagination (0 = première page).",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés FTS5",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_jorfArguments",
"type": "object"
},
"name": "search_jorf",
"outputSchema": {
"additionalProperties": true,
"title": "search_jorfDictOutput",
"type": "object"
}
},
{
"description": "Recherche dans la jurisprudence judiciaire via l'API officielle PISTE\n (authentification OAuth2 requise).\n\n Périmètre : Cour de cassation, cours d'appel, tribunaux judiciaires,\n tribunaux de commerce. À n'utiliser qu'en dernier recours ou pour des\n décisions récentes absentes de la base libre DILA, compte tenu de\n l'entrave technique imposée par la Cour de cassation.\n\n Authentification (les identifiants PISTE ne transitent JAMAIS par la\n conversation) :\n 1. `session_token` : jeton temporaire obtenu sur\n justicelibre.org/tutoriel-piste.html (procédé recommandé).\n 2. Auto-hébergement : variables d'environnement PISTE_CLIENT_ID et\n PISTE_CLIENT_SECRET définies côté serveur.\n\n Args:\n query: mots-clés de recherche\n session_token: jeton justicelibre temporaire (obtenu via le\n formulaire du site)\n juridiction: filtre optionnel — \"cc\" (Cour de cassation), \"ca\"\n (cours d'appel), \"tj\" (tribunaux judiciaires), \"tcom\"\n (tribunaux de commerce). Vide = toutes juridictions.\n limit: nombre maximum de résultats (défaut 20, maximum 50)\n ",
"inputSchema": {
"properties": {
"juridiction": {
"default": "",
"description": "filtre optionnel — \"cc\" (Cour de cassation), \"ca\" (cours d'appel), \"tj\" (tribunaux judiciaires), \"tcom\" (tribunaux de commerce). Vide = toutes juridictions.",
"title": "Juridiction",
"type": "string"
},
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20, maximum 50)",
"title": "Limit",
"type": "integer"
},
"query": {
"description": "mots-clés de recherche",
"title": "Query",
"type": "string"
},
"session_token": {
"default": "",
"description": "jeton justicelibre temporaire (obtenu via le formulaire du site)",
"title": "Session Token",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_judiciaireArguments",
"type": "object"
},
"name": "search_judiciaire",
"outputSchema": {
"additionalProperties": true,
"title": "search_judiciaireDictOutput",
"type": "object"
}
},
{
"description": "Recherche plein texte dans la jurisprudence judiciaire, exécutée\n localement et affranchie de toute obligation d'authentification\n gouvernementale.\n\n Exploite l'index FTS5 des archives publiques DILA enrichies par la\n synchronisation quotidienne Judilibre (2 596 246 décisions au 10/09/2026 :\n Cour de cassation 1 092 897, cours d'appel 601 745, tribunaux judiciaires\n 717 756, tribunaux de commerce 175 152, Conseil constitutionnel 7 388).\n Scoring BM25 disponible mais tri appliqué par ordre chronologique décroissant.\n\n **Couverture connue** : la base contient ce que DILA et Judilibre publient\n en open data ; les juridictions du fond (TJ, tribunaux de commerce) y sont\n surtout depuis 2023, la cassation depuis 1805. Tous les arrêts ne sont PAS dans la base ; un faux négatif\n n'implique donc pas que l'arrêt n'existe pas. En cas de bredouille,\n suggérer à l'utilisateur de chercher sur Légifrance ou via PISTE\n (`search_judiciaire`).\n\n **Recherche par numéro de RG** : pour les arrêts CA, utiliser le param\n `numero_rg` (lookup direct, normalise les variantes 21/05835, 21-05835,\n 2105835). Pour les pourvois Cass, utiliser `query` avec le numéro\n (ex: query=\"21-12.345\").\n\n ⚠️ Les résultats ne contiennent qu'un SNIPPET tronqué (`snippet`), pas\n le texte intégral. Pour lire une décision en entier, appeler\n `get_decision_judiciaire_libre(decision_id=…)` avec l'id retourné (formats :\n `JURITEXT*` Cass / cours d'appel historiques, `CONSTEXT*` Conseil\n constitutionnel, id hexadécimal 24 caractères pour les décisions\n synchronisées via Judilibre — TJ, tribunaux de commerce, flux récents).\n Ne pas se fier au snippet seul pour conclure sur le contenu.\n\n Args:\n query: mots-clés (ex : \"licenciement abusif\"). FTS5 supporte\n `\"phrase exacte\"`, `mot1 AND mot2`, `mot*` (préfixe). Optionnel\n si `numero_rg` est fourni.\n juridiction: filtre optionnel : \"cassation\" / \"appel\" / \"tj\" / \"tcom\" / \"constit\".\n `tj` englobe les anciens tribunaux de grande instance et d'instance\n (fusionnés en 2020) ; `tcom` les tribunaux des activités économiques\n (nouveau nom depuis 2025). Toutes les écritures de la base sont\n couvertes (« cc » et « Cour de cassation » désignent la même cour).\n numero_rg: numéro RG d'un arrêt CA (ex: \"21/05835\"). Lookup direct\n qui matche toutes les variantes typographiques.\n date_min: date min ISO (YYYY-MM-DD), optionnel\n date_max: date max ISO (YYYY-MM-DD), optionnel\n limit: nombre maximum de résultats (défaut 20, max 50)\n offset: décalage pour paginer (défaut 0). Si la réponse contient\n `truncated: true`, réitérer avec `next_offset` pour la suite.\n ",
"inputSchema": {
"properties": {
"date_max": {
"default": "",
"description": "date max ISO (YYYY-MM-DD), optionnel",
"title": "Date Max",
"type": "string"
},
"date_min": {
"default": "",
"description": "date min ISO (YYYY-MM-DD), optionnel",
"title": "Date Min",
"type": "string"
},
"juridiction": {
"default": "",
"description": "filtre optionnel : \"cassation\" / \"appel\" / \"tj\" / \"tcom\" / \"constit\". `tj` englobe les anciens tribunaux de grande instance et d'instance (fusionnés en 2020) ; `tcom` les tribunaux des activités économiques (nouveau nom depuis 2025). Toutes les écritures de la base sont couvertes (« cc » et « Cour de cassation » désignent la même cour).",
"title": "Juridiction",
"type": "string"
},
"limit": {
"default": 20,
"description": "nombre maximum de résultats (défaut 20, max 50)",
"title": "Limit",
"type": "integer"
},
"numero_rg": {
"default": "",
"description": "numéro RG d'un arrêt CA (ex: \"21/05835\"). Lookup direct qui matche toutes les variantes typographiques.",
"title": "Numero Rg",
"type": "string"
},
"offset": {
"default": 0,
"description": "décalage pour paginer (défaut 0). Si la réponse contient `truncated: true`, réitérer avec `next_offset` pour la suite.",
"title": "Offset",
"type": "integer"
},
"query": {
"default": "",
"description": "mots-clés (ex : \"licenciement abusif\"). FTS5 supporte `\"phrase exacte\"`, `mot1 AND mot2`, `mot*` (préfixe). Optionnel si `numero_rg` est fourni.",
"title": "Query",
"type": "string"
}
},
"title": "search_judiciaire_libreArguments",
"type": "object"
},
"name": "search_judiciaire_libre",
"outputSchema": {
"additionalProperties": true,
"title": "search_judiciaire_libreDictOutput",
"type": "object"
}
},
{
"description": "Recherche dans les conventions collectives et accords de branche (KALI).\n\n Source : bulk KALI DILA (745 Mo). Couvre les conventions collectives\n nationales, accords de branche, avenants, identifiés par leur IDCC.\n\n Args:\n query: mots-clés\n idcc: filtre optionnel par IDCC (4 chiffres, ex \"1486\" pour bureaux\n d'études techniques)\n limit: max 50\n ",
"inputSchema": {
"properties": {
"idcc": {
"default": "",
"description": "filtre optionnel par IDCC (4 chiffres, ex \"1486\" pour bureaux d'études techniques)",
"title": "Idcc",
"type": "string"
},
"limit": {
"default": 20,
"description": "max 50",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "Nombre de résultats à sauter, pour la pagination (0 = première page).",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_kaliArguments",
"type": "object"
},
"name": "search_kali",
"outputSchema": {
"additionalProperties": true,
"title": "search_kaliDictOutput",
"type": "object"
}
},
{
"description": "Recherche pondérée dans les codes et lois consolidés français.\n\n Source : bulk LEGI DILA, avec versions historiques. Trouve\n les articles dont le texte ou le titre contient les mots-clés.\n\n `titre_texte` est le titre du TEXTE contenant l'article (« Code civil »,\n « Arrêté du 10 août 1998 »). Depuis la ré-ingestion du 10 septembre 2026,\n la hiérarchie LEGISCTA est en base (colonne `hierarchie`) et\n `get_law_article` sert `titre_section` = le dernier niveau du plan\n (« Chapitre Ier : La responsabilité extracontractuelle en général »).\n Il peut être PÉRIMÉ : certaines lignes portent l'intitulé d'avant une\n réforme du texte (7 articles sur 60 contrôlés le 2 octobre 2026, ex.\n CC 1128 servi « De la capacité des parties contractantes » au lieu de\n « La validité du contrat »). Ne pas le citer sans contrôle. Le plan\n complet (partie / livre / titre / chapitre / section) n'est pas encore\n servi : pour lui, consulter Légifrance.\n\n Sans filtre `code`, les résultats sont DÉDUPLIQUÉS par texte-parent (un\n article par texte, le mieux classé) : `returned` peut donc être bien\n inférieur à `total` sans que rien ne manque — c'est le sens de\n `deduplicated_by`. Avec un filtre `code`, aucune dédup.\n\n Args:\n query: mots-clés FTS5\n code: filtre optionnel — sigle (CC, CT, CSP, COJ…) ou LEGITEXT/JORFTEXT\n direct. Un sigle inconnu renvoie une erreur explicite (et non,\n comme avant, une recherche non filtrée déguisée en succès).\n date_min/date_max: filtre par date_debut de version (ISO)\n limit: max 50\n offset: pagination\n\n Returns:\n {\"total\", \"returned\", \"articles\": [...]}\n ",
"inputSchema": {
"properties": {
"code": {
"default": "",
"description": "filtre optionnel — sigle (CC, CT, CSP, COJ…) ou LEGITEXT/JORFTEXT direct. Un sigle inconnu renvoie une erreur explicite (et non, comme avant, une recherche non filtrée déguisée en succès). date_min/date_max: filtre par date_debut de version (ISO)",
"title": "Code",
"type": "string"
},
"date_max": {
"default": "",
"description": "Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne.",
"title": "Date Max",
"type": "string"
},
"date_min": {
"default": "",
"description": "Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne.",
"title": "Date Min",
"type": "string"
},
"limit": {
"default": 20,
"description": "max 50",
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "pagination",
"title": "Offset",
"type": "integer"
},
"query": {
"description": "mots-clés FTS5",
"title": "Query",
"type": "string"
}
},
"required": [
"query"
],
"title": "search_legiArguments",
"type": "object"
},
"name": "search_legi",
"outputSchema": {
"additionalProperties": true,
"title": "search_legiDictOutput",
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:50279a0a9cf60395cdf1f1b7db759bd5250c9562ce3152ed383189bc6611441d | sha256sum