alva-suite-mcp-recherche-juridique-droit-francais
v1.0.0
Published
Serveur MCP pour la recherche juridique française : jurisprudence (Judilibre) et textes de loi (Légifrance) via le portail PISTE
Downloads
164
Maintainers
Readme
droit-francais-mcp-server
Serveur MCP (Model Context Protocol) pour la recherche juridique française, connecté aux deux API officielles du portail PISTE :
- Judilibre (Cour de cassation) — jurisprudence judiciaire en open data : Cour de cassation, cours d'appel, tribunaux judiciaires, tribunaux de commerce ;
- Légifrance (DILA) — codes, lois, ordonnances, décrets, arrêtés, jurisprudence (fond JURI), et autres fonds (CETAT, CONSTIT, KALI, CNIL, JORF…).
Objectif : permettre à un LLM de produire des recherches juridiques fiables et à jour — articles dans leur version en vigueur, arrêts de principe, jurisprudence récente et jurisprudence par similarité de faits.
Outils exposés
Workflow (point d'entrée recommandé)
| Outil | Description |
|---|---|
| recherche_juridique | Recherche complète en un appel : articles de codes à jour + textes LODA + arrêts de principe (Bulletin) + jurisprudence récente + similarité de faits (zone « exposé du litige »). Exécution parallèle, erreurs partielles tolérées. |
Judilibre (jurisprudence judiciaire)
| Outil | Description |
|---|---|
| judilibre_search | Recherche plein texte avec tous les filtres de l'API : zones de texte (field), juridiction, chambre, formation, publication (b = Bulletin), solution, dates, tri pertinence/date. |
| judilibre_decision | Texte intégral d'une décision par ID, découpé par zones (introduction, exposé, moyens, motivations, dispositif) avec sélection de zones pour économiser le contexte. |
| judilibre_taxonomy | Valeurs admises pour chaque filtre (thèmes, chambres, sièges, solutions…). |
Légifrance (textes et jurisprudence)
| Outil | Description |
|---|---|
| legifrance_search_code | Articles d'un code dans leur version en vigueur à une date donnée (défaut : aujourd'hui). Détection automatique numéro d'article vs mots-clés. |
| legifrance_search_loda | Lois, ordonnances, décrets, arrêtés (par numéro de texte, mots-clés, nature, état, dates). |
| legifrance_search_juri | Jurisprudence du fond JURI (utile pour les décisions anciennes, complément de Judilibre). |
| legifrance_get_article | Texte complet d'un article (LEGIARTI) + état juridique + historique des versions. |
| legifrance_get_text | Texte légal complet (LEGITEXT consolidé à une date / JORFTEXT publié au JO). |
| legifrance_get_juri | Texte intégral d'une décision JURI (JURITEXT). |
| legifrance_search | Recherche générique experte sur n'importe quel fond (CETAT, CONSTIT, KALI, CNIL…) avec champs et facettes libres. |
Prérequis : compte PISTE
- Créer un compte sur piste.gouv.fr ;
- Valider les CGU des API « Judilibre » et « Légifrance » (menu API → Consentement CGU API) ;
- Créer une application, y activer les deux API ;
- Récupérer le client ID et le client secret OAuth de l'application.
Installation
cd droit-francais-mcp-server
npm install
npm run buildConfiguration
Variables d'environnement (voir .env.example) :
| Variable | Obligatoire | Description |
|---|---|---|
| PISTE_CLIENT_ID | oui | Client ID OAuth PISTE |
| PISTE_CLIENT_SECRET | oui | Client secret OAuth PISTE |
| PISTE_ENV | non | production (défaut) ou sandbox |
| JUDILIBRE_KEY_ID | non | Clé d'API Judilibre (en-tête KeyId), alternative à l'OAuth pour Judilibre |
| TRANSPORT | non | stdio (défaut) ou http |
| PORT / HOST | non | Pour le mode HTTP (défaut : 3000 / 127.0.0.1) |
| MCP_API_KEYS | oui en HTTP distribué | Clés API des clients MCP, séparées par des virgules. Sans elle, /mcp est ouvert (avertissement au démarrage). |
Usage local — Claude Desktop / Claude Code (stdio)
Via npm (recommandé — mise à jour automatique à chaque redémarrage de Claude Desktop) :
{
"mcpServers": {
"droit-francais": {
"command": "npx",
"args": ["-y", "alva-suite-mcp-recherche-juridique-droit-francais@latest"],
"env": {
"PISTE_CLIENT_ID": "xxx",
"PISTE_CLIENT_SECRET": "yyy"
}
}
}
}Guide pas à pas pour non-techniciens (compte PISTE inclus) : GUIDE-INSTALLATION.md.
Ou depuis les sources (développement) :
{
"mcpServers": {
"droit-francais": {
"command": "node",
"args": ["/chemin/vers/droit-francais-mcp-server/dist/index.js"],
"env": {
"PISTE_CLIENT_ID": "xxx",
"PISTE_CLIENT_SECRET": "yyy"
}
}
}
}Usage distant multi-utilisateurs (HTTP streamable, stateless)
TRANSPORT=http PORT=3000 HOST=0.0.0.0 MCP_API_KEYS=cle1,cle2 node dist/index.js- Endpoint MCP :
POST /mcp— healthcheck :GET /health(non authentifié). - Authentification des clients : chaque utilisateur envoie sa clé via
Authorization: Bearer <clé>(ouX-API-Key). Les clés valides sont listées dansMCP_API_KEYS. Une clé par utilisateur permet de révoquer individuellement. - Mode stateless : une instance serveur/transport par requête, scalable horizontalement.
- À mettre derrière un reverse proxy HTTPS (Caddy, Nginx, Cloudflare) — les clés ne doivent jamais transiter en clair.
- Attention aux quotas PISTE : tous les utilisateurs partagent les identifiants PISTE du serveur. En cas de montée en charge, demander une augmentation de quota à PISTE ou répartir sur plusieurs applications PISTE.
Test avec MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.jsStratégie de recherche recommandée (pour le LLM)
recherche_juridiqueavec des notions juridiques précises (mots_cles) et le vocabulaire factuel du dossier (mots_cles_faits) ;- Approfondir les arrêts clés avec
judilibre_decision(zonesmotivations+dispositif) ; - Vérifier chaque article cité avec
legifrance_get_article(état VIGUEUR + version applicable à la date des faits) ; - Pour un litige ancien :
date_version= date des faits ; - Pour les décisions antérieures à l'open data (≈ avant 1990-2000 selon les fonds) :
legifrance_search_juri.
Limites connues
- Judilibre : max 50 résultats/page, 10 000 résultats accessibles par recherche ; quotas PISTE (HTTP 429 → patienter).
- Judilibre couvre l'ordre judiciaire ; pour le contentieux administratif, utiliser
legifrance_searchavecfond="CETAT"(Conseil d'État et juridictions administratives) etfond="CONSTIT"(Conseil constitutionnel). - Les réponses sont tronquées à ~25 000 caractères avec message explicite (paginer ou filtrer).
- L'environnement sandbox PISTE contient des données de test incomplètes — utiliser la production pour des résultats réels.
Évaluation
evaluation.xml contient 10 questions/réponses de test (lecture seule, stables). Elles ont été conçues sans accès live à l'API : validez-les une fois vos identifiants configurés, par exemple avec le harnais d'évaluation du skill mcp-builder.
Architecture
src/
├── index.ts # Entrée : stdio + HTTP streamable stateless
├── constants.ts # URLs PISTE, limites
├── services/
│ ├── pisteAuth.ts # OAuth client_credentials + cache du jeton
│ ├── http.ts # Clients HTTP Judilibre/Légifrance, erreurs actionnables, retry 401
│ ├── format.ts # Troncature, extraits, dates, accès sûr au JSON
│ ├── judilibre.ts # Client métier + mise en forme (zonage des décisions)
│ └── legifrance.ts # Constructeur de requêtes /search + formatters /consult
└── tools/
├── workflowTools.ts # recherche_juridique (orchestration parallèle)
├── judilibreTools.ts # judilibre_search / _decision / _taxonomy
└── legifranceTools.ts # 7 outils LégifranceLicences des données
- Judilibre : Licence Ouverte 2.0 + CGU Cour de cassation ;
- Légifrance : Licence Ouverte 2.0 + CGU DILA. Citez vos sources (numéro de pourvoi, ECLI, identifiants LEGIARTI) dans les productions.
