npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

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

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

  1. Créer un compte sur piste.gouv.fr ;
  2. Valider les CGU des API « Judilibre » et « Légifrance » (menu API → Consentement CGU API) ;
  3. Créer une application, y activer les deux API ;
  4. Récupérer le client ID et le client secret OAuth de l'application.

Installation

cd droit-francais-mcp-server
npm install
npm run build

Configuration

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é> (ou X-API-Key). Les clés valides sont listées dans MCP_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.js

Stratégie de recherche recommandée (pour le LLM)

  1. recherche_juridique avec des notions juridiques précises (mots_cles) et le vocabulaire factuel du dossier (mots_cles_faits) ;
  2. Approfondir les arrêts clés avec judilibre_decision (zones motivations + dispositif) ;
  3. Vérifier chaque article cité avec legifrance_get_article (état VIGUEUR + version applicable à la date des faits) ;
  4. Pour un litige ancien : date_version = date des faits ;
  5. 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_search avec fond="CETAT" (Conseil d'État et juridictions administratives) et fond="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égifrance

Licences 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.