dahliyaal avatar

Justicelibre

dahliyaal/justicelibre

Exposes 3.3 million French court decisions and 1.5 million consolidated legal articles through 29 MCP tools covering everything from Cour de cassation to CJUE to CEDH. The killer feature is get_law_article with historical versioning so you can pull the exact text of Code Civil article 1128 as it read in 1992 versus today. Search runs BM25 ranking with authority bonuses, fan-out queries hit all 40 administrative tribunals in parallel, and cross-reference tools show which decisions cite specific articles. Runs over streamable HTTP with no auth required, making it immediately usable from Claude.ai or ChatGPT without OAuth friction. Built as an open alternative to paywalled services like Doctrine and Lexis that cost 50 to 200 euros monthly.

GitHub stars
12
tools
19
transport
HTTP
last updated
Oct 15, 2026

Install

From registry metadata
$ npx add-mcp https://justicelibre.org/mcp --name justicelibre

Run in your terminal. add-mcp asks which agents to add it to (Claude Code, Codex, Cursor and more). Add -g to install it for every project.

Review the command, arguments and environment values before installing. MCP servers run with your local permissions.

Other ways

Claude Code

$ claude mcp add --transport http justicelibre https://justicelibre.org/mcp

Run in your terminal. Add --scope user to make it available in every project.

Tools

Verified live · 19 tools

Verified live against the running server on Nov 6, 2026.

search_doctrineOpinions of the CADA (access to administrative documents), decisions of the Défenseur des droits, conclusions of the CE's rapporteurs publics, BOFiP (tax guidance), Code du travail numérique, CNIL deliberations. These are NOT court decisions: an opinion does not bind the judge...4 params

Opinions of the CADA (access to administrative documents), decisions of the Défenseur des droits, conclusions of the CE's rapporteurs publics, BOFiP (tax guidance), Code du travail numérique, CNIL deliberations. These are NOT court decisions: an opinion does not bind the judge...

