# Support OpenLegi / PISTE — Base de connaissances pour assistant LLM

> **Note d'ingestion** : ce document n'est pas destiné à être lu linéairement par un humain.
> Il est conçu pour être chargé en contexte par un assistant Claude qui guide interactivement
> un utilisateur dans la configuration de la chaîne **PISTE → OpenLegi → Claude**.
> Tous les libellés UI cités ont été vérifiés en navigation authentifiée sur PISTE
> (2026-04-28). En cas de divergence avec ce que voit l'utilisateur, faire confiance
> à l'écran et signaler la divergence pour mise à jour ultérieure.

---

## 0. Méta-instructions pour l'assistant (LLM)

### 0.1 Posture
- Vouvoyer par défaut, sauf alignement préalable avec l'utilisateur.
- Réponses **courtes**, **séquentielles**, **vérifiables**. Une seule action par tour.
- Toujours demander à l'utilisateur de **citer le libellé exact** d'un bouton ou d'un message
  d'erreur, et de communiquer **l'URL en barre d'adresse**, avant de prescrire une action.
- Ne jamais inventer de libellé absent du § 7 : demander confirmation à l'utilisateur.

### 0.2 Premières questions de cadrage à poser systématiquement
1. **Étape de blocage** : « À quelle étape êtes-vous bloqué·e — création du compte PISTE,
   création de l'application PISTE, validation des CGU, souscription d'une API,
   récupération des identifiants OAuth, import dans OpenLegi, ou ajout du connecteur
   dans Claude ? »
2. **Client Claude** : « Utilisez-vous Claude dans un navigateur (claude.ai) ou
   l'application de bureau Claude (Desktop / Cowork) ? »
3. **Verbatim** : « Quel libellé exact lisez-vous sur le dernier bouton ou message ?
   Quelle URL est affichée dans la barre d'adresse ? »

### 0.3 Style
- Pas de listes longues. Phrases brèves, vocabulaire précis.
- Chemin UI sous forme `Menu › Sous-menu › Bouton`.
- Conclure par : « Dites-moi ce qui s'affiche maintenant. »

### 0.4 Réflexes en cas de désorientation de l'utilisateur
- Si l'utilisateur dit « je ne trouve pas », « il n'y a pas d'onglet », « je ne sais pas
  de quel tableau tu parles », **ne pas répéter la même instruction**. Demander
  immédiatement, dans cet ordre :
  1. Une **capture d'écran** (« Pouvez-vous m'envoyer une capture d'écran de ce qui
     s'affiche ? »).
  2. À défaut, une **description de l'écran** (sections, libellés visibles, boutons en
     bas / en haut, couleurs).
  3. Citation de l'**URL** dans la barre d'adresse.
- Les libellés et chemins varient selon la version, la langue (FR/EN), le rôle (admin
  ou non) et la résolution d'écran. Ne **jamais** prescrire un libellé sans vérifier ce
  que voit l'utilisateur.
- Si plusieurs chemins existent (ex. ajout d'un connecteur Claude Desktop), les
  présenter **à parité**, sans hiérarchie : « il y a deux chemins possibles, dites-moi
  lequel apparaît chez vous ».

### 0.4 Limites
- L'assistant ne peut **pas** créer un compte, accepter une CGU ni saisir un mot de passe à
  la place de l'utilisateur.
- L'assistant ne demande jamais le mot de passe ni le `client_secret` complet ;
  uniquement les 4 derniers caractères pour vérification de cohérence si nécessaire.

---

## 1. Architecture fonctionnelle

```
[Utilisateur]
   │
   ├── (1) compte PISTE (piste.gouv.fr) ─► application Prod ─► CGU API ─► souscription
   │                                                               │
   │                                                       client_id + client_secret
   │                                                               │
   ├── (2) compte OpenLegi (auth.openlegi.fr) ◄────────────────────┘  saisie credentials
   │                                                               │
   │                                                       token OpenLegi (perso)
   │                                                               │
   └── (3) connecteur MCP dans Claude ───────────────────────────── ▼
             URL = https://mcp.openlegi.fr/legifrance/mcp/token/<TOKEN>
```

### 1.1 Étapes minimales
| # | Étape | Domaine | Sortie |
|---|---|---|---|
| 1 | Créer compte OpenLegi | `auth.openlegi.fr` | accès console |
| 2 | (Recommandé) Créer compte PISTE, application Prod, valider CGU Légifrance, souscrire | `piste.gouv.fr` | `client_id` + `client_secret` |
| 3 | Saisir `client_id`/`client_secret` dans la console OpenLegi (section **Clés OAuth** › **Ajouter une clé Legifrance**) | `auth.openlegi.fr` | quotas relevés |
| 4 | Copier l'URL du connecteur depuis OpenLegi (section **Mes services** › ligne `Legifrance`) puis la coller dans Claude | OpenLegi → Claude | connecteur actif |

L'étape 2 est facultative ; sans elle, OpenLegi fonctionne via un pool mutualisé à
quotas plus stricts.

### 1.2 Modèle Sandbox / Prod sur PISTE (point capital)

- L'environnement **n'est PAS un champ choisi à la création** de l'application.
- Lors de l'inscription PISTE, **une application Sandbox est créée automatiquement** ;
  elle est **préfixée `APP_SANDBOX_<email>`** et apparaît avec `Environment = SANDBOX` dans
  la liste.
- Une application créée **manuellement** via le bouton **« Créer une application »** est
  systématiquement en `Environment = PRODUCTION`. Il n'y a aucun sélecteur Sandbox/Prod
  dans le formulaire de création.
- Les CGU et les souscriptions **distinguent ensuite les deux environnements** : sur la page
  de consentement CGU, chaque API apparaît deux fois (une ligne « PROD », une ligne
  « SANDBOX »). Sur la fiche d'application, le tableau `Sélectionner les API` ne montre
  que les API de l'environnement de l'application.
- **Conséquence pratique** : pour OpenLegi, **il faut une nouvelle application créée
  manuellement** (= Prod). Ne pas chercher à modifier l'application Sandbox auto-créée.

---

## 2. URLs canoniques (vérifiées 2026-04-28)

| Cible | URL |
|---|---|
| Portail PISTE | `https://piste.gouv.fr/` |
| Création compte PISTE | `https://piste.gouv.fr/component/apiportal/registration` |
| Liste / création applications | `https://piste.gouv.fr/apps` |
| Page Consentement CGU API | `https://piste.gouv.fr/apimgt/consentement-cgu-api` |
| Endpoint OAuth PISTE **Prod** | `https://oauth.piste.gouv.fr/api/oauth/token` |
| Endpoint OAuth PISTE **Sandbox** | `https://sandbox-oauth.piste.gouv.fr/api/oauth/token` |
| Site OpenLegi | `https://www.openlegi.fr/` |
| Console OpenLegi (login) | `https://auth.openlegi.fr/accounts/login/` |
| Création compte OpenLegi | `https://auth.openlegi.fr/accounts/signup/` |
| Documentation technique OpenLegi | `https://auth.openlegi.fr/documentation/` |
| Endpoint MCP OpenLegi | `https://mcp.openlegi.fr` |
| URL connecteur Légifrance (format query, exposé par la console OpenLegi) | `https://mcp.openlegi.fr/legifrance/mcp?token=<TOKEN>` |
| URL connecteur Légifrance (format path, équivalent) | `https://mcp.openlegi.fr/legifrance/mcp/token/<TOKEN>` |
| URL connecteur INPI (abonnement) | `https://mcp.openlegi.fr/inpi/mcp?token=<TOKEN>` |
| URL connecteur EUR-Lex (abonnement) | `https://mcp.openlegi.fr/eurlex/mcp?token=<TOKEN>` |
| Claude.ai | `https://claude.ai/` |
| Paramètres Connecteurs Claude.ai | `https://claude.ai/settings/connectors` |

---

## 3. Procédure canonique pas-à-pas

### 3.1 — Compte OpenLegi (≈ 2 min)
1. `https://auth.openlegi.fr/accounts/signup/` → email + mot de passe, ou « Continuer avec
   Microsoft » (compte Microsoft professionnel).
2. Valider l'email reçu.
3. Se connecter sur `https://auth.openlegi.fr/accounts/login/`. Une fois connecté, le
   header expose un bouton **`Dashboard`** et un bouton **`Déconnexion`**.
4. La page de tableau de bord est titrée **« Tableau de bord MCP Legifrance »**
   (URL `/users/dashboard/`). Elle expose **quatre onglets** sous forme de pilules :
   `Connexion` (par défaut), `Clés OAuth`, `Consommation`, `Support`.
5. Les deux onglets utiles à la configuration :
   - **`Clés OAuth`** → saisie / gestion des credentials PISTE (cf. § 3.7).
   - **`Connexion`** → exposition du **token API** et de l'**URL complète** de chaque
     service actif, prête à copier (cf. § 3.8).
6. Le token brut existe (champ « Votre token API : » dans `Connexion`), mais n'est en
   général pas à manipuler isolément : la même section affiche l'URL déjà construite
   `https://mcp.openlegi.fr/legifrance/mcp?token=…` à coller dans Claude.

### 3.2 — Compte PISTE (≈ 5 min)
1. `https://piste.gouv.fr/` → en haut à droite, **« Créer un compte »**.
2. Remplir le formulaire (civilité, nom, prénom, email, mot de passe, structure).
3. Le mot de passe doit contenir **au moins 12 caractères** dont 1 majuscule, 1 minuscule,
   1 chiffre et 1 caractère spécial parmi `! @ # ^ + ( ) , ; . ? : { } | _ ¨ § ~`.
4. Captcha PISTE **interne** (n'utilise plus reCAPTCHA Google ; certains bloqueurs de
   scripts cassent l'image — cf. S02).
5. Valider → email de confirmation. Cliquer sur le lien de validation.
6. Se connecter sur `https://piste.gouv.fr/`.

> ℹ️ À l'inscription, PISTE crée automatiquement une application
> **`APP_SANDBOX_<email>`** marquée `Environment = SANDBOX`. **Ne pas l'utiliser** pour
> OpenLegi.

### 3.3 — Création de l'application **Prod** sur PISTE

1. Menu principal → **APPLICATIONS** (ou directement `https://piste.gouv.fr/apps`).
2. Sur la page **« Liste des applications »**, cliquer sur le bouton orange en haut à
   droite **« Créer une application »**.
3. Remplir le formulaire **« Création d'Application »** :
   - **Image** (facultative, 1 Mo max) ;
   - **Organisation*** : `Universelle` (par défaut) ;
   - **Nom de l'application*** : libre, mais **uniquement** lettres, chiffres, `-` et `_`
     (regex `^[A-Za-z\d-_]+$`). Doit être unique.
   - **Description** (facultative) ;
   - **Téléphone** (facultatif) ;
   - **Email*** (préfilled avec le compte) ;
   - **Information sur la structure*** ;
   - **Responsable d'application*** ;
   - Case **« Activer l'application »** : laisser **cochée**.
4. Cliquer sur le bouton orange **« Sauvegarder l'application »**.
5. Retour sur la liste : la nouvelle application apparaît avec
   `Statut = Approved` et `Environment = PRODUCTION`.

> ⚠️ **Aucun sélecteur Sandbox/Prod n'existe dans ce formulaire** : toute application
> créée manuellement est automatiquement Prod. Inutile de chercher.

### 3.4 — Acceptation des CGU Légifrance

> ⚠️ Le consentement CGU **ne se fait pas** sur la fiche de l'application : il s'effectue
> sur une page dédiée, accessible via le menu **API › Consentement CGU API**.

1. Menu principal **API** (déroulant) → **« Consentement CGU API »**, ou directement
   `https://piste.gouv.fr/apimgt/consentement-cgu-api`.
2. Titre de la page : **« Consentement CGU »**, sous-titre : « Cette page vous permet de
   consentir aux CGU des API pour pouvoir les consommer ».
3. Dans le champ **« Recherche »** (à droite), taper `Légifrance` puis cliquer sur
   **« Recherche API »**.
4. Le tableau filtre 2 lignes : **« Légifrance — PROD »** et **« Légifrance — SANDBOX »**.
   Le PDF des CGU est **`CGU_Legifrance_API_VF_15-12-2022.pdf`**.
5. **Cocher la case** sur la ligne **« Légifrance — PROD »**. (Cocher SANDBOX est
   inutile pour OpenLegi.)
6. ⚠️ **Étape critique** : cliquer sur le **bouton orange « Valider mes choix CGU »**
   en haut à droite du tableau (et au-dessus du tableau). **La case cochée seule ne
   valide rien tant que ce bouton n'a pas été cliqué.**
7. Confirmation de validation → la ligne reste cochée et la souscription devient possible.

> Pour bénéficier aussi de **JUDILIBRE** (open data Cour de cassation), répéter les étapes
> 3 à 6 avec « JUDILIBRE — PROD ». Pour OpenLegi, Légifrance suffit.

### 3.5 — Souscrire l'application à l'API Légifrance

1. Menu **APPLICATIONS** → cliquer sur le **nom** de la nouvelle application Prod.
2. Sur la fiche, cliquer sur **« Modifier l'application »** (en haut à droite, sous le
   titre).
3. Onglet **« Détails »** (par défaut). Faire défiler jusqu'à la section
   **« Sélectionner les API »**.
4. Tableau, colonnes : `Nom de l'API`, `Version`, `La description`, `Tags` (qui contient
   `PRODUCTION`), **`Souscrite`** (cases à cocher), `Soumis à validation`, **`CGU`**
   (`Oui` / `Non`).
5. Sur la ligne **« Légifrance »** (version 2.4.2 au 2026-04) : la colonne `CGU` doit
   afficher **`Oui`** (sinon retourner § 3.4). **Cocher la case dans la colonne
   `Souscrite`**.
6. Bouton orange **« Appliquer les modifications »** en bas du tableau (à côté
   d'« Annuler »).

> Astuce : le lien bleu **« Cliquez ici pour accéder à la page de consentement »**, situé
> juste au-dessus du tableau « Sélectionner les API », ouvre la page CGU API et préselectionne
> le contexte de l'application courante.

### 3.6 — Récupération du `client_id` et `client_secret` PISTE

1. Toujours sur la fiche de l'application en mode **« Modifier »**, cliquer sur l'onglet
   **« Authentification »**.
2. Deux sections principales :
   - **« API Keys »** (clé d'API simple, non utilisée par OpenLegi) ;
   - **« Identifiants OAuth »** ← c'est celle qui nous intéresse.
3. Sous **Identifiants OAuth**, cliquer sur **« Générer »** (lien/bouton de la section,
   parfois remplacé par un `+`).
4. Un **formulaire intermédiaire** s'affiche (« Générer des Identifiants OAuth »), avec :
   - **« Type d'application »** : sélectionner / laisser **« Confidentielle »** (équivaut
     à `client_credentials`). C'est la valeur cochée par défaut.
   - **« URL de rappel »** : laisser **vide** — non requis pour OpenLegi.
   - **« Certificat X.509 »** : laisser **vide**.
   - Bouton orange en bas : **« Générer un identifiant »** (libellé exact). Cliquer.
5. Message de confirmation : **« OAuth client a été créé avec succès »**. Fermer la modale
   ou revenir : **une nouvelle ligne** apparaît dans le tableau **Identifiants OAuth**.
6. Sur cette ligne (qui contient les **deux** valeurs) :
   - Le **Client ID** est **affiché directement** dans la colonne `Client ID` (UUID type
     `a1b2c3d4-e5f6-...`). Le copier.
   - Le **Client secret** est **caché** : cliquer sur **« Consulter le client secret »**
     (icône œil) dans la colonne `Secret key` → une fenêtre modale s'ouvre avec un bouton
     **« Copy »**. Copier la valeur.

> ⚠️ Insister auprès de l'utilisateur : **Client ID ≠ Client secret**. Ce sont deux
> chaînes distinctes, sur la **même ligne** du tableau. Le secret est encore réaffichable
> autant de fois que nécessaire via le même lien œil.

> ⚠️ **Ne pas confondre avec la section `API Keys`** située juste au-dessus dans le même
> onglet. Les API Keys produisent une `API Key` + une `Clé secrète` qui **ne fonctionnent
> pas dans OpenLegi** (erreur `invalid_client`). Seuls les **Identifiants OAuth** sont
> valides. Le vocabulaire OpenLegi parle de **Consumer Key** (= `Client ID`) et
> **Consumer Secret** (= `Client Secret`) ; ce sont les mêmes valeurs.

> ⚠️ Vérifier que ces credentials sont bien ceux d'une application **PRODUCTION**
> (visible dans la fiche, section Détails → `Environment: PRODUCTION`). L'endpoint OAuth
> attendu est `https://oauth.piste.gouv.fr/...` (sans `sandbox-`).

### 3.7 — Saisie des credentials PISTE dans OpenLegi

1. Retour sur `https://auth.openlegi.fr/users/dashboard/` (Dashboard).
2. Sélectionner l'onglet **`Clés OAuth`** (deuxième pilule).
3. Si aucune clé n'existe encore, un bouton (violet selon les versions, libellé
   **« Ajouter une clé Legifrance »**) ouvre un formulaire. Si des clés existent déjà,
   le formulaire est replié et accessible via le même bouton.
4. Le formulaire contient trois champs obligatoires :
   - **`Nom de la clé`** \* — libellé interne libre. Convention recommandée :
     `OpenLegi-Prod` ou `Legifrance-Prod`.
   - **`Client ID`** \* — coller la valeur récupérée à l'étape 3.6.
   - **`Client Secret`** \* — coller la valeur récupérée à l'étape 3.6.
5. La page rappelle l'avertissement (texte intégral observé) :
   > « **Attention** : utilisez vos identifiants OAuth, pas les API Keys. Sur le portail
   > PISTE, chaque application a deux types de credentials. Seuls les identifiants OAuth
   > (Consumer Key / Consumer Secret) fonctionnent ici. »
   - Mapping de vocabulaire : **Consumer Key** = `Client ID` ; **Consumer Secret** =
     `Client Secret`. PISTE n'utilise pas l'expression « Consumer Key » dans son UI ;
     elle correspond au `Client ID` affiché dans le tableau OAuth.
6. Cliquer sur **`Créer la clé`**. La clé apparaît dans la liste avec le statut
   **`En attente de validation`** (jaune) le temps qu'OpenLegi appelle le Gateway PISTE.
7. Lorsque la validation aboutit, le statut passe à **`Active`** (vert). À côté de chaque
   ligne : boutons **`Tester`** et **`Supprimer`**.
8. Si la validation échoue avec **`Détail : Timeout de connexion au Gateway`** : cliquer
   sur **`Tester`** pour relancer (cf. S31). Si elle échoue avec un message
   **`invalid_client`**, c'est un problème de credentials côté PISTE (cf. S32).

### 3.8 — Récupérer l'URL du connecteur OpenLegi

> La console OpenLegi **ne donne pas un token brut à insérer dans une URL**. Elle expose
> **directement l'URL complète prête à coller** dans Claude.

1. Sur le Dashboard, sélectionner l'onglet **`Connexion`** (premier onglet, sélectionné
   par défaut).
2. Faire défiler jusqu'à la section **`Mes services`** (icône liste).
3. Repérer la **carte `Légifrance`** (tag rosé) avec :
   - Description : « JORF, Codes, Jurisprudence, LODA » ;
   - Badge vert **`Actif`** (uniquement si une clé OAuth est validée) ;
   - Champ readonly contenant l'**URL complète** au format
     `https://mcp.openlegi.fr/legifrance/mcp?token=…` ;
   - Bouton **`Copier`** à droite de l'URL.
4. Cliquer sur **`Copier`**. Le bouton confirme par « Copié ! » pendant 2 secondes.

> Pour les autres services (RNE, BOFiP, EUR-Lex, BODACC) la carte n'expose pas d'URL
> tant que le service n'est pas activé sur le compte ; un bouton **`Demander
> l'activation`** ouvre un ticket Support. Judilibre porte le badge **`Bientôt`** et
> n'est pas encore activable.

> Avertissement présent en bas de section : « **Important :** Gardez ce token secret. Il
> vous donne accès aux outils MCP authentifiés. »

> Le format `?token=…` (query string, exposé par la console) et le format `/token/…`
> (path) sont équivalents côté serveur. Coller celui proposé par `Copier`.

### 3.9 — Ajout du connecteur OpenLegi dans Claude

