Free access to 3.3M French & EU court decisions + 1.5M law articles w/ history. 31 read-only tools
io.github.Dahliyaal/justicelibre (MCP)
The MCP server “io.github.Dahliyaal/justicelibre” provides free access to a corpus of 3.3M French & EU court decisions and 1.5M law articles with history. It exposes 31 read-only tools via an MCP endpoint at https://justicelibre.org/mcp using streamable HTTP without a key.
🛠️ Key Features
31 read-only tools
Free access to 3.3M French & EU court decisions
Free access to 1.5M law articles with history
Streamable HTTP MCP endpoint (https://justicelibre.org/mcp, sans clé)
🚀 Use Cases
Searching French and European legal materials (jurisprudence)
Using open data for legal-tech workflows
Building developer access around court decisions and law articles
⚡ Developer Benefits
MCP integration for structured access to legal content
Read-only toolset suitable for indexing and retrieval
Topics include searchable, sqlite, fts5, and MCP/model-context-protocol alignment
⚠️ Limitations
Tools are read-only (no mention of write/update capabilities)
Scope described focuses on French & EU decisions and law articles with history
Vue d'ensemble du protocole JusticeLibre : cartographie des sources
et règles d'acheminement.
Appeler cet outil en priorité pour appréhender la matrice de
compatibilité des identifiants, les périmètres de recherche de chaque
juridiction, et les spécificités des bases de données exploitées.
Référentiel exhaustif des codes juridictionnels.
Restitue les 51 instances couvertes (Conseil d'État, 9 CAA, 40 TA,
incluant les juridictions d'outre-mer) accompagnées de leur nomenclature
canonique.
Consulter impérativement cette liste pour déterminer le code exact à
fournir à l'outil `search_admin`.
Recherche sémantique ciblée sur la jurisprudence du Conseil d'État
(base ArianeWeb, ~270 000 décisions).
Moteur exclusif disposant d'un véritable algorithme de pertinence
(Sinequa) avec extraction de contexte. À privilégier systématiquement
pour le droit public.
EXTRACTION DU TEXTE : les ids retournés (`/Ariane_Web/AW_DCE/|XXXXXX`)
sont DÉSORMAIS exploitables directement par `get_decision_text(id)`
(récupération live via le plugin Sinequa).
⚠️ COUVERTURE : cet index ArianeWeb (Sinequa) couvre MAL les arrêts
anciens/fondateurs (avant ~1990). Si une recherche ici renvoie 0, NE PAS
conclure que l'arrêt est absent de JusticeLibre : le bulk JADE
(`search_admin`) couvre le CE depuis 1873 (Trompier-Gravier 1944, PGD,
etc. inclus). Et si tu connais déjà l'id Légifrance `CETATEXT…` d'un
arrêt, `get_decision_text("CETATEXT…")` le sort directement du bulk.
Consigne de recherche : limiter les requêtes à 2-5 mots-clés
distinctifs ; les requêtes en phrase complète retournent généralement
zéro résultat.
Args:
query: mots-clés de recherche (ex : "référé liberté", "QPC 145")
limit: nombre maximum de résultats (défaut 20)
offset: décalage pour paginer (défaut 0). Réitérer avec offset=20,
offset=40, etc. pour obtenir les pages suivantes.
Décisions admin **récentes** triées chronologiquement (API live).
Priorité au récent : tri par date de lecture décroissante, pas par
pertinence. Utile pour "actualité d'une juridiction" mais PAS pour
trouver la jurisprudence pertinente sur un sujet — pour cela, utiliser
`search_admin` (bulk JADE avec BM25 ranking).
Périmètre : CE + 9 CAA + 40 TA (incluant l'outre-mer), depuis ~2022.
Les identifiants générés (formats `DCE_*`, `DTA_*`, `DCAA_*`) sont
nativement compatibles avec l'outil `get_decision_text`.
Args:
query: mots-clés de recherche
juridiction: 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.
limit: nombre maximum de résultats (défaut 20)
Requête simultanée de l'ensemble des 40 Tribunaux Administratifs.
Fusionne et trie chronologiquement (date de lecture décroissante) les
résultats issus du territoire national. Pertinent pour cartographier
rapidement les éventuelles divergences d'appréciation territoriale sur
une même question de droit.
Args:
query: mots-clés de recherche
limit_per_court: nombre de résultats par tribunal (défaut 5, soit
jusqu'à 200 résultats totaux avant application de `total_limit`)
total_limit: 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.
Returns:
Dict comportant `per_court_totals` (nombre de hits par TA),
`decisions` (liste fusionnée triée chronologiquement) et les
éventuelles `errors`.
Requête simultanée de l'ensemble des 9 Cours Administratives d'Appel.
Fusion et tri chronologique des résultats par date de lecture.
Args:
query: mots-clés de recherche
limit_per_court: résultats par cour (défaut 5, soit jusqu'à 45
résultats au total)
total_limit: plafond global après fusion (0 = aucun plafond).
Extraction du texte intégral d'une décision relevant de l'ordre
administratif (Conseil d'État, TA, CAA).
Identifiants acceptés :
- `DCE_XXX_YYYYMMDD` (CE), `DTA_XXX_YYYYMMDD` (TA),
`DCAA_XXX_YYYYMMDD` (CAA) — extraction depuis le bulk JADE local.
- `CETATEXT…` (id Légifrance/CETA renvoyé par `search_admin`) — lookup
direct dans le bulk JADE local, texte intégral inclus.
- `/Ariane_Web/AW_DCE/|XXXXXX` (ou abrégé `|XXXXXX`) — récupération EN
DIRECT du texte intégral via le plugin Sinequa du Conseil d'État.
Fonctionne pour toute décision ArianeWeb, y compris hors bulk JADE.
INCOMPATIBILITÉS MAJEURES :
- Identifiants JURITEXT — rediriger vers `get_decision_judiciaire_libre`
ou `get_decision_judiciaire`.
- Identifiants CELEX `6XXXXCJXXXX` — rediriger vers `get_decision_cjue`.
- Identifiants HUDOC `001-XXXXXX` — rediriger vers `get_decision_cedh`.
Args:
decision_id: identifiant de la décision (avec ou sans suffixe .xml)
Returns:
Dict comportant les métadonnées complètes et `full_text` (texte
intégral). Si la décision est introuvable, dict d'erreur structuré
`{error, error_category: "not_found", retryable}` avec les tools
alternatifs à essayer.
Recherche plein texte dans la jurisprudence judiciaire, exécutée
localement et affranchie de toute obligation d'authentification
gouvernementale.
Exploite l'index FTS5 des archives publiques DILA (~1,17 M décisions :
Cour de cassation, 36 cours d'appel, Conseil constitutionnel). Scoring
BM25 disponible mais tri appliqué par ordre chronologique décroissant.
**Couverture connue** : la base contient un sous-ensemble des arrêts
publiés par les CA en open data DILA (~73 000 arrêts CA, principalement
depuis 2007). Tous les arrêts ne sont PAS dans la base ; un faux négatif
n'implique donc pas que l'arrêt n'existe pas. En cas de bredouille,
suggérer à l'utilisateur de chercher sur Légifrance ou via PISTE
(`search_judiciaire`).
**Recherche par numéro de RG** : pour les arrêts CA, utiliser le param
`numero_rg` (lookup direct, normalise les variantes 21/05835, 21-05835,
2105835). Pour les pourvois Cass, utiliser `query` avec le numéro
(ex: query="21-12.345").
⚠️ Les résultats ne contiennent qu'un SNIPPET tronqué (`snippet`), pas
le texte intégral. Pour lire une décision en entier, appeler
`get_decision_judiciaire_libre(id)` avec l'id retourné (format
`JURITEXT*` Cass / cours d'appel, `CONSTEXT*` Conseil constitutionnel).
Ne pas se fier au snippet seul pour conclure sur le contenu.
Args:
query: mots-clés (ex : "licenciement abusif"). FTS5 supporte
`"phrase exacte"`, `mot1 AND mot2`, `mot*` (préfixe). Optionnel
si `numero_rg` est fourni.
juridiction: filtre optionnel : "cassation" / "appel" / "constit".
numero_rg: numéro RG d'un arrêt CA (ex: "21/05835"). Lookup direct
qui matche toutes les variantes typographiques.
date_min: date min ISO (YYYY-MM-DD), optionnel
date_max: date max ISO (YYYY-MM-DD), optionnel
limit: nombre maximum de résultats (défaut 20, max 50)
offset: décalage pour paginer (défaut 0). Si la réponse contient
`truncated: true`, réitérer avec `next_offset` pour la suite.
Extraction du texte intégral d'une décision judiciaire depuis l'index
indépendant (sans authentification).
Accepte exclusivement les identifiants judiciaires libres (formats
`JURITEXT*`, `CONSTEXT*`, `JURI*`), tels que retournés par
`search_judiciaire_libre` (exemples : `"JURITEXT000042579700"`,
`"CONSTEXT000049574021"`).
Outil formellement inopérant pour les décisions relevant de l'ordre
administratif (formats `DCE_*`, `DTA_*`, `DCAA_*`, `/Ariane_Web/...`).
Args:
decision_id: identifiant JURITEXT/JURI/CONSTEXT de la décision
Recherche dans la jurisprudence judiciaire via l'API officielle PISTE
(authentification OAuth2 requise).
Périmètre : Cour de cassation, cours d'appel, tribunaux judiciaires,
tribunaux de commerce. À n'utiliser qu'en dernier recours ou pour des
décisions récentes absentes de la base libre DILA, compte tenu de
l'entrave technique imposée par la Cour de cassation.
Authentification (les identifiants PISTE ne transitent JAMAIS par la
conversation) :
1. `session_token` : jeton temporaire obtenu sur
justicelibre.org/tutoriel-piste.html (procédé recommandé).
2. Auto-hébergement : variables d'environnement PISTE_CLIENT_ID et
PISTE_CLIENT_SECRET définies côté serveur.
Args:
query: mots-clés de recherche
session_token: jeton justicelibre temporaire (obtenu via le
formulaire du site)
juridiction: filtre optionnel — "cc" (Cour de cassation), "ca"
(cours d'appel), "tj" (tribunaux judiciaires), "tcom"
(tribunaux de commerce). Vide = toutes juridictions.
limit: nombre maximum de résultats (défaut 20, maximum 50)
Extraction du texte intégral d'une décision judiciaire via l'API
restreinte PISTE (authentification OAuth2 requise).
À substituer systématiquement par `get_decision_judiciaire_libre`
lorsque la décision figure dans les archives ouvertes de la DILA.
Outil formellement inopérant pour les décisions relevant de l'ordre
administratif (formats `DCE_*`, `DTA_*`, `DCAA_*`, `/Ariane_Web/...`).
Authentification (les identifiants PISTE ne transitent JAMAIS par la
conversation) : `session_token` obtenu sur
justicelibre.org/tutoriel-piste.html, ou variables d'environnement
PISTE_CLIENT_ID / PISTE_CLIENT_SECRET côté serveur (auto-hébergement).
Args:
decision_id: identifiant Judilibre de la décision
session_token: jeton justicelibre temporaire (recommandé)
Résout un numéro de loi/ordonnance/décret vers son identifiant LEGITEXT
ou JORFTEXT Légifrance.
Utile pour les textes non codifiés (lois, ordonnances, décrets) qui ne
sont pas dans la whitelist des 26 codes courts (CC, CP, LIL, LO58, etc.).
Une fois le LEGITEXT/JORFTEXT résolu, on peut l'utiliser avec
`get_law_article(code=<LEGITEXT>, num=<N>)` pour récupérer un article
spécifique.
Exemples :
- `resolve_law_number("68-1250")` → loi prescription quadriennale des
créances publiques (JORFTEXT000000878035)
- `resolve_law_number("79-587")` → loi motivation des actes admin
- `resolve_law_number("2000-321")` → loi droits citoyens face à l'admin
Args:
numero: format "YY-NNNN" ou "YYYY-NNNN" (ex: "68-1250", "2000-321")
Returns:
`{numero, legitext, titre_section, date_debut, articles_count, source_url}`
ou `{error}` si introuvable.
Construit l'URL canonique d'un document à partir de son identifiant.
Utile pour vérifier les sources à la main sur le site officiel (Légifrance,
Conseil constitutionnel, EUR-Lex, HUDOC, etc.) ou pour inclure un lien
cliquable dans un courrier.
Identifiants reconnus :
- `LEGIARTI*` → Légifrance article (passer `legitext` du texte parent
pour distinguer code (/codes/) vs loi non codifiée (/loda/)
- `LEGITEXT*` / `JORFTEXT*` → texte entier Légifrance
- `JURITEXT*` / `CONSTEXT*` / `CETATEXT*` → décisions Légifrance
- CELEX (`6XXXXCJXXXX`) → EUR-Lex (CJUE)
- `ECLI:*` → EUR-Lex deeplink
- itemid HUDOC (`001-XXXXXX`) → Cour EDH
- ArianeWeb (`/Ariane_Web/AW_DCE/|XXXXXX`) → conseil-etat.fr
Args:
identifier: l'ID à convertir
legitext: (optionnel) LEGITEXT du texte parent si `identifier` est un
LEGIARTI — améliore la précision de l'URL (codes/ vs loda/)
date: (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.
Returns:
`{"id", "source_url"}` ou `{"error"}` si format non reconnu.
Récupère une décision du Conseil constitutionnel par son numéro.
Format attendu : "AA-NNN NATURE" ou juste "AA-NNN" (ex : "79-105 DC",
"2020-800 DC", "2023-1048 QPC"). Recherche full-text sur le numéro
+ filtre juridiction="Conseil constitutionnel" dans judiciaire.db.
Args:
numero: numéro de décision CC (ex : "79-105 DC")
nature: filtre optionnel (QPC, DC, L, etc.) — cf search_cc
Returns:
`{id, titre, date, juridiction, nature, ecli, text}`, ou dict
d'erreur structuré `{error, error_category: "not_found"}` si
introuvable.
Récupère une décision du Conseil d'État par son numéro de pourvoi.
Essaie d'abord le bulk JADE DILA (lookup SQL exact), puis si introuvable
tente ArianeWeb Sinequa — les deux bases ont des couvertures complémentaires.
Pour retrouver une décision via identifiant DCE_*, utiliser
`get_decision_text` à la place.
Args:
numero: numéro de pourvoi (ex : "497566", "358109")
Returns:
Décision avec métadonnées, ou dict d'erreur structuré
`{error, error_category: "not_found"}` si introuvable dans les
deux bases.
Récupère une décision administrative par son **numéro de requête exact**.
Couvre toutes les juridictions : Conseil d'État, cours administratives
d'appel (CAA), tribunaux administratifs (TA). Utilise un lookup SQL exact
sur le champ `numero` — pas de FTS5, pas de faux positifs.
⚠️ **Désambiguïsation indispensable** : un même numéro à 7 chiffres
(ex: 2200433) est partagé par 24+ tribunaux administratifs différents
(chaque TA a sa propre série annuelle qui repart à 1). Sans `juridiction`,
tu obtiens un homonyme au hasard parmi 24 — souvent pas le bon. **Si tu
sais quelle juridiction a rendu la décision, passe-la TOUJOURS.**
Args:
numero: numéro de requête (ex : "2200433", "2116343", "497566")
juridiction: 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", "CE-CAA".
⚠️ Les codes courts peuvent rater les arrêts anciens (id
CETATEXT* historiques) pour lesquels le mapping interne échoue.
Si tu sais le nom long, préfère-le.
Note : "Lyon" seul est ambigu (TA Lyon ou CAA Lyon) — préférer le
nom complet pour éviter la collision.
Returns:
Décision avec métadonnées (id, juridiction, numero, date, titre),
ou `{"error": "introuvable"}` si aucun résultat dans JADE.
Exemples :
get_admin_decision("2200433", juridiction="Tribunal Administratif de Lyon")
→ DTA_2200433_20230214 (TA Lyon, 14 fév 2023, RSA dérogatoire)
get_admin_decision("473286") # CE n'a pas de doublon, juridiction inutile
→ DCE_473286_20231123 (CE, non-admission du pourvoi sur la précédente)
Recherche dédiée au **Conseil constitutionnel** (7 112 décisions).
Quatrième pouvoir juridictionnel français aux côtés de la Cour de cassation,
du Conseil d'État et de la Cour de justice de la République. Contrôle la
constitutionnalité des lois (contrôle *a priori* via DC, *a posteriori* via
QPC) et les élections nationales.
Args:
query: mots-clés (opérateurs FTS5)
nature: 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
limit: max 50 (défaut 20)
offset: pagination
Returns:
`{"total", "returned", "nature_filter", "decisions": [...]}`
Recherche textuelle dans la jurisprudence de la Cour européenne des
droits de l'homme.
Exploitation de l'index localisé regroupant les ~76 000 documents
HUDOC francophones (arrêts, décisions, rapports de Chambre, Grande
Chambre, Comité). Libre d'accès.
Args:
query: mots-clés (ex : "article 8 vie familiale", "garde à vue")
limit: nombre maximum de résultats (défaut 20, max 50)
offset: décalage pour paginer (défaut 0). Si la réponse contient
`truncated: true`, réitérer avec `next_offset` pour la suite.
Extraction du texte intégral d'une décision de la Cour européenne des
droits de l'homme sur la base de son identifiant système (itemid HUDOC).
Args:
decision_id: itemid HUDOC (ex : "001-249914")
Returns:
Décision avec `full_text`, ou dict d'erreur structuré
`{error, error_category: "not_found"}` si l'itemid est inconnu.
Recherche textuelle dans la jurisprudence de la Cour de justice de
l'Union européenne.
Exploitation de l'index localisé des décisions de la CJUE, du Tribunal
de l'UE, des ordonnances et des conclusions des avocats généraux
(données EUR-Lex). Libre d'accès.
Args:
query: mots-clés (ex : "libre circulation capitaux", "CJUE C-72/24")
limit: nombre maximum de résultats (défaut 20, max 50)
offset: décalage pour paginer (défaut 0). Si la réponse contient
`truncated: true`, réitérer avec `next_offset` pour la suite.
Extraction du texte intégral d'une décision de la Cour de justice de
l'Union européenne sur la base de son identifiant normalisé (CELEX).
Seuls les identifiants CELEX sont acceptés — un ECLI seul ne suffit
pas : retrouver d'abord le CELEX correspondant via `search_cjue`.
Args:
decision_id: identifiant CELEX (ex : "62024CJ0072")
Returns:
Décision avec `full_text`, ou dict d'erreur structuré
`{error, error_category: "not_found"}` si le CELEX est inconnu.
Recherche pondérée par pertinence BM25 sur la jurisprudence
administrative complète (Conseil d'État + 9 CAA + 40 TA).
Source : bulk JADE DILA (~550 k décisions full text). Contrairement aux
outils `search_admin_recent*` qui trient par date, celui-ci classe par
pertinence sémantique des mots-clés. Indispensable pour trouver LES
bonnes décisions sur un sujet sans dépendre de l'ancienneté.
⚠️ **Si tu cherches par numéro de requête (7 chiffres ex: 2200433)**,
utilise plutôt `get_admin_decision(numero, juridiction=...)` qui fait
un lookup SQL exact. La recherche FTS5 d'un numéro court ne le trouve
que dans les décisions qui le **citent** dans leur texte (ex: décision
de cassation), pas la décision identifiée par ce numéro.
Args:
query: mots-clés (opérateurs FTS5 : AND/OR/NOT, "phrase exacte", mot*)
juridiction: filtre par fragment de nom de juridiction. Ex :
"Lyon" → toutes les décisions Lyon (TA + CAA), "Tribunal
Administratif de Lyon" → uniquement TA Lyon. Combiné en
FTS5 AND avec la query principale.
sort: "relevance" (défaut, BM25) ou "date_desc" / "date_asc"
date_min: limite inférieure ISO YYYY-MM-DD (optionnel)
date_max: limite supérieure ISO YYYY-MM-DD (optionnel)
limit: nombre de résultats (défaut 20, max 50)
offset: pagination
Returns:
{"total", "returned", "decisions": [...]} avec extracts BM25.
Recherche pondérée dans les codes et lois consolidés français.
Source : bulk LEGI DILA (3,6 Go avec versions historiques). Trouve
les articles dont le texte ou le titre contient les mots-clés.
Args:
query: mots-clés FTS5
code: filtre optionnel sur un code spécifique (CC, CT, CSP...)
date_min/date_max: filtre par date_debut de version (ISO)
limit: max 50
offset: pagination
Returns:
{"total", "returned", "articles": [...]}
Recherche dans les conventions collectives et accords de branche (KALI).
Source : bulk KALI DILA (745 Mo). Couvre les conventions collectives
nationales, accords de branche, avenants, identifiés par leur IDCC.
Args:
query: mots-clés
idcc: filtre optionnel par IDCC (4 chiffres, ex "1486" pour bureaux
d'études techniques)
limit: max 50
Recherche dans les délibérations de la CNIL.
Source : bulk CNIL (109 Mo, ~8 000 délibérations). Utile pour le droit
des données personnelles, RGPD, traitements algorithmiques.
Renvoie le texte d'un article de loi à une date donnée (ou version
actuelle si `date` vide).
Particularité justicelibre : quand une décision de 1992 cite
l'article 1128 du Code civil, l'article a été totalement réécrit en
2016. Avec ce tool on récupère le texte **tel qu'il existait en 1992**
(l'ancienne version napoléonienne), pas le texte actuel.
Codes/textes supportés (26) : 22 codes consolidés — CC, CP, CPC, CPP,
CT, CSP, CJA, CGCT, CRPA, CPI, CASF, CMF, C.com, C.cons, C.éduc, CU,
C.env, CR, CGI, CESEDA, CSS, CCH — + 4 textes non codifiés : CONST
(Constitution), LIL, LO58, L2005-102.
Args:
code: code court (ex : "CC" pour Code civil, "CT" pour Code du travail)
num: numéro de l'article (ex : "1128", "L1152-1", "132-1")
date: 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.
Returns:
dict avec `legiarti`, `num`, `code`, `texte`, `etat`
(VIGUEUR/MODIFIE/ABROGE), `date_debut`, `date_fin`, `nota`. Plus
un champ `note` si la version retournée n'est pas celle demandée.
Renvoie toutes les versions historiques d'un article de loi, du plus
ancien au plus récent.
Utile pour construire une "timeline" de l'article et comprendre son
évolution (ex : un article modifié en 1964, 1994, 2016 aura 3-4 lignes
avec `date_debut`, `date_fin`, `etat`, `texte` distincts).
Args:
code: code court (voir get_law_article pour la liste des 26
codes/textes)
num: numéro de l'article
Returns:
dict avec `code`, `code_long`, `num`, `count`, `versions`
(liste ordonnée par `date_debut` ascendante).
Cherche les décisions qui citent EXPLICITEMENT un article de loi donné.
Exploite l'index FTS5 sur les sources jurisprudence disponibles pour
matcher les formulations courantes de citation (`"article 1382 du code
civil"`, `"art. L. 1152-1 du Code du travail"`, etc.). Cross-référencement
inverse : partant d'un article, on trouve la jurisprudence pertinente.
**LIMITATION CONNUE** : ce tool trouve UNIQUEMENT les citations explicites
du numéro d'article. Il ne capte PAS :
- les références indirectes ("conformément aux dispositions du Code civil
relatives à la responsabilité délictuelle…")
- les renvois à une section entière sans numéro précis
- les citations du code par abréviation seule sans article ("en vertu du CT")
Pour une recherche conceptuelle plus large, préférer `search_all` avec
l'expansion thésaurus (ex: "harcèlement" → inclut "intimidation" etc.).
Args:
code: code court de l'article (ex : "CT", "CC")
num: numéro de l'article (ex : "L1152-1", "1240")
sources: liste optionnelle de sources à interroger parmi
["dila", "jade", "cedh", "cjue"]. Par défaut : toutes.
limit: nombre de décisions par source (défaut 20, max 50)
Returns:
dict `{"code", "num", "total", "per_source": {source: count},
"decisions": [{source, id, juridiction, date, title, extract}]}`.
Si une source est en panne, elle est absente de `per_source` et
détaillée dans `source_errors` (résultats alors incomplets).
Recherche fédérée pondérée par pertinence sur toutes les sources.
Tool ONE-STOP quand on ne sait pas où chercher : interroge en parallèle
les sources locales (DILA judic, JADE admin, LEGI, CEDH, CJUE) et
retourne une liste fusionnée triée par score BM25 avec un bonus
d'autorité (CE/Cass/CEDH > CAA > TA/CA).
Args:
query: 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.)
sources: liste optionnelle parmi ["dila", "jade", "legi", "cedh",
"cjue"]. None = toutes.
sort: "relevance" (défaut) ou "date_desc"
date_min, date_max: ISO YYYY-MM-DD
limit: nombre de résultats fusionnés (défaut 30, max 100 ; chaque
source locale plafonne à 50 résultats par appel)
expand_synonyms: active le thésaurus (défaut True)
Returns:
dict {"query_expanded", "per_source_counts", "results": [...]}.
`per_source_counts` ne compte que les sources ayant répondu ; si
une source est en panne, elle est détaillée dans `source_errors`
et un `warning` signale des résultats potentiellement incomplets.
`truncated: true` + `note` signalent que la fusion dépasse `limit`.
Recherche dans l'annuaire agrégé des adresses électroniques publiques
des juridictions et administrations françaises.
Agrège 3 sources hébergées sur justicelibre.org (~75 000 adresses
fonctionnelles publiques, sous Licence Ouverte 2.0) :
- dump quotidien DILA (services locaux : juridictions, mairies, sous-préf, etc.)
- API `api-lannuaire.service-public.fr` (administrations centrales)
- annuaire CADA (PRADA - personnes responsables L. 330-1 CRPA)
- PDFs gouvernementaux scrapés (adresses inédites : bureaux internes,
cabinets, écoles, DASEN, etc. absents des annuaires officiels)
Recherche : substring case-insensitive sur mail, organisme et service.
Cette version alpha ne fait pas de BM25 : classement par pertinence
simple (match mail > organisme > service).
Args:
query: mots-clés (ex : "mairie strasbourg", "dsden nord", "dacs-c3",
"greffe caa douai", "prada culture")
category: filtre catégorie (ex : "mairie", "bav", "ecole", "cour_appel",
"dacs", "prada", "administration_centrale")
source: filtre origine ("dila", "api", "prada", "pdf", "manuel")
limit: nombre maximum de résultats (défaut 20, max 200)
Returns:
dict avec `total` (matches totaux), `returned`, `results` (liste de
dicts {mail, organisme, service, categorie, source, tel, site,
adresse, date_source, url_page}). Les entrées issues de PDF scrapés
(`source: "pdf"`) portent en plus la traçabilité complète :
`role`, `source_url` (document officiel d'origine), `source_label`,
`source_page` (page du PDF), `preuve_url` (copie archivée sur
justicelibre.org/preuves/ — à citer si l'original a disparu).
Serveur Model Context Protocol (MCP) qui expose ~3,3 M décisions de justice + ~1,5 M articles de loi consolidés + ~700 k textes annexes (KALI/JORF/CNIL) de la France, de l'UE et du Conseil de l'Europe — gratuit, sans authentification, indexé sur Google.
Source
Volume
Couverture
Cour de cassation + cours d'appel + Conseil constitutionnel
1 169 102
DILA bulks + Judilibre PISTE
Conseil d'État + 9 CAA + 40 TA (JADE bulk)
552 576
DILA bulk
Open data justice administrative (CE/CAA/TA récents)
985 996
API justice-administrative.fr
ArianeWeb (Conseil d'État)
70 396
scrape Sinequa
Cour Européenne des Droits de l'Homme
76 051
HUDOC (FR + fallback EN)
Cour de Justice de l'Union Européenne
44 270
EUR-Lex / Cellar
INCA (jurisprudence judiciaire ancienne)
382 480
DILA bulk
TOTAL décisions
~3,28 M
Articles de loi en vigueur (LEGI)
1 481 309
DILA bulk
Conventions collectives (KALI)
286 732
DILA bulk
JO (textes non codifiés)
409 564
DILA bulk
Délibérations CNIL
8 126
DILA bulk
Pourquoi JusticeLibre
Les outils juridiques propriétaires (Pappers Justice, Doctrine.fr, Lexis 360, Dalloz) coûtent 50-200 €/mois et ferment l'accès au droit derrière un paywall. L'open data juridique français existe (loi 2016 République Numérique, loi 2019 réforme de la justice) mais reste techniquement inaccessible :
Légifrance n'expose que ~25% de la jurisprudence en open data, fragmenté
1.17M décisions (Cass + CA + Conseil constit.) - bulk DILA, sans auth
get_decision_judiciaire_libre
Texte intégral via JURITEXT/CONSTEXT id
search_judiciaire
Live PISTE Judilibre (besoin OAuth)
get_decision_judiciaire
Texte via PISTE
search_cc
Conseil constitutionnel dédié (7112 décisions, filtre par nature : QPC/DC/L/SEN/AN/PDR)
get_cc_decision
Cette décision CC, par son numéro (ex: "2023-1048 QPC"). Lookup exact : un numéro porté par plusieurs natures (2019-778 existe en DC et en QPC) est refusé tant que nature n'est pas précisé, plutôt que de servir un voisin. Pour la postérité d'une décision (qui la cite, la confirme, la renverse) : search_cc(query='"2019-778 DC"')
Jurisprudence administrative (CE + 9 CAA + 40 TA)
Outil
Description
search_admin
BM25 pondéré sur 552k décisions admin bulk JADE
get_admin_decision
Lookup par numéro de requête (désambiguïsation par juridiction). Échoue si le numéro est introuvable — ne sert jamais la décision « la plus proche »
get_ce_decision
CE spécifique, avec repli ArianeWeb si le numéro n'est pas dans le bulk. Idem : pas de résultat approchant
search_conseil_etat
~270k CE via Sinequa (moteur sémantique natif)
get_decision_text
Texte intégral via DCE/DTA/DCAA id
search_admin_recent / _all_caa / _all_ta
Tri date desc pour l'actualité
list_juridictions
51 codes juridiction (CE, CAA13...78, TA06...109)
Jurisprudence européenne
Outil
Description
search_cedh
76k décisions Cour EDH avec sémantique ECHR
get_decision_cedh
Texte via itemid (ex: "001-249914")
search_cjue
44k arrêts CJUE + Tribunal UE
get_decision_cjue
Via CELEX ou ECLI
Articles de loi (killer feature)
Outil
Description
get_law_article
Article à une date donnée. Ex: ("CC","1128","1992-05-15") -> texte napoléonien ; ("CC","1128","2024-01-01") -> texte post-réforme. titre_texte = titre du texte parent ; la hiérarchie des sections (partie/livre/titre/chapitre) n'est pas ingérée du bulk LEGI et n'est donc pas renvoyée
get_law_versions
Timeline complète des versions d'un article
search_legi
BM25 sur 1.5M articles consolidés (79 codes + Constitution + lois non codifiées). Un sigle code inconnu renvoie une erreur, jamais une recherche non filtrée déguisée en succès
search_decisions_citing
Cross-référence inverse : "quelles décisions citent l'article X ?"
resolve_law_number
Numéro loi/ord/décret -> LEGITEXT/JORFTEXT
build_source_url
URL Légifrance canonique pour un identifier
Droit positif complémentaire
Outil
Description
search_jorf
1.24M textes JO (lois, décrets, arrêtés, circulaires depuis 1990)
# Toutes les QPC sur l'article 8 DDHC ces 2 dernières années
search_cc(query="proportionnalité", nature="QPC",
date_min="2024-01-01", date_max="2026-01-01")
Recours CEDH
python
# Décisions CEDH France sur la garde à vue
search_cedh(query="garde à vue France")
# Texte intégral
get_decision_cedh(itemid="001-249914")
Recherche jurisprudence administrative ciblée
python
# Tous les TA + CAA en parallèle sur "harcèlement institutionnel"
search_admin(query="harcèlement institutionnel université",
sort="relevance", limit=30)
# TA Lyon spécifique
get_admin_decision(numero="2200433", juridiction="Tribunal Administratif de Lyon")
Article de loi à une date précise
python
# L. 262-8 CASF en vigueur au 1er janvier 2023
get_law_article(code="CASF", num="L262-8", date="2023-01-01")
# Toutes les versions historiques
get_law_versions(code="CC", num="1128")
Built by : @Dahliyaal - projet né d'un usage personnel sur 8 fronts contentieux en parallèle (MDPH, RSA, Barreau, etc.). Outil né d'un besoin réel, pas d'un wrapper Légifrance pondu pour le SEO.