Parameters* required
limitinteger
max 100default: 20
offsetinteger
pagination (max 5000)default: 0
query*string
keywords in French (all required); "exact phrase" in double quotes; OR/AND/NOT/NEAR in UPPERCASE between two words are operators (NEAR = within 10 words); lowercase words are plain words; symbols (...
sourcestring
optional filter among cada, ddd, ariane_crp, bofip, ctn, cnil (CNIL deliberations)default:
get_law_articleArticle of a French code or statute, as in force on a date (default: today). `code`: abbreviation ("CT", "cc"), name ("code du travail"), LEGITEXT or statute ("loi 91-647", "loi du 1er juillet 1901"); list: about(topic="codes"). European texts: "CEDH" (protocols: num="P1-1"),...6 params

Article of a French code or statute, as in force on a date (default: today). `code`: abbreviation ("CT", "cc"), name ("code du travail"), LEGITEXT or statute ("loi 91-647", "loi du 1er juillet 1901"); list: about(topic="codes"). European texts: "CEDH" (protocols: num="P1-1"),...

Parameters* required
codestring
abbreviation, code name ("code du travail"), LEGITEXT or statute ("loi 91-647", "loi du 1er juillet 1901"); list: about(topic="codes"); also "CEDH" (protocols: num="P1-1"), "CHARTE_UE", "TUE", "TFU...default:
datestring
ISO date YYYY-MM-DD (optional; if absent, the version in force). With the date of a decision, the article is served as it stood on that date.default:
fallback_currentboolean
date before the first version: false = error `not_in_force_at_date` (`premiere_version`, `ancien_numero`); true = current text flagged `hors_date`.default: false
numstring
article number ("1128", "L1152-1") or "LEGIARTI…"; empty with code="LEGITEXT…" (outside codes) or "CEDH"…: whole text, 120/page.default:
offsetinteger
whole text: value of `suite` (120, 240…).default: 0
viewstring
text (default: the article) | versions (its successive wordings) | map (texts that created, amended, cite or implement it).default: text
search_decisions_citingCourt decisions that EXPLICITLY cite an article ("article 1240 du code civil", "art. L. 1152-1 du code du travail"). Does not find indirect references or citations without an article number: searching by concept is for `search`. Example: search_decisions_citing(code="CC", num=...4 params

Court decisions that EXPLICITLY cite an article ("article 1240 du code civil", "art. L. 1152-1 du code du travail"). Does not find indirect references or citations without an article number: searching by concept is for `search`. Example: search_decisions_citing(code="CC", num=...

Parameters* required
code*string
as in get_law_article (abbreviation, name or LEGITEXT)
limitinteger
number of decisions per source (default 20, max 50)default: 20
num*string
article number (e.g. "L1152-1", "1240")
sourcesvalue
optional list of sources to query among ["dila", "jade", "cedh", "cjue"]. Default: all.
searchSearches all sources (French and European case law, codes and statutes, Journal officiel, collective agreements, doctrine), expanding to legal synonyms. Entry point for an open question; for one specific court, use `search_case_law`. A citation ("Cass. soc. 11 mai 2022", an EC...7 params

Searches all sources (French and European case law, codes and statutes, Journal officiel, collective agreements, doctrine), expanding to legal synonyms. Entry point for an open question; for one specific court, use `search_case_law`. A citation ("Cass. soc. 11 mai 2022", an EC...

Parameters* required
date_maxstring
YYYY-MM-DDdefault:
date_minstring
YYYY-MM-DD (all sources)default:
expand_synonymsboolean
expand to legal synonyms (default true)default: true
limitinteger
results (max 100)default: 30
query*string
keywords or a citation; OR/AND/NOT/NEAR in UPPERCASE between two words are operators (NEAR = within 10 words); lowercase words are plain words
sortstring
relevance | date_desc | date_ascdefault: relevance
sourcesvalue
dila, jade, legi, cedh, cjue, kali, jorf, doctrine (empty: all)
search_case_lawDecisions of one court or court family, by relevance or by date (latest decisions: `search_recent_admin_decisions`). Keywords in French. ECHR, CJEU: texts sometimes in English only. Example: search_case_law(query="licenciement inaptitude", court="CASS") Args: query: keywords (...10 params

Decisions of one court or court family, by relevance or by date (latest decisions: `search_recent_admin_decisions`). Keywords in French. ECHR, CJEU: texts sometimes in English only. Example: search_case_law(query="licenciement inaptitude", court="CASS") Args: query: keywords (...

Parameters* required
courtstring
ADMIN (CE+CAA+TA, default) | CE | CAA | TA | ARIANEWEB | JUDICIAIRE | CASS | CA | TJ | TCOM | CONSTIT | CEDH | CJUE | CNDAdefault:
court_namestring
"TA Lille", "CAA Douai" (ADMIN, CE, CAA, TA)default:
date_maxstring
samedefault:
date_minstring
YYYY-MM-DD (not ARIANEWEB, CEDH, CJUE)default:
limitinteger
per page (max 50)default: 20
naturestring
QPC, DC… (CONSTIT)default:
numero_rgstring
RG number (CA, JUDICIAIRE)default:
offsetinteger
pagination (pass next_offset as is)default: 0
querystring
keywords (optional with numero_rg), plural included except "in double quotes"; OR/AND/NOT/NEAR in UPPERCASE between two words are operators (NEAR = within 10 words); lowercase words are plain wordsdefault:
sortstring
relevance | date_desc | date_asc (ADMIN, CE, CAA, TA, CNDA)default: relevance
search_recent_admin_decisionsLatest decisions from the administrative courts' open data (daily mirror), sorted by date: what a court has just decided (by relevance: `search_case_law`). All words required (singular or plural); "in double quotes": exact form; OR/AND/NOT/NEAR in UPPERCASE between two words a...7 params

Latest decisions from the administrative courts' open data (daily mirror), sorted by date: what a court has just decided (by relevance: `search_case_law`). All words required (singular or plural); "in double quotes": exact form; OR/AND/NOT/NEAR in UPPERCASE between two words a...

Parameters* required
courtstring
CE | CE-CAA (CE + CAA) | code of a TA or CAA ("TA59", "CAA69") | ALL_TA (the 40 TA) | ALL_CAA (the 9 CAA)default: CE
date_maxstring
Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne.default:
date_minstring
Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne.default:
limitinteger
results (one court; max 100)default: 20
limit_per_courtinteger
results per court (ALL_TA, ALL_CAA; max 100)default: 5
querystring
keywords; empty = all decisions of the courtdefault:
total_limitinteger
overall cap (ALL_TA, ALL_CAA; 0 = no cap) date_min, date_max: YYYY-MM-DD, date of the decision (optional)default: 60
get_decisionFull text of a decision, by `id` or by `numero` (+ `court`). Several decisions with that number: list `decisions` (ECHR/CJEU: the one judgment is served, the rest in `autres_documents`). An administrative number alone ("2200433") is refused; CE: see `homonymes`. Also reads doc...6 params

Full text of a decision, by `id` or by `numero` (+ `court`). Several decisions with that number: list `decisions` (ECHR/CJEU: the one judgment is served, the rest in `autres_documents`). An administrative number alone ("2200433") is refused; CE: see `homonymes`. Also reads doc...

Parameters* required
courtstring
CE | CAA | TA | CONSTIT | CASS | CA | TJ | TCOM | CPH | CEDH | CJUE | CNDAdefault:
court_namestring
"TA Lyon", "CA Douai"default:
idstring
id from a search (JURITEXT, CETATEXT, 001-…, CELEX, JORFTEXT…) or a judicial/European case numberdefault:
naturestring
DC, QPC… (CONSTIT, shared number)default:
numerostring
case, appeal (pourvoi), RG, commercial court, ECHR or CJEU numberdefault:
offsetinteger
long document (over 100,000 characters, served in pages): value of `pagination.suite`default: 0
search_legislationKeyword search in French codes and statutes (LEGI), the Journal officiel (JORF), agreements (KALI) or EU law. Known article: `get_law_article`. Keywords in French. Example: search_legislation(query="harcèlement moral", code="CT") Agreement (corpus="kali"): idcc="1486" without...10 params

Keyword search in French codes and statutes (LEGI), the Journal officiel (JORF), agreements (KALI) or EU law. Known article: `get_law_article`. Keywords in French. Example: search_legislation(query="harcèlement moral", code="CT") Agreement (corpus="kali"): idcc="1486" without...

Parameters* required
codestring
code abbreviation or name ("CT", "code du travail", "CEDH", "RGPD")default:
corpusstring
legi | jorf | kali | europe (CEDH, treaties) | ue (EU acts)default: legi
date_maxstring
YYYY-MM-DD (legi, jorf)default:
date_minstring
YYYY-MM-DD (legi, jorf)default:
idccstring
kali: IDCC numberdefault:
limitinteger
per page (max 50)default: 20
naturestring
jorf: LOI, DECRET, ARRETE…default:
offsetinteger
offsetdefault: 0
querystring
keywords (all required; "in double quotes": exact form), or a KALI id; optional for kali with idcc; OR/AND/NOT/NEAR in UPPERCASE between two words are operators (NEAR = within 10 words); lowercase...default:
toutboolean
kali: repealed texts toodefault: false
resolve_referenceTurns a reference into an identifier and an official link: statute or decree number ("91-647", "loi n° 78-17") → the text; identifier (LEGIARTI, LEGITEXT, JORFTEXT, CETATEXT, JURITEXT, ECLI, CELEX of a judgment or of a text, HUDOC) → URL at the source; decision citation ("Cass...3 params

Turns a reference into an identifier and an official link: statute or decree number ("91-647", "loi n° 78-17") → the text; identifier (LEGIARTI, LEGITEXT, JORFTEXT, CETATEXT, JURITEXT, ECLI, CELEX of a judgment or of a text, HUDOC) → URL at the source; decision citation ("Cass...

Parameters* required
datestring
YYYY-MM-DD (article version in the URL)default:
legitextstring
parent LEGITEXT (for a LEGIARTI of a text outside the codes)default:
reference*string
text number, identifier or decision citation
get_legislative_historyLegislative history (travaux préparatoires) of a French statute or bill (Assemblée nationale files since 2012; key dates only before). Each step of `parcours` lists its documents (bill, reports, opinions, adopted or rejected texts: number, date, authors, official URL), votes,...4 params

Legislative history (travaux préparatoires) of a French statute or bill (Assemblée nationale files since 2012; key dates only before). Each step of `parcours` lists its documents (bill, reports, opinions, adopted or rejected texts: number, date, authors, official URL), votes,...

Parameters* required
limitinteger
number of files (max 20)default: 5
loistring
statute number ("2016-1547")default:
querystring
keywords from the file title (French); OR/AND/NOT in UPPERCASE between two words are operators; lowercase words are plain wordsdefault:
stepsboolean
include the stages of the shuttle between the two chambersdefault: true
search_directoryPublic addresses and contacts in France: courts, court registries (greffes), town halls, CCAS, prefectures, public services. Example: search_directory(query="tribunal judiciaire Dunkerque") Args: query: name, town or type of office (French); OR/AND/NOT in UPPERCASE between two...4 params

Public addresses and contacts in France: courts, court registries (greffes), town halls, CCAS, prefectures, public services. Example: search_directory(query="tribunal judiciaire Dunkerque") Args: query: name, town or type of office (French); OR/AND/NOT in UPPERCASE between two...

Parameters* required
categoryvalue
directory category (optional)
limitinteger
number of results (max 200)default: 20
query*string
name, town or type of office (French); OR/AND/NOT in UPPERCASE between two words are operators ("Lille OR Douai"); lowercase words are plain words
sourcevalue
directory source (optional)
aboutWhat JusticeLibre covers (sources, volumes, freshness, terms of use), the list of administrative courts and their codes, or the list of codes and statutes accepted by get_law_article. Example: about(topic="codes") Args: topic: service | courts | codes1 params

What JusticeLibre covers (sources, volumes, freshness, terms of use), the list of administrative courts and their codes, or the list of codes and statutes accepted by get_law_article. Example: about(topic="codes") Args: topic: service | courts | codes

Parameters* required
topicstring
service | courts | codesdefault: service
delete_account_itemPermanently deletes one object of the user's JusticeLibre account: a case file (with all its content), a saved reference, a subfolder, a note, or an AI skill proposal not yet activated (`skill`, id s_… or p_…). No recycle bin. confirm=true states the user's explicit agreement;...3 params

Permanently deletes one object of the user's JusticeLibre account: a case file (with all its content), a saved reference, a subfolder, a note, or an AI skill proposal not yet activated (`skill`, id s_… or p_…). No recycle bin. confirm=true states the user's explicit agreement;...

Parameters* required
confirmboolean
true = the user explicitly agreed; otherwise nothing is deleted.default: false
id*string
"d_…", "e_…", "c_…", "n_…", or "s_…"/"p_…".
what*string
"folder", "element" (saved reference), "subfolder", "note" or "skill" (AI skill proposal not yet activated).one of folder · element · subfolder · note · skill
check_citationsFinds where a quoted passage comes from (paste the quotation alone, ≤ 3,000 characters, original language). Check each result against the source (link provided). Returns texts and decisions containing it, with a match % (100 = word for word, ignoring punctuation, case, accents...1 params

Finds where a quoted passage comes from (paste the quotation alone, ≤ 3,000 characters, original language). Check each result against the source (link provided). Returns texts and decisions containing it, with a match % (100 = word for word, ignoring punctuation, case, accents...

Parameters* required
text*string
the quotation alone (a sentence or a paragraph), 3,000 characters at most.
get_account_itemReads one object of the user's JusticeLibre account, without changing anything: the account itself (case files with their "d_…" ids, permissions of this connection, skills applied to new case files, tickets and their limits), a whole case file (case sheet, subfolders, saved re...2 params

Reads one object of the user's JusticeLibre account, without changing anything: the account itself (case files with their "d_…" ids, permissions of this connection, skills applied to new case files, tickets and their limits), a whole case file (case sheet, subfolders, saved re...

Parameters* required
idstring
Id of the case file "d_…", item "e_…" or ticket "t_…"; omit for kind=account.
kind*string
account: the user's account (case files, permissions, active skills, tickets and limits), no id; case_file: one whole case file ("d_…"); item: one saved reference ("e_…") with its notes and the cas...one of account · case_file · item · ticket
create_account_itemCreates one of: a case file, a subfolder, saved references (articles, statutes, decisions, CADA opinions, CNIL deliberations, doctrine), an AI note, a skill proposal (inactive until the user activates it). Never changes existing content. Fields marked "kind: …" apply to that k...14 params

Creates one of: a case file, a subfolder, saved references (articles, statutes, decisions, CADA opinions, CNIL deliberations, doctrine), an AI note, a skill proposal (inactive until the user activates it). Never changes existing content. Fields marked "kind: …" apply to that k...

Parameters* required
assistantstring
note: assistant name, e.g. "Claude", "ChatGPT".
case_file_idstring
Case file "d_…"; not for case_file; optional for general skill_proposal.
familystring
case_file: jud, adm, ce, eu or "".one of · jud · adm · ce · eu
item_idstring
note: saved reference "e_…" of this case file; omit for a general note.
kind*string
case_file (requires title; permission creer_dossiers), subfolder (case_file_id, name; ranger), reference (case_file_id, references; references), note (case_file_id, text, assistant; notes_ia), skil...one of case_file · subfolder · reference · note · skill_proposal
namestring
subfolder, skill_proposal: name.
pinnedboolean
note: true = follows its text into all case files (needs item_id).
referencesarray
reference: 1-20, checked against the database; all or nothing.
replacesstring
skill_proposal: skill "s_…"/"p_…" to replace once activated.
scopestring
skill_proposal: general or case_file.one of general · case_file
subfolder_idstring
reference: Subfolder "c_…"; "" = default "À ranger" area. Default for all references.
subtitlestring
case_file: subtitle.
textstring
note: text; skill_proposal: the working method, written as instructions.
titlestring
case_file: title.
update_account_itemSets the state of an existing case file (title, subtitle, case sheet), subfolder (name), saved reference (subfolder, set aside with a reason) or AI note (text, pinned, set aside). Only the fields given change; giving the same values again changes nothing. Overwrites the previo...19 params

Sets the state of an existing case file (title, subtitle, case sheet), subfolder (name), saved reference (subfolder, set aside with a reason) or AI note (text, pinned, set aside). Only the fields given change; giving the same values again changes nothing. Overwrites the previo...

Parameters* required
assistantstring
note: assistant name stored with the new text.
case_file_idstring
note, with pinned false: case file it goes back to (default: most recent holding the text).
deadlinesarray
case_file: replaces the list; dates copied from the user.
familystring
case_file: jud, adm, ce, eu or "".one of · jud · adm · ce · eu
id*string
"d_…", "c_…", "e_…" or "n_…", matching kind.
jurisdictionstring
case_file: court or authority.
kind*string
case_file (permission fiche), subfolder (ranger), item = saved reference (subfolder: ranger; set_aside: ecarter), note = AI note (text, pinned: notes_ia; set_aside: ecarter).one of case_file · subfolder · item · note
namestring
subfolder: new name.
numberstring
case_file: case number.
partiesarray
case_file: replaces the list; aliases only, never real names.
pinnedboolean
note: true = follows its text into every case file holding it; false = back to one case file.
reasonstring
item, note: reason, with set_aside true; omit to reuse the earlier one.
set_asideboolean
item, note: true = set aside (kept, not proposed again); false = restored.
stagestring
case_file: procedural stage.
subfolder_idstring
item: Subfolder "c_…"; "" = default "À ranger" area.
subtitlestring
case_file.
summarystring
case_file: summary.
textstring
note: new text.
titlestring
case_file.
open_ticketOpens a ticket with the JusticeLibre team ON BEHALF of the user (marked "via AI") to report wrong data, a missing source, a bug, or an idea. Use only if the user asks for it or approves it. Permission tickets; AI limits on top of the user's own: 3 tickets a day, 5 messages an...5 params

Opens a ticket with the JusticeLibre team ON BEHALF of the user (marked "via AI") to report wrong data, a missing source, a bug, or an idea. Use only if the user asks for it or approves it. Permission tickets; AI limits on top of the user's own: 3 tickets a day, 5 messages an...

Parameters* required
attachmentsarray
At most 3, plain text only.
message*string
What is wrong, what is expected, the source. 4,000 characters at most.
targetstring
The reference or URL concerned ("article:CT:L1234-1", a URL).
title*string
Precise title, 120 characters at most ("CT L1234-1: wrong renumbering date").
type*string
error (wrong data), missing (source or text missing), bug, idea.one of error · missing · bug · idea
reply_ticketAdds a message to an existing ticket of the user ON THEIR BEHALF (marked "via AI"). Use only if the user asks for it or approves it. Permission tickets; 5 messages an hour for the AI; 3 plain-text attachments at most. Requires a JusticeLibre account (OAuth sign-in); without on...3 params

Adds a message to an existing ticket of the user ON THEIR BEHALF (marked "via AI"). Use only if the user asks for it or approves it. Permission tickets; 5 messages an hour for the AI; 3 plain-text attachments at most. Requires a JusticeLibre account (OAuth sign-in); without on...

Parameters* required
attachmentsarray
At most 3, plain text only.
message*string
The message, 4,000 characters at most.
ticket_id*string
Ticket "t_…".

Sponsors

Readme

justicelibre.org

⚠️ Le code de ce dépôt n'est plus à jour. Le développement se poursuit dans un dépôt privé, le temps de stabiliser la nouvelle version. Le code ici est l'archive de la première version (septembre 2026). Cette page, elle, décrit le service actuel.

Le service, lui, continue sur justicelibre.org, et chaque résultat y renvoie à sa source officielle.

L'accès libre à toute la jurisprudence et la loi françaises publiées en données ouvertes, pour Claude, ChatGPT et votre IA.

Se connecter

Adresse du serveur MCP (HTTP « streamable ») :

https://justicelibre.org/mcp

Aucune installation : ajoutez cette adresse comme connecteur dans votre client (Claude, ChatGPT, Cursor, VS Code…). Les outils de recherche fonctionnent sans compte ; un compte justicelibre (connexion OAuth) ajoute les dossiers et références enregistrées.

Instructions détaillées : justicelibre.org/#connect

Sources


View the full README on GitHub

Details

Repository
github.com/dahliyaal/justicelibre
Transport
HTTP
Registry
MCP registry, active
Resources
3
Prompts
3
Tools verified
Nov 6, 2026