Coller l'URL copiée à l'étape 3.8 (`https://mcp.openlegi.fr/legifrance/mcp?token=…`).

#### A. Sur Claude.ai (navigateur)
1. Avatar (haut droit) → **« Paramètres »**.
2. Menu de gauche → **« Connecteurs »** (ou « Integrations »).
3. **« Ajouter un connecteur personnalisé »** (« Add custom connector »).
4. Champ **URL** : coller l'URL.
5. Champ **Nom** : ex. `OpenLegi - Légifrance`.
6. Valider. Si une liste d'outils est proposée, **cocher tous les outils** (12 attendus,
   cf. § 5.1).

#### B. Sur Claude Desktop / Cowork — deux chemins possibles à parité

> Selon la version de l'application, le rôle du compte et la langue de l'interface, l'un
> ou l'autre des chemins ci-dessous peut être disponible. **Aucun n'est universellement
> "le bon"**. Les présenter à l'utilisateur et lui demander celui qui apparaît chez lui.

**Chemin 1 — Avatar › Paramètres › Connecteurs**
1. Cliquer sur l'avatar (ou nom d'utilisateur) en haut à gauche / haut à droite.
2. **« Paramètres »** → **« Connecteurs »**.
3. Bouton **« Ajouter un connecteur personnalisé »**.
4. Saisir Nom + URL → Valider.

**Chemin 2 — « Personnaliser » / « Customize »**
1. Dans la conversation, repérer **« Personnaliser »** (en bas de la zone de saisie ou
   dans le menu latéral gauche, selon version). Libellé en anglais : **« Customize »**.
2. Section **« Connecteurs »** (« Connectors ») → bouton **« + »** ou
   **« Ajouter un connecteur personnalisé »** (« Add custom connector »).
3. Saisir Nom + URL → Valider.

> Si l'un des chemins ne propose pas de champ d'ajout d'URL custom, essayer l'autre.
> Si aucun ne fonctionne : vérifier dans `Paramètres › Profil › Capacités` que les
> connecteurs MCP / `custom integrations` sont activés (feature preview), recharger,
> recommencer.

### 3.10 — Vérification finale

Dans une **nouvelle conversation** Claude, demander :
« Liste les codes juridiques disponibles via OpenLegi. »
Attendu : appel à `lister_codes_juridiques`, retour d'une liste de 73 codes ou plus.

---

## 4. Identifiants en jeu

| Identifiant | Origine | Usage | Forme |
|---|---|---|---|
| Compte PISTE | inscription `piste.gouv.fr` | login portail PISTE | email + mot de passe |
| **client_id** PISTE | onglet Authentification d'une appli PROD, colonne `Client ID` | OAuth Légifrance | UUID |
| **client_secret** PISTE | même ligne, colonne `Secret key` (lien œil) | OAuth Légifrance | chaîne secrète |
| Compte OpenLegi | inscription `auth.openlegi.fr` | login console OpenLegi | email + mot de passe |
| **URL du connecteur** | section `Mes services` › ligne `Legifrance` › bouton `Copier` | À coller dans Claude | URL `https://mcp.openlegi.fr/legifrance/mcp?token=…` |

> Le `client_secret` PISTE est saisi **dans OpenLegi** (jamais dans Claude). L'**URL du
> connecteur** (qui contient le token OpenLegi en query string) est collée **dans Claude**
> (jamais dans PISTE).

---

## 5. Catalogue OpenLegi

### 5.1 Tools attendus sur `legifrance/mcp` (12)
- `rechercher_dans_texte_legal`
- `rechercher_code`
- `rechercher_jurisprudence_judiciaire`
- `rechercher_jurisprudence_administrative`
- `rechercher_decisions_cnil`
- `rechercher_conventions_collectives`
- `rechercher_decisions_constitutionnelles`
- `recherche_journal_officiel`
- `dernier_journal_officiel`
- `lister_codes_juridiques`
- `lister_emetteurs_jorf`
- `lister_natures_textes_jorf`

Liste différente ou vide → URL malformée ou token invalide.

### 5.2 Méthodes d'authentification supportées
1. Header `Authorization: Bearer <TOKEN>` (recommandé pour code applicatif).
2. Query param `?token=<TOKEN>` (token visible en logs).
3. Path token `/token/<TOKEN>` ← **utilisé par les connecteurs MCP de Claude**.

---

## 6. Diagnostic indexé par symptôme

### S01 — « Pas d'email de validation PISTE »
Cause probable : spam ou email erroné. Action : vérifier les spams et l'orthographe.
Sinon, demander un nouvel envoi via la fonction « Renvoyer le mail », ou contacter le
**Support Utilisateur** (CENTRE D'AIDE › Support Utilisateur, redirige vers Mantis).

### S02 — « Le captcha PISTE échoue »
Le captcha n'est plus reCAPTCHA Google mais un captcha **interne**. Certains bloqueurs
(uBlock, NoScript, ModHeader) cassent l'image. Action : désactiver les bloqueurs sur
`piste.gouv.fr`, recharger.

### S03 — « Je ne trouve pas où créer une application »
Vérifier la connexion (avatar visible en haut à droite) puis menu principal →
**APPLICATIONS** → bouton orange **« Créer une application »** en haut à droite du tableau
« Liste des applications ».

### S04 — « J'ai déjà l'application APP_SANDBOX_… auto-créée, est-ce suffisant ? »
**Non.** Cette application est en `Environment = SANDBOX` et ne convient pas pour OpenLegi.
Action : créer une **nouvelle application** via § 3.3 ; elle sera automatiquement Prod.
**Ne pas supprimer** l'application Sandbox (inutile et déconseillé, cf. S21).

### S05 — « Où sélectionner Production lors de la création d'application ? »
**Il n'y a aucun sélecteur Sandbox/Prod** dans le formulaire de création. Toute application
créée manuellement via le bouton **« Créer une application »** est automatiquement Prod.
La SANDBOX n'existe que pour l'application auto-créée à l'inscription.

### S06 — « Quel "type d'application" choisir ? »
La création d'application ne demande pas de type. Le choix du **type d'authentification**
intervient ultérieurement, dans l'onglet **Authentification** :
- Pour OpenLegi → **Identifiants OAuth › Générer** → choisir **Confidentiel**.
- Ne pas choisir un mode demandant une `URL de rappel` (callback).

### S07 — « La case CGU Légifrance est cochée mais je n'arrive pas à valider »
**Cause #1 (la plus fréquente)** : le bouton orange **« Valider mes choix CGU »**
n'a pas été cliqué. Il se trouve **au-dessus** du tableau, à droite (et reste accessible
en tête de page). **Cocher seul ne valide rien.**
**Cause #2** : la case a été cochée pour la mauvaise ligne (« Légifrance — SANDBOX » au
lieu de « Légifrance — PROD »). Décocher SANDBOX, cocher PROD, valider.

