fr-eli-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fr-eli-mcpSearch CODE for Article L. 1234-5"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
fr-eli-mcp
Instalacja (jedna komenda)
Opublikowany na PyPI + MCP Registry (io.github.matematicsolutions/fr-eli-mcp). Uruchomienie bez klonowania:
uvx fr-eli-mcpWymaga kluczy PISTE w env: PISTE_CLIENT_ID, PISTE_CLIENT_SECRET (Legifrance/PISTE).
Konfiguracja klienta MCP (stdio):
{ "mcpServers": { "fr-eli-mcp": { "command": "uvx", "args": ["fr-eli-mcp"] } } }(Budowanie ze źródeł — niżej.)
An MCP server for the French Legifrance API via PISTE. It searches French legislation (LODA laws & decrees, codes), case law from three jurisdictions - Cour de cassation / cours d'appel (JURI), the Conseil constitutionnel (CONSTIT - QPC/DC decisions) and the administrative courts (CETAT - Conseil d'Etat, cours administratives d'appel, tribunaux administratifs) - plus CNIL deliberations (CNIL), collective labour agreements (KALI) and company-level agreements (ACCO), and returns verbatim text with verifiable citations. Part of the eu-legal-mcp line of national legal connectors by MateMatic.
Every response carries the citation contract: a stable eli_uri, a human_readable_citation
(French convention) and a resolvable source_url.
Read-only. The server only queries Legifrance and writes a local audit log. It never modifies official text and never sends anything beyond your query / document id.
Related MCP server: mpc-legifrance
Tools
Tool | What it does |
| Keyword search a |
| Consult a LODA law/decree by |
| Verbatim text of a single article by |
| A court decision by |
| A CNIL deliberation by |
| A collective labour agreement text by |
| A company-level agreement by |
Fonds covered (live totals, sandbox, 2026-07-08)
Fond | Corpus | Verified total |
| CNIL deliberations | >= 26 759 ( |
| Collective labour agreements (conventions collectives) | >= 35 790 |
| Company-level agreements | >= 387 656 |
Jurisdictions covered
Fond | Court(s) | Id prefix | Native ECLI |
| Cour de cassation, cours d'appel |
| Yes |
| Conseil constitutionnel (QPC + DC decisions, ~7 400+ live on PISTE) |
| Yes ( |
| Conseil d'Etat, cours administratives d'appel (CAA), tribunaux administratifs (TA) |
| Yes for Conseil d'Etat; frequently |
Conseil constitutionnel decisions get the French citation convention: Cons. const., decision n° 2025-1173 QPC du 7 novembre 2025 - [case name]. JURI/CETAT decisions cite the Legifrance titre
(court, formation, date, dossier number) verbatim.
Judilibre (
api.piste.gouv.fr/cassation/judilibre) was evaluated as an alternative Cour de cassation source but requires its own PISTE API subscription beyond the Legifrance one already held by this connector. Re-verified 2026-07-08: a valid Legifrance token (granted scopeopenid resource.READ) gets403on the sandbox host for every endpoint and auth shape tried (Bearer,KeyId, no-auth ->400), and the sandbox application is rejected outright by the production OAuth endpoint (invalid_client). Subscribing the Judilibre API to the PISTE application is a dashboard action outside this connector. Not integrated -JURIalready covers Cour de cassation case law through the existing Legifrance subscription.
A note on ELI vs ECLI
France has an official ELI scheme, but the PISTE lf-engine-app consult API returns the native
ELI field null for the legislation we tested. Following this line's rule - say what you do not
have, never fabricate an ELI - eli_uri carries the stable, resolvable Legifrance resource URL
(CID-keyed), not a /eli/... string parsed from prose. Each response repeats this in eli_note.
Case law is different: the API returns a native, authoritative ECLI for Cour de cassation (e.g.
ECLI:FR:CCASS:2025:C100399), Conseil constitutionnel (e.g. ECLI:FR:CC:2025:2025.1173.QPC) and
Conseil d'Etat (e.g. ECLI:FR:CECHR:2026:506507.20260529), surfaced verbatim in fr_get_decision.
CAA/TA decisions under CETAT frequently have no ECLI - the field is null, never fabricated.
Configuration
Legifrance requires OAuth2 application credentials from a free PISTE account
(piste.gouv.fr → Applications → subscribe to the Legifrance API → OAuth Credentials).
Credentials are read from the environment only:
Variable | Meaning |
| OAuth token endpoint (sandbox default shown in |
| Legifrance |
| Your PISTE application client id (required). |
| Your PISTE application client secret (required). |
| Disk cache dir (default |
| Audit log dir (default |
Copy .mcp.json.example to .mcp.json (gitignored) and fill in your credentials, or set the
variables in your host environment. The OAuth token is cached in memory and refreshed automatically.
Install
py -3.13 -m venv .venv
.\.venv\Scripts\python.exe -m pip install -e ".[dev]" # Windows
# or: python -m pip install -e ".[dev]" # POSIXTests
pytest tests/test_instructions_drift.py tests/test_parse.py # offline, no creds
pytest tests/test_smoke.py -v # live, needs PISTE creds in .envDistribution
Because Legifrance requires a PISTE key, this connector is distributed through the PATRON / appliance channel (governed), not casual drop-in download. See the eu-legal-mcp line notes.
Licence
Apache-2.0. Legifrance content is © the French Republic / DILA and subject to the Legifrance / PISTE terms of use; this software only retrieves and cites it.
This server cannot be installed
Maintenance
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/matematicsolutions/fr-eli-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server