### S08 — « Je ne trouve pas le bouton "Valider mes choix CGU" »
Il est en **orange**, libellé exact **« Valider mes choix CGU »**, situé **au-dessus du
tableau** sur la page `https://piste.gouv.fr/apimgt/consentement-cgu-api`. Si invisible :
réduire le zoom navigateur, fermer la bannière de cookies, scroller en haut de page.

### S09 — « J'ai validé les CGU mais l'API n'apparaît pas comme "Souscrite" »
La validation CGU et la souscription sont **deux actions distinctes**.
1. La validation CGU se fait sur **API › Consentement CGU API** (page dédiée, § 3.4).
2. La souscription se fait sur la fiche de l'application : **Modifier l'application →
   onglet Détails → tableau « Sélectionner les API » → cocher la colonne `Souscrite`**
   sur la ligne `Légifrance` → bouton orange **« Appliquer les modifications »**.
Précondition : la colonne `CGU` doit afficher **`Oui`** sur cette ligne — sinon retour S07.

### S10 — « Différence entre Légifrance et Judilibre ? »
Deux API distinctes, CGU séparées, présentes chacune en deux lignes (PROD + SANDBOX) sur
la page Consentement. Pour OpenLegi, **Légifrance suffit**. Judilibre est activable
côté OpenLegi sur demande (« Demander l'activation »).

### S11 — « OpenLegi : "Identifiants Légifrance invalides" »
Vérifications dans cet ordre :
1. **Environnement** : credentials issus d'une appli **PRODUCTION** (cf. fiche →
   Détails → `Environment`). Si `SANDBOX`, tout reprendre depuis § 3.3.
2. **CGU** : ligne `CGU = Oui` pour Légifrance dans le tableau de l'application.
3. **Souscription** : case `Souscrite` cochée + `Appliquer les modifications` cliqué.
4. **Copie** : `client_secret` recopié sans espace ni retour ligne.
Si tout est OK, régénérer un nouveau couple OAuth (§ 3.6) et réimporter.

### S12 — « OpenLegi me dit "rate limit" alors que mes clés sont saisies »
Causes possibles : test de connexion non déclenché côté OpenLegi (clés enregistrées mais
pas activées), ou clés issues de l'application SANDBOX (quotas bas).
Action : déclencher le test ; si échec, repartir de § 3.3 pour créer une appli Prod.

### S13 — « Où trouver le token OpenLegi ? »
Reformulation : ce qu'il faut récupérer dans OpenLegi n'est **pas un token nu** mais
**l'URL complète du connecteur** déjà construite. Aller dans la console OpenLegi (après
connexion), section **« Mes services »** (parfois accessible via l'onglet
**« Connexion »**), repérer la ligne **« Legifrance »**, cliquer sur **« Copier »** à
droite de l'URL. Format obtenu : `https://mcp.openlegi.fr/legifrance/mcp?token=…` —
c'est cette URL entière qui se colle dans Claude.

### S14 — « Mon connecteur Claude refuse l'URL OpenLegi »
Vérifications :
1. **URL exacte** : doit ressembler à `https://mcp.openlegi.fr/legifrance/mcp?token=…`
   (format query, fourni par la console) ou `https://mcp.openlegi.fr/legifrance/mcp/token/…`
   (format path, équivalent). Pas de `www.`, pas d'espace, `mcp` apparaît deux fois,
   pas de slash final superflu.
2. **Token complet** sans espace ni saut de ligne (la copie depuis « Copier » de la
   console OpenLegi est la méthode la plus fiable).
3. **Test navigateur** : ouvrir l'URL → réponse au format SSE
   (`event: message\ndata: {...}`). 401/403 = token invalide ; 404 = URL malformée.

### S15 — « Sur Claude Desktop / Cowork, je ne vois pas où ajouter un connecteur custom »
**Deux chemins possibles existent à parité** : `Avatar › Paramètres › Connecteurs` et
`Personnaliser (Customize) › Connecteurs`. Selon la version, le rôle et la langue de
l'application, l'un peut exposer le bouton `Ajouter un connecteur personnalisé` et pas
l'autre. **Tester les deux** plutôt que d'insister sur l'un. Cas observé en pratique :
certains utilisateurs réussissent par `Paramètres › Connecteurs` après avoir échoué via
`Personnaliser`, et inversement.

### S16 — « Sur Claude.ai, l'écran Connecteurs n'a pas de bouton "ajouter custom" »
Activer les connecteurs MCP / « custom integrations » dans **Paramètres › Profil ›
Capacités** (ou « Feature preview »), recharger la page.

### S17 — « Le test "lister les codes juridiques" ne déclenche pas OpenLegi »
1. Toggle du connecteur **activé** dans la conversation (Personnaliser › Connecteurs) ?
2. Tous les outils MCP cochés à l'ajout (12 attendus) ?
3. Si non, supprimer/recréer le connecteur en cochant tous les outils.
4. Relancer une **nouvelle** conversation.

### S18 — « Erreur SSL / certificat lors de l'ajout du connecteur »
Pare-feu d'entreprise inspectant TLS et cassant SSE. Action : tester depuis un réseau
personnel. Sinon, demander à l'IT d'autoriser `*.openlegi.fr` et `*.piste.gouv.fr`
sans inspection profonde.

### S19 — « OpenLegi me demande une URL de rappel (callback) »
Mauvais flow OAuth choisi côté PISTE (Authorization Code au lieu de
client_credentials/Confidentiel). Régénérer un identifiant OAuth en choisissant
**Confidentiel** (§ 3.6).

### S20 — « Erreur 403 / "scope non autorisé" »
Causes possibles : `scope=openid` non transmis, ou Légifrance non souscrite sur
l'application Prod. Revérifier § 3.5. Sinon, contacter `support@openlegi.fr`.

### S21 — « Je veux supprimer mon application APP_SANDBOX_… »
Inutile et déconseillé. Elle ne consomme rien, certains tests internes PISTE l'utilisent.
La laisser en place et créer une appli Prod à côté.

### S22 — « Mon Client Secret ne s'affiche plus / je l'ai perdu »
Le secret est **réaffichable** autant de fois que voulu : onglet **Authentification** →
ligne OAuth concernée → lien **« Consulter le client secret »** (icône œil) → modal avec
bouton **« Copy »**. Si réellement perdu, utiliser **Actions › Régénérer** (invalide
l'ancien et tout système qui l'utilise).

### S23 — « Comment savoir si OpenLegi est bien en mode Prod ? »
1. URL du connecteur Claude doit pointer sur `mcp.openlegi.fr` (pas `localhost`).
2. Console OpenLegi → environnement actif affiché « Production ».
3. Fiche application PISTE → `Environment: PRODUCTION`.

### S24 — « J'ai changé de mot de passe PISTE — mes credentials sont-ils impactés ? »
Non. Le mot de passe du compte est indépendant du `client_id`/`client_secret` (lié à
l'application).

### S25 — « Quand régénérer le client_secret ? »
Suspicion de compromission, perte du secret, rotation périodique. Régénérer dans PISTE,
mettre à jour OpenLegi, retester. Aucune action côté Claude (l'URL du connecteur reste
inchangée).

### S26 — « Le nom de mon application est refusé »
Regex appliquée : `^[A-Za-z\d-_]+$`. Seuls **lettres**, **chiffres**, **`-`** et **`_`**
sont autorisés. Pas d'espace, pas d'accent, pas de point. Et le nom doit être unique
parmi vos applications.

### S27 — « La page Consentement CGU API est introuvable »
Menu principal **API** (déroulant à survol) → **« Consentement CGU API »**. URL directe :
`https://piste.gouv.fr/apimgt/consentement-cgu-api`.

### S28 — « Le Client ID, c'est le Client Secret ? »
Confusion fréquente. **Non** : ce sont **deux valeurs distinctes**, sur la **même ligne**
du tableau `Identifiants OAuth` :
- Le **Client ID** est affiché **directement** dans la colonne `Client ID` (UUID type
  `a1b2c3d4-e5f6-…`).
- Le **Client secret** est **caché** dans la colonne `Secret key` ; il n'apparaît qu'en
  cliquant sur le lien œil **« Consulter le client secret »**.
Toujours énoncer cette distinction dès l'étape OAuth, avant que l'utilisateur ne s'y
trompe.

### S29 — « OpenLegi me demande un "nom de clé", est-ce mon Client ID ? »
**Non**. La console OpenLegi (section **« Clés OAuth »**, bouton violet
**« Ajouter une clé Legifrance »**) demande un libellé interne destiné à étiqueter cette
clé dans son tableau de bord. **Choisir librement**, par exemple `OpenLegi-Prod` ou
`Legifrance-Prod`. Le `Client ID` PISTE et le `Client secret` PISTE sont saisis ensuite
dans les champs dédiés du même formulaire.

### S30 — « Je ne trouve pas le bouton "Personnaliser" dans Claude Desktop »
Trois explications possibles :
1. La langue d'interface est l'anglais → le libellé est **« Customize »**.
2. Le bouton n'est pas en bas de la zone de saisie sur cette version, mais dans le
   **menu latéral gauche**.
3. Cette version n'expose pas du tout `Personnaliser` ; passer alors par
   `Avatar › Paramètres › Connecteurs` (cf. S15).
Demander une **capture d'écran** plutôt que d'insister.

### S31 — « Ma clé OpenLegi reste "En attente de validation" / Timeout »
Statut **`En attente de validation`** (jaune) avec parfois message
**`Détail : Timeout de connexion au Gateway`**. Cause : OpenLegi a tenté un appel OAuth
vers `oauth.piste.gouv.fr` qui n'a pas répondu dans le délai imparti. Action :
1. Cliquer sur le bouton **`Tester`** sur la ligne de la clé pour relancer la validation
   (peut prendre jusqu'à 30 secondes).
2. Si le timeout persiste, vérifier que la clé est issue d'une application PISTE
   `PRODUCTION` réellement souscrite à Légifrance (§ S11).
3. Si la validation échoue toujours après 2-3 essais, **supprimer la clé** et la
   recréer après s'être assuré que le copier-coller du `Client Secret` n'a pas inclus
   d'espace insécable invisible.

### S32 — « OpenLegi me renvoie une erreur `invalid_client` »
Message d'erreur explicite côté OpenLegi. Cause quasi-certaine : confusion entre
**API Keys** et **Identifiants OAuth** sur PISTE.
Sur la fiche de l'application PISTE (onglet **`Authentification`**), il existe **deux
sections distinctes** :
- **`API Keys`** → produit une `API Key` + une `Clé secrète`. **Ces valeurs ne
  fonctionnent PAS dans OpenLegi.**
- **`Identifiants OAuth`** → produit `Client ID` + `Client secret` (**Consumer Key /
  Consumer Secret** dans le vocabulaire OpenLegi). **Ce sont ces valeurs qu'il faut
  coller** dans OpenLegi.
Action : retourner au § 3.6, vérifier qu'on a bien généré dans la section **OAuth**, pas
dans **API Keys**.

### S33 — « Si je régénère mon token OpenLegi, qu'est-ce qui se casse ? »
Avertissement explicite affiché par OpenLegi avant régénération :
> « Cette action est irréversible. Votre ancien token sera invalide immédiatement.
> Toutes vos configurations MCP (Claude Desktop, etc.) devront être mises à jour avec
> le nouveau token. »
Conséquence : **toutes les URL de connecteur déjà collées dans Claude (et autres clients
MCP) deviennent invalides** et doivent être recopiées depuis la nouvelle URL exposée
dans `Mes services`. Ne régénérer qu'en cas de compromission avérée.

### S34 — « OpenLegi me parle de "Consumer Key" et "Consumer Secret", PISTE de "Client ID" et "Client Secret" — c'est différent ? »
**Non, ce sont les mêmes valeurs**, désignées par deux vocabulaires :
- Côté OpenLegi : **Consumer Key** = `Client ID`, **Consumer Secret** = `Client Secret`.
- Côté PISTE : seul `Client ID` / `Client secret` apparaissent dans l'UI.
Ce double vocabulaire vient de l'historique OAuth/API Manager (où WSO2 et d'autres
implémentations parlent de Consumer Key/Secret).

---

## 7. Glossaire des libellés UI exacts (vérifiés)

### PISTE — navigation principale (utilisateur connecté)
| Élément | Libellé exact | Localisation |
|---|---|---|
| Menu | `ACCUEIL` | barre de navigation |
| Menu (déroulant) | `API` ▸ `Mes API` / `Consentement CGU API` | barre de navigation |
| Menu | `APPLICATIONS` | barre de navigation |
| Menu (déroulant) | `CENTRE D'AIDE` ▸ `Guide d'utilisation` / `FAQ` / `Support Utilisateur` | barre de navigation |

### PISTE — Liste des applications (`/apps`)
| Élément | Libellé exact |
|---|---|
| Titre | `Liste des applications` |
| Bouton (orange, haut droit) | `Créer une application` |
| Boutons sur sélection | `Activer` / `Désactiver` |
| Colonnes du tableau | `Nom`, `Statut`, `Description`, `Environment`, `Actions`, `Organization` |
| Valeurs `Statut` | `Approved`, etc. |
| Valeurs `Environment` | `SANDBOX`, `PRODUCTION` |
| Lien dans `Actions` | `Consulter les métriques` |

### PISTE — Création d'application (`/component/apiportal/application/create`)
| Élément | Libellé exact |
|---|---|
| Titre | `Création d'Application` |
| Section | `Général` |
| Champ | `Image:` (Add image, 1 Mo max) |
| Champ | `Organisation:` * (déroulant, défaut `Universelle`) |
| Champ | `Nom de l'application:` * (regex `^[A-Za-z\d-_]+$`) |
| Champ | `Description:` |
| Champ | `Téléphone:` |
| Champ | `Email:` * |
| Champ | `Information sur la structure:` * |
| Champ | `Responsable d'application:` * |
| Case | `Activer l'application` (cochée par défaut) |
| Bouton (orange) | `Sauvegarder l'application` |
| Bouton | `Annuler` |

### PISTE — Modifier l'application
| Élément | Libellé exact |
|---|---|
| Titre | `Modifier l'application: <Nom>` |
| Onglets | `Détails`, `Authentification` |
| Lien sous le formulaire | `Cliquez ici pour accéder à la page de consentement` |
| Section | `Sélectionner les API` |
| Colonnes | `Nom de l'API`, `Version`, `La description`, `Tags`, `Souscrite`, `Soumis à validation`, `CGU` |
| Valeurs `Tags` | `PRODUCTION` ou `SANDBOX` (selon api-manager) |
| Valeurs `CGU` | `Oui` / `Non` |
| Lien (col. validation) | `Demander l'accès` (pour API à approbation) |
| Bouton (orange) | `Appliquer les modifications` |
| Bouton | `Annuler` |

### PISTE — Onglet Authentification
| Élément | Libellé exact |
|---|---|
| Sections (repliables) | `API Keys`, `Identifiants Oauth`, `Identifiants externes`, `Scopes` |
| Bouton de la section | `Générer` (lien/bouton qui ouvre le formulaire intermédiaire) |
| Formulaire intermédiaire OAuth — champ | `Type d'application` (radio) |
| Valeurs `Type d'application` | `Confidentielle` (cochée par défaut, équiv. client_credentials), autres modes |
| Formulaire intermédiaire OAuth — champ | `URL de rappel` (à laisser vide pour OpenLegi) |
| Formulaire intermédiaire OAuth — champ | `Certificat X.509` (à laisser vide) |
| Formulaire intermédiaire OAuth — bouton (orange) | `Générer un identifiant` |
| Message de confirmation | `OAuth client a été créé avec succès` |
| Colonnes API Keys | `API Key`, `JavaScript Origins`, `Créé`, `Secret key`, `Actions` |
| Colonnes OAuth | `Client ID`, `Type`, `Javascript Origines`, `URL de rappel`, `Créé`, `Secret key`, `Actions` |
| Valeurs `Type` (tableau OAuth) | `Confidentiel` |
| Lien (col. Secret key) | `Consulter le client secret` (icône œil) |
| Modal | bouton `Copy` |
| Action | `Régénérer` (sous-menu Actions) |

### PISTE — Page Consentement CGU API (`/apimgt/consentement-cgu-api`)
| Élément | Libellé exact |
|---|---|
| Titre principal | `Consentement CGU` |
| Sous-titre | `Cette page vous permet de consentir aux CGU des API pour pouvoir les consommer` |
| Bouton (orange, haut droit) | `Valider mes choix CGU` |
| Section | `Sélectionnez les API` |
| Champ | `Recherche` |
| Bouton | `Recherche API` |
| Colonnes | `Nom de l'API`, `Environnement`, `CGU` |
| Valeurs `Environnement` | `PROD`, `SANDBOX` |
| PDF Légifrance | `CGU_Legifrance_API_VF_15-12-2022.pdf` |
| PDF Judilibre | `CGU_open_data_V8.pdf` |

### OpenLegi — console authentifiée (`auth.openlegi.fr/users/dashboard/`)
| Élément | Libellé exact (vérifié 2026-04-28) |
|---|---|
| Header (utilisateur connecté) | `Dashboard` (lien) + `Déconnexion` (bouton) |
| Titre Dashboard | `Tableau de bord MCP Legifrance` |
| Sous-titre | `Bienvenue [nom], gérez votre accès aux outils juridiques MCP.` |
| Bandeau d'info (clés actives) | `Clés OAuth Personnelles Actives` + `Vous utilisez vos propres clés PISTE Legifrance ([UUID])` |
| Onglets (pilules) | `Connexion`, `Clés OAuth`, `Consommation`, `Support` |
| **Onglet Connexion — colonne gauche** | section `Informations du compte` (Nom d'utilisateur, Email, Type de compte, Membre depuis, toggle `Recevoir les actualités OpenLegi`, lien `Gérer mon compte`) |
| **Onglet Connexion — colonne droite (haut)** | section `Token d'authentification` ; champ `Votre token API :` ; boutons `Copier` (gris) et `Régénérer` (orange) |
| Modal régénération | titre `Regenerer le token` ; texte d'avertissement ; boutons `Annuler` / `Confirmer la regeneration` |
| **Onglet Connexion — colonne droite (bas)** | section `Mes services` (icône liste) |
| Carte Légifrance (active) | tag `Légifrance` (rosé) + description `JORF, Codes, Jurisprudence, LODA` + badge vert `Actif` + champ URL readonly + bouton `Copier` |
| Cartes RNE / BOFiP / EUR-Lex / BODACC | tag + description + bouton `Demander l'activation` |
| Carte Judilibre | tag `Judilibre` + badge gris `Bientôt` (non activable) |
| Avertissement bas de section | `Important : Gardez ce token secret. Il vous donne acces aux outils MCP authentifies.` (jaune) |
| **Onglet Clés OAuth — bandeau** | `Clés personnelles actives` + `Clé utilisée : [UUID]` |
| Section service | tag `Légifrance` + lien `piste.gouv.fr` |
| Liste des clés (par carte) | UUID titre, badge `Active` (vert) ou `En attente de validation` (jaune), `Client ID`, `Créée le`, `Dernière validation`, boutons `Tester` / `Supprimer` |
| Erreur de validation | `Détail : Timeout de connexion au Gateway` (sur la carte de la clé en attente) |
| Bouton ouverture du formulaire d'ajout | `Ajouter une clé Legifrance` (violet) |
| Champs du formulaire | `Nom de la clé` *, `Client ID` *, `Client Secret` * |
| Avertissement intégré au formulaire | `Attention : utilisez vos identifiants OAuth, pas les API Keys. […] Seuls les identifiants OAuth (Consumer Key / Consumer Secret) fonctionnent ici.` |
| Vocabulaire OpenLegi | `Consumer Key` = `Client ID` PISTE ; `Consumer Secret` = `Client Secret` PISTE |
| Boutons formulaire | `Créer la clé` / `Annuler` |
| Bandeau bleu en bas | `Mode Illimité — Vous utilisez vos propres clés OAuth - aucune limite de débit ne s'applique.` |
| Bandeau gris en bas | `RNE (INPI) - Bientôt disponible` |
| **Onglet Support** | bouton `Nouveau ticket` ; liste tickets ; lien `support@openlegi.fr` |

### Claude.ai
| Élément | Libellé |
|---|---|
| Menu avatar | `Paramètres` |
| Menu gauche | `Connecteurs` (ou `Integrations`) |
| Bouton | `Ajouter un connecteur personnalisé` |
| Capacités | `Domaines supplémentaires autorisés` |

### Claude Desktop / Cowork — deux chemins équivalents (selon version)
| Chemin | Libellés |
|---|---|
| **A** | Avatar / nom utilisateur › `Paramètres` › `Connecteurs` › `Ajouter un connecteur personnalisé` |
| **B** | `Personnaliser` (`Customize` en EN) (zone de saisie ou menu latéral) › `Connecteurs` (`Connectors`) › `+` ou `Ajouter un connecteur personnalisé` (`Add custom connector`) |

---

## 8. Anti-patterns récurrents (top 10 par fréquence)

1. **Utilisation de l'application `APP_SANDBOX_<email>` auto-créée** au lieu de créer une
   application Prod (§ S04, S05, S11).
2. **Cocher la CGU sans cliquer le bouton orange `Valider mes choix CGU`** (§ S07).
3. **Cocher la ligne `Légifrance — SANDBOX`** au lieu de `Légifrance — PROD` (§ S07).
4. **Croire que valider les CGU = souscrire** : la souscription est une action séparée
   sur la fiche de l'application (§ S09).
5. **Confondre les `API Keys` PISTE avec les `Identifiants OAuth`** : OpenLegi rejette
   les API Keys avec une erreur `invalid_client` (§ S32).
6. **Confusion `Client ID` / `Client secret`** : l'utilisateur croit qu'il s'agit de la
   même valeur ou recopie deux fois la même (§ S28).
7. **Confusion vocabulaire `Consumer Key` (OpenLegi) / `Client ID` (PISTE)** : ce sont
   les mêmes valeurs (§ S34).
8. **Sur-prescription d'un seul chemin Claude Desktop** (`Personnaliser` ou `Paramètres`)
   alors que les deux coexistent et qu'aucun n'est universel (§ S15, S30).
9. **Recherche d'un "token nu" dans OpenLegi** alors que la console fournit
   directement l'URL complète prête à coller via `Connexion › Mes services › Copier`
   (§ S13).
10. **Choix d'un type OAuth incorrect** (avec callback) au lieu de `Confidentielle`
    (§ S19).

---

## 9. Tests de validation à proposer

1. **Lister les codes** : « Liste les codes juridiques disponibles via OpenLegi. »
   → appel `lister_codes_juridiques`, retour ≥ 73 codes.
2. **Article du Code civil** : « Donne-moi l'article 1240 du Code civil via OpenLegi. »
   → appel `rechercher_code` avec `code_name=Code civil`, `search=1240`.
3. **Jurisprudence** : « Cherche les arrêts récents de la Cour de cassation sur la
   responsabilité civile contractuelle. »
   → appel `rechercher_jurisprudence_judiciaire`.
4. **Test négatif** (tronquer le token dans l'URL) → erreur 401/403 attendue.

---

## 10. FAQ

- **OpenLegi est-il payant ?** Compte gratuit avec quota mutualisé ; quotas relevés avec
  clés PISTE. EUR-Lex / RNE / Judilibre = abonnement.
- **PISTE est-il payant ?** Non.
- **Mon token OpenLegi expire-t-il ?** En principe non, sauf rotation manuelle.
- **OpenLegi voit-il mes prompts Claude ?** Seuls les arguments des appels d'outils
  (ex. `Code civil`, `1240`). Le contenu général de la conversation reste chez Anthropic.
- **Puis-je partager mon token ?** Techniquement oui, mais usage non transférable à un
  tiers (responsabilité personnelle).

---

## 11. Arbres de décision

### 11.1 « Mon connecteur Claude ne fonctionne pas »
```
URL au format attendu (mcp.openlegi.fr/legifrance/mcp?token=… ou /token/…) ?
   │ non → § S14
   │ oui
URL collée intégralement depuis « Mes services › Copier » d'OpenLegi ?
   │ non → recopier (§ S13)
   │ oui
Test browser de l'URL → réponse SSE (event: message) ?
   │ non → 401/403 = token invalide ; 404 = URL malformée
   │ oui
Connecteur activé (toggle ON) dans la conversation ?
   │ non → activer
   │ oui
Outils MCP cochés (12 attendus) ?
   │ non → recréer en cochant tous (§ S17)
   │ oui
→ vérifier réseau/pare-feu (§ S18)
```

### 11.2 « PISTE refuse mes credentials côté OpenLegi »
```
Erreur OpenLegi = invalid_client ?
   │ oui → confusion API Keys vs OAuth (§ S32) — recopier depuis Identifiants OAuth
   │ non
Erreur = Timeout de connexion au Gateway ?
   │ oui → § S31 — bouton Tester ; persiste → recréer
   │ non
Application en PRODUCTION ?
   │ non → créer une appli manuellement (§ S04, S05)
   │ oui
CGU « Légifrance — PROD » validées (bouton orange cliqué) ?
   │ non → § S07, S08, S27
   │ oui
Ligne « Légifrance » Souscrite + « Appliquer les modifications » cliqué ?
   │ non → § S09
   │ oui
Client ID et Client secret recopiés séparément, sans espace ?
   │ non → § S28 puis recopier (§ S22)
   │ oui
Type OAuth = Confidentielle (et non avec callback) ?
   │ non → régénérer (§ S19)
   │ oui
→ test OAuth direct (§ 12)
```

---

## 12. Test bas-niveau OAuth PISTE (CLI)

```bash
curl -X POST "https://oauth.piste.gouv.fr/api/oauth/token" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "client_id=<CLIENT_ID>" \
  -d "client_secret=<CLIENT_SECRET>" \
  -d "scope=openid"
```
Réponse 200 attendue avec `access_token`, `expires_in`, `token_type=Bearer`.
- 401 → credentials invalides ou Sandbox utilisée.
- 403 → CGU/souscription manquantes.
- 400 → grant_type ou scope mal formé.

---

## 13. Ce que l'assistant ne doit JAMAIS faire

- Demander le mot de passe PISTE / OpenLegi.
- Réclamer le `client_secret` complet ou le `token` OpenLegi en clair sans avertir des
  risques.
- Inventer un libellé UI absent du § 7.
- Promettre un délai de support PISTE ou OpenLegi (pas de SLA connu).
- Suggérer des comptes ou tokens partagés.

---

## 14. Mise à jour

État vérifié le **2026-04-28** sur PISTE V3.4.7. Si la divergence avec ce que voit
l'utilisateur est importante (libellés réorganisés, nouvelle UI), faire confiance à
l'écran et signaler la divergence à l'auteur du document.
