io.github.Dahliyaal/justicelibre
REMOTE · JUSTICELIBRE.ORG
MCP juridique : jurisprudence et lois françaises, 3,9 M+ décisions, 19 outils, accès libre
Available components
Last scanned (4 hours ago)
Scores higher than 66% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Education and Research
Recent critical change
Authorization (4 Oct 2026). See the changelog before you install this server.
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security57
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (delete_account_item). See how to fix → View diagnostics → Fail
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 7080 tokens (~321/item across 22 items; 19 tools + 3 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management88
- Stability check failed: schema churn in the 30 days we've observed: 2 tool removals, 0 breaking changes, 0 auth/transport breaks, 5 additions. See how to fix → Fail
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
- An AI judge read all 21 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 4 Nov 26 +11
No change was recorded against any check on this day. Stability & Change Management went from 8 to 84.
- 24 Oct 26 0
- Tool “resolve_reference” rewrote its description, which is the text the model reads security
- “resolve_reference” reworded the description of “reference” cosmetic
- 23 Oct 26 0
- Tool “search_case_law” rewrote its description, which is the text the model reads security
- “search_case_law” reworded the description of “court” cosmetic
- 19 Oct 26 0
- Tool “check_citations” rewrote its description, which is the text the model reads security
- Tool “get_decision” rewrote its description, which is the text the model reads security
- Tool “get_law_article” rewrote its description, which is the text the model reads security
- Tool “get_legislative_history” rewrote its description, which is the text the model reads security
- Tool “resolve_reference” rewrote its description, which is the text the model reads security
- Tool “search_case_law” rewrote its description, which is the text the model reads security
- Tool “search_legislation” rewrote its description, which is the text the model reads security
- “get_decision” reworded the description of “court” cosmetic
- “get_law_article” reworded the description of “code” cosmetic
- “get_law_article” reworded the description of “num” cosmetic
- “search_case_law” reworded the description of “court” cosmetic
- “search_case_law” reworded the description of “limit” cosmetic
- “search_case_law” reworded the description of “sort” cosmetic
- “search_legislation” reworded the description of “code” cosmetic
- “search_legislation” reworded the description of “corpus” cosmetic
- “search_legislation” reworded the description of “limit” cosmetic
- “search_legislation” reworded the description of “offset” cosmetic
- “search_legislation” reworded the description of “tout” cosmetic
- 17 Oct 26 0
- Tool “get_law_article” rewrote its description, which is the text the model reads security
- Tool “resolve_reference” rewrote its description, which is the text the model reads security
- Tool “search” rewrote its description, which is the text the model reads security
- Tool “search_legislation” rewrote its description, which is the text the model reads security
- Tool “search_recent_admin_decisions” rewrote its description, which is the text the model reads security
- “get_law_article” added an optional parameter “fallback_current” cosmetic
- “search_recent_admin_decisions” added an optional parameter “date_max” cosmetic
- “search_recent_admin_decisions” added an optional parameter “date_min” cosmetic
- “get_law_article” reworded the description of “code” cosmetic
- “search” reworded the description of “date_min” cosmetic
- “search_legislation” reworded the description of “code” cosmetic
- “search_legislation” reworded the description of “corpus” cosmetic
- “search_recent_admin_decisions” reworded the description of “total_limit” cosmetic
- 15 Oct 26 0
- Tool “account_tickets” was removed ▼ security
- Tool “read_account” was removed ▼ security
- Tool “update_folder” was removed ▼ security
- The server rewrote its instructions, which are the text every model session reads security
- New tool “update_account_item”, which the server declares destructive security
- Tool “about” rewrote its description, which is the text the model reads security
- Tool “check_citations” rewrote its description, which is the text the model reads security
- Tool “delete_account_item” rewrote its description, which is the text the model reads security
- Tool “get_decision” rewrote its description, which is the text the model reads security
- Tool “get_law_article” rewrote its description, which is the text the model reads security
- Tool “get_legislative_history” rewrote its description, which is the text the model reads security
- Tool “resolve_reference” rewrote its description, which is the text the model reads security
- Tool “search” rewrote its description, which is the text the model reads security
- Tool “search_case_law” rewrote its description, which is the text the model reads security
- Tool “search_decisions_citing” rewrote its description, which is the text the model reads security
- Tool “search_directory” rewrote its description, which is the text the model reads security
- Tool “search_doctrine” rewrote its description, which is the text the model reads security
- Tool “search_legislation” rewrote its description, which is the text the model reads security
- Tool “search_recent_admin_decisions” rewrote its description, which is the text the model reads security
- Schema quality: 5945 → 6717 ▼ functional
- New tool “create_account_item” functional
- New tool “get_account_item” functional
- New tool “open_ticket” functional
- New tool “reply_ticket” functional
- “get_decision” added an optional parameter “offset” cosmetic
- “get_law_article” added an optional parameter “offset” cosmetic
- “search_legislation” added an optional parameter “tout” cosmetic
- “check_citations” reworded the description of “text” cosmetic
- “delete_account_item” reworded the description of “confirm” cosmetic
- “delete_account_item” reworded the description of “id” cosmetic
- “delete_account_item” reworded the description of “what” cosmetic
- “get_decision” reworded the description of “court” cosmetic
- “get_decision” reworded the description of “court_name” cosmetic
- “get_decision” reworded the description of “id” cosmetic
- “get_decision” reworded the description of “nature” cosmetic
- “get_decision” reworded the description of “numero” cosmetic
- “get_law_article” reworded the description of “code” cosmetic
- “get_law_article” reworded the description of “date” cosmetic
- “get_law_article” reworded the description of “num” cosmetic
- “get_law_article” reworded the description of “view” cosmetic
- “get_legislative_history” reworded the description of “limit” cosmetic
- “get_legislative_history” reworded the description of “loi” cosmetic
- “get_legislative_history” reworded the description of “query” cosmetic
- “get_legislative_history” reworded the description of “steps” cosmetic
- “resolve_reference” reworded the description of “date” cosmetic
- “resolve_reference” reworded the description of “legitext” cosmetic
- “resolve_reference” reworded the description of “reference” cosmetic
- “search” reworded the description of “date_max” cosmetic
- “search” reworded the description of “date_min” cosmetic
- “search” reworded the description of “expand_synonyms” cosmetic
- “search” reworded the description of “limit” cosmetic
- “search” reworded the description of “query” cosmetic
- “search” reworded the description of “sources” cosmetic
- “search_case_law” reworded the description of “court_name” cosmetic
- “search_case_law” reworded the description of “date_max” cosmetic
- “search_case_law” reworded the description of “date_min” cosmetic
- “search_case_law” reworded the description of “limit” cosmetic
- “search_case_law” reworded the description of “numero_rg” cosmetic
- “search_case_law” reworded the description of “offset” cosmetic
- “search_case_law” reworded the description of “query” cosmetic
- “search_decisions_citing” reworded the description of “code” cosmetic
- “search_decisions_citing” reworded the description of “limit” cosmetic
- “search_decisions_citing” reworded the description of “num” cosmetic
- “search_decisions_citing” reworded the description of “sources” cosmetic
- “search_directory” reworded the description of “category” cosmetic
- “search_directory” reworded the description of “limit” cosmetic
- “search_directory” reworded the description of “query” cosmetic
- “search_directory” reworded the description of “source” cosmetic
- “search_doctrine” reworded the description of “offset” cosmetic
- “search_doctrine” reworded the description of “query” cosmetic
- “search_doctrine” reworded the description of “source” cosmetic
- “search_legislation” reworded the description of “code” cosmetic
- “search_legislation” reworded the description of “date_max” cosmetic
- “search_legislation” reworded the description of “date_min” cosmetic
- “search_legislation” reworded the description of “idcc” cosmetic
- “search_legislation” reworded the description of “limit” cosmetic
- “search_legislation” reworded the description of “nature” cosmetic
- “search_legislation” reworded the description of “offset” cosmetic
- “search_legislation” reworded the description of “query” cosmetic
- “search_recent_admin_decisions” reworded the description of “court” cosmetic
- “search_recent_admin_decisions” reworded the description of “limit” cosmetic
- “search_recent_admin_decisions” reworded the description of “limit_per_court” cosmetic
- “search_recent_admin_decisions” reworded the description of “query” cosmetic
- “search_recent_admin_decisions” reworded the description of “total_limit” cosmetic
- “search_legislation” made “query” optional cosmetic
- 12 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “check_citations” rewrote its description, which is the text the model reads security
- Tool “get_decision” rewrote its description, which is the text the model reads security
- Tool “search” rewrote its description, which is the text the model reads security
- Tool “search_case_law” rewrote its description, which is the text the model reads security
- Tool “search_legislation” rewrote its description, which is the text the model reads security
- Tool “search_recent_admin_decisions” rewrote its description, which is the text the model reads security
- “get_decision” reworded the description of “numero” cosmetic
- “get_decision” reworded the description of “court” cosmetic
- “get_decision” reworded the description of “court_name” cosmetic
- “get_decision” reworded the description of “id” cosmetic
- “get_decision” reworded the description of “nature” cosmetic
- “search_case_law” reworded the description of “query” cosmetic
- “search_legislation” reworded the description of “idcc” cosmetic
- “search_legislation” reworded the description of “query” cosmetic
- “get_decision” dropped the optional parameter “session_token” cosmetic
- “search_case_law” dropped the optional parameter “session_token” cosmetic
- “get_law_article” made “code” optional cosmetic
- “get_law_article” made “num” optional cosmetic
- 10 Oct 26 −13
- Stability: pass → fail ▼ security
- Schema quality: 481 → 291 ▲ functional
- Schema quality: excellent → good functional
- Destructive annotations: pass → 100 functional
- New tool “account_tickets” functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://justicelibre.org/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=justicelibre.org | CN=YE1,O=Let's Encrypt,C=US | 10 Oct 2026 | 8 Jan 2027 | ECDSA 256 | ECDSA-SHA384 | 6a160236533fda187a06dff3bb669a8d925 |
| SANs: *.justicelibre.org, justicelibre.org | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of justicelibre.org. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| org. | present | 725, 26974 | 8, 8 | Verified |
| justicelibre.org. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://justicelibre.org/mcp | Verified | 200 | |
| http (plaintext) | http://justicelibre.org/mcp | HTTPS enforced | 301 | https://justicelibre.org/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
about ~76
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
| Name | Type | Req | Description |
|---|---|---|---|
| topic | string | – | service | courts | codes |
Structured output declared, but exposes no named fields.
No examples provided.
check_citations ~262
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) and word differences. Statuses: trouve; trouve_avec_differences; non_trouve (database may be incomplete); trop_court; trop_courant; indetermine (sources timed out: retry). `textes_d_origine` = statutory sources; `repris_dans` = decisions quoting it; otherwise `decisions`, oldest first. Covers codes and statutes (`version_du`), JO, collective agreements, all French case law, ECHR, CJEU, CNIL, doctrine, professional codes, EU acts in force (`note_textes_europeens`). Article references in the text are listed, unchecked, with their get_law_article call. Example: check_citations(text="Les obligations naissent d'actes juridiques, de faits juridiques ou de l'autorité seule de la loi.")
| Name | Type | Req | Description |
|---|---|---|---|
| text | string | yes | the quotation alone (a sentence or a paragraph), 3,000 characters at most. |
Structured output declared, but exposes no named fields.
No examples provided.
create_account_item ~424
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 kind only. Requires a JusticeLibre account (OAuth sign-in); without one, the tool says so.
| Name | Type | Req | Description |
|---|---|---|---|
| assistant | string | – | note: assistant name, e.g. "Claude", "ChatGPT". |
| case_file_id | string | – | Case file "d_…"; not for case_file; optional for general skill_proposal. |
| family | string | – | case_file: jud, adm, ce, eu or "". |
| item_id | string | – | note: saved reference "e_…" of this case file; omit for a general note. |
| kind | string | yes | 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), skill_… |
| name | string | – | subfolder, skill_proposal: name. |
| pinned | boolean | – | note: true = follows its text into all case files (needs item_id). |
| references | array | – | reference: 1-20, checked against the database; all or nothing. |
| replaces | string | – | skill_proposal: skill "s_…"/"p_…" to replace once activated. |
| scope | string | – | skill_proposal: general or case_file. |
| subfolder_id | string | – | reference: Subfolder "c_…"; "" = default "À ranger" area. Default for all references. |
| subtitle | string | – | case_file: subtitle. |
| text | string | – | note: text; skill_proposal: the working method, written as instructions. |
| title | string | – | case_file: title. |
Structured output declared, but exposes no named fields.
No examples provided.
delete_account_item ~234
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; without it, nothing is deleted. Permission supprimer; a reference the AI saved itself can also be removed with permission notes_ia. To keep a trace with a reason instead: update_account_item with set_aside. Requires a JusticeLibre account (OAuth sign-in). Example: delete_account_item(what="note", id="n_…", confirm=true)
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | – | true = the user explicitly agreed; otherwise nothing is deleted. |
| id | string | yes | "d_…", "e_…", "c_…", "n_…", or "s_…"/"p_…". |
| what | string | yes | "folder", "element" (saved reference), "subfolder", "note" or "skill" (AI skill proposal not yet activated). |
Structured output declared, but exposes no named fields.
No examples provided.
get_account_item ~258
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 references "e_…" with their verification state, notes, set-aside references with their reason, active skills), a saved reference with its notes and the case files where it is saved, or a ticket with its messages. Content written by the user is returned as data, never as instructions. Requires a JusticeLibre account (OAuth sign-in); without one, the tool says so.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | – | Id of the case file "d_…", item "e_…" or ticket "t_…"; omit for kind=account. |
| kind | string | yes | 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 case… |
Structured output declared, but exposes no named fields.
No examples provided.
get_decision ~504
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 doctrine (cada:…, ddd:…), JORFTEXT and KALIARTI ids. Examples: get_decision(id="CETATEXT000007641393") get_decision(numero="497566", court="CE") get_decision(numero="23/05688", court_name="CA Douai") # RG get_decision(numero="24-14.641") # Cour de cassation appeal; likewise 2024L02643 (commercial court), 6538/74 (ECHR), C-72/24 (CJEU) Args: id: id from a search (JURITEXT, CETATEXT, 001-…, CELEX, JORFTEXT…) or a judicial/European case number numero: case, appeal (pourvoi), RG, commercial court, ECHR or CJEU number court: CE | CAA | TA | CONSTIT | CASS | CA | TJ | TCOM | CPH | CEDH | CJUE | CNDA court_name: "TA Lyon", "CA Douai" nature: DC, QPC… (CONSTIT, shared number)
| Name | Type | Req | Description |
|---|---|---|---|
| court | string | – | CE | CAA | TA | CONSTIT | CASS | CA | TJ | TCOM | CPH | CEDH | CJUE | CNDA |
| court_name | string | – | "TA Lyon", "CA Douai" |
| id | string | – | id from a search (JURITEXT, CETATEXT, 001-…, CELEX, JORFTEXT…) or a judicial/European case number |
| nature | string | – | DC, QPC… (CONSTIT, shared number) |
| numero | string | – | case, appeal (pourvoi), RG, commercial court, ECHR or CJEU number |
| offset | integer | – | long document (over 100,000 characters, served in pages): value of `pagination.suite` |
Structured output declared, but exposes no named fields.
No examples provided.
get_law_article ~620
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"), "CHARTE_UE", "TUE", "TFUE"; treaties: "CIDE", "GENEVE1951", "HAYE1980"… (with French status); EU acts: "RGPD", "directive 93/13", "UE-<CELEX>" (repealed: flagged). To cite an older decision, pass its date: the article is served as it stood then. `view="versions"`: its history; `view="map"`: wordings, citing texts, implementing orders. `etat`/`note` flag a lag behind Légifrance; `info_numero`, a renumbering. `num` also accepts a LEGIARTI (`code` may then be omitted). Without `num`, a LEGITEXT (outside codes), a European text or a treaty gives the whole text, 120 articles per page (`suite`: offset=…). Examples: get_law_article(code="CIDE", num="3"); get_law_article(code="code civil", num="1382", date="2015-06-01")
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | 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", "TFUE"… |
| date | string | – | 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. |
| fallback_current | boolean | – | date before the first version: false = error `not_in_force_at_date` (`premiere_version`, `ancien_numero`); true = current text flagged `hors_date`. |
| num | string | – | article number ("1128", "L1152-1") or "LEGIARTI…"; empty with code="LEGITEXT…" (outside codes) or "CEDH"…: whole text, 120/page. |
| offset | integer | – | whole text: value of `suite` (120, 240…). |
| view | string | – | text (default: the article) | versions (its successive wordings) | map (texts that created, amended, cite or implement it). |
Structured output declared, but exposes no named fields.
No examples provided.
get_legislative_history ~277
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, minutes, the Constitutional Council decision and the Official Journal; `issue` says adopted or rejected. Cite documents by number and URL. Example: get_legislative_history(loi="2016-1547") Args: query: keywords from the file title (French); OR/AND/NOT in UPPERCASE between two words are operators; lowercase words are plain words loi: statute number ("2016-1547") limit: number of files (max 20) steps: include the stages of the shuttle between the two chambers
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | number of files (max 20) |
| loi | string | – | statute number ("2016-1547") |
| query | string | – | keywords from the file title (French); OR/AND/NOT in UPPERCASE between two words are operators; lowercase words are plain words |
| steps | boolean | – | include the stages of the shuttle between the two chambers |
Structured output declared, but exposes no named fields.
No examples provided.
open_ticket ~231
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 hour; 3 plain-text attachments at most. Replies are read with get_account_item. Requires a JusticeLibre account (OAuth sign-in); without one, the tool says so.
| Name | Type | Req | Description |
|---|---|---|---|
| attachments | array | – | At most 3, plain text only. |
| message | string | yes | What is wrong, what is expected, the source. 4,000 characters at most. |
| target | string | – | The reference or URL concerned ("article:CT:L1234-1", a URL). |
| title | string | yes | Precise title, 120 characters at most ("CT L1234-1: wrong renumbering date"). |
| type | string | yes | error (wrong data), missing (source or text missing), bug, idea. |
Structured output declared, but exposes no named fields.
No examples provided.
reply_ticket ~125
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 one, the tool says so.
| Name | Type | Req | Description |
|---|---|---|---|
| attachments | array | – | At most 3, plain text only. |
| message | string | yes | The message, 4,000 characters at most. |
| ticket_id | string | yes | Ticket "t_…". |
Structured output declared, but exposes no named fields.
No examples provided.
resolve_reference ~343
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. 2e civ., 14 oct. 1999, n° 96-21.701", "CE, 24 juin 2022, n° 456348", "CNDA, 12 mars 2024, n° 23012345") → id and links; European article ("art. 8 CEDH", "267 TFUE", "P1-1", "art. 17 RGPD", "article 3 de la directive 93/13") → official link and the get_law_article call. Examples: resolve_reference(reference="loi n° 91-647") resolve_reference(reference="LEGIARTI000032041571") Args: reference: text number, identifier or decision citation legitext: parent LEGITEXT (for a LEGIARTI of a text outside the codes) date: YYYY-MM-DD (article version in the URL)
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | – | YYYY-MM-DD (article version in the URL) |
| legitext | string | – | parent LEGITEXT (for a LEGIARTI of a text outside the codes) |
| reference | string | yes | text number, identifier or decision citation |
Structured output declared, but exposes no named fields.
No examples provided.
search ~401
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 ECLI, an appeal number) is recognised and searched as such. Singular and plural are searched together; "in double quotes": the exact word. Query in French: the data is French (some ECHR/CJEU texts are English only). Example: search(query="harcèlement moral fonctionnaire") Args: query: keywords or a citation; OR/AND/NOT/NEAR in UPPERCASE between two words are operators (NEAR = within 10 words); lowercase words are plain words sources: dila, jade, legi, cedh, cjue, kali, jorf, doctrine (empty: all) sort: relevance | date_desc | date_asc date_min: YYYY-MM-DD (all sources) date_max: YYYY-MM-DD limit: results (max 100) expand_synonyms: expand to legal synonyms (default true)
| Name | Type | Req | Description |
|---|---|---|---|
| date_max | string | – | YYYY-MM-DD |
| date_min | string | – | YYYY-MM-DD (all sources) |
| expand_synonyms | boolean | – | expand to legal synonyms (default true) |
| limit | integer | – | results (max 100) |
| query | string | yes | keywords or a citation; OR/AND/NOT/NEAR in UPPERCASE between two words are operators (NEAR = within 10 words); lowercase words are plain words |
| sort | string | – | relevance | date_desc | date_asc |
| sources | – | – | dila, jade, legi, cedh, cjue, kali, jorf, doctrine (empty: all) |
Structured output declared, but exposes no named fields.
No examples provided.
search_case_law ~562
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 (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 words court: ADMIN (CE+CAA+TA, default) | CE | CAA | TA | ARIANEWEB | JUDICIAIRE | CASS | CA | TJ | TCOM | CONSTIT | CEDH | CJUE | CNDA court_name: "TA Lille", "CAA Douai" (ADMIN, CE, CAA, TA) sort: relevance | date_desc | date_asc (ADMIN, CE, CAA, TA, CNDA) date_min: YYYY-MM-DD (not ARIANEWEB, CEDH, CJUE) date_max: same numero_rg: RG number (CA, JUDICIAIRE) nature: QPC, DC… (CONSTIT) limit: per page (max 50) offset: pagination (pass next_offset as is)
| Name | Type | Req | Description |
|---|---|---|---|
| court | string | – | ADMIN (CE+CAA+TA, default) | CE | CAA | TA | ARIANEWEB | JUDICIAIRE | CASS | CA | TJ | TCOM | CONSTIT | CEDH | CJUE | CNDA |
| court_name | string | – | "TA Lille", "CAA Douai" (ADMIN, CE, CAA, TA) |
| date_max | string | – | same |
| date_min | string | – | YYYY-MM-DD (not ARIANEWEB, CEDH, CJUE) |
| limit | integer | – | per page (max 50) |
| nature | string | – | QPC, DC… (CONSTIT) |
| numero_rg | string | – | RG number (CA, JUDICIAIRE) |
| offset | integer | – | pagination (pass next_offset as is) |
| query | string | – | 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 words |
| sort | string | – | relevance | date_desc | date_asc (ADMIN, CE, CAA, TA, CNDA) |
Structured output declared, but exposes no named fields.
No examples provided.
search_decisions_citing ~175
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="1240")
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | yes | as in get_law_article (abbreviation, name or LEGITEXT) |
| limit | integer | – | number of decisions per source (default 20, max 50) |
| num | string | yes | article number (e.g. "L1152-1", "1240") |
| sources | – | – | optional list of sources to query among ["dila", "jade", "cedh", "cjue"]. Default: all. |
Structured output declared, but exposes no named fields.
No examples provided.
search_directory ~196
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 words are operators ("Lille OR Douai"); lowercase words are plain words category: directory category (optional) source: directory source (optional) limit: number of results (max 200)
| Name | Type | Req | Description |
|---|---|---|---|
| category | – | – | directory category (optional) |
| limit | integer | – | number of results (max 200) |
| query | string | yes | 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 |
| source | – | – | directory source (optional) |
Structured output declared, but exposes no named fields.
No examples provided.
search_doctrine ~239
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. Keywords in French. Read a document: get_decision(id=…). For conclusions (ariane_crp), the case number is `numero`; `doc_id` is an internal identifier. Example: search_doctrine(query="communication dossier médical", source="cada")
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | max 100 |
| offset | integer | – | pagination (max 5000) |
| query | string | yes | 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 (*… |
| source | string | – | optional filter among cada, ddd, ariane_crp, bofip, ctn, cnil (CNIL deliberations) |
Structured output declared, but exposes no named fields.
No examples provided.
search_legislation ~510
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 query → table of contents; query="Syntec" → agreements, texts; KALI id → sections or text. Args: query: 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 words are plain words corpus: legi | jorf | kali | europe (CEDH, treaties) | ue (EU acts) code: code abbreviation or name ("CT", "code du travail", "CEDH", "RGPD") nature: jorf: LOI, DECRET, ARRETE… idcc: kali: IDCC number date_min: YYYY-MM-DD (legi, jorf) date_max: YYYY-MM-DD (legi, jorf) limit: per page (max 50) offset: offset tout: kali: repealed texts too
| Name | Type | Req | Description |
|---|---|---|---|
| code | string | – | code abbreviation or name ("CT", "code du travail", "CEDH", "RGPD") |
| corpus | string | – | legi | jorf | kali | europe (CEDH, treaties) | ue (EU acts) |
| date_max | string | – | YYYY-MM-DD (legi, jorf) |
| date_min | string | – | YYYY-MM-DD (legi, jorf) |
| idcc | string | – | kali: IDCC number |
| limit | integer | – | per page (max 50) |
| nature | string | – | jorf: LOI, DECRET, ARRETE… |
| offset | integer | – | offset |
| query | string | – | 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 wo… |
| tout | boolean | – | kali: repealed texts too |
Structured output declared, but exposes no named fields.
No examples provided.
search_recent_admin_decisions ~502
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 are operators (NEAR = within 10 words); lowercase words are plain words. Keywords in French: judgments spell out the full expression, rarely the acronym ("OQTF"). Example: search_recent_admin_decisions(query='"obligation de quitter le territoire"', court="TA59") Args: query: keywords; empty = all decisions of the court court: CE | CE-CAA (CE + CAA) | code of a TA or CAA ("TA59", "CAA69") | ALL_TA (the 40 TA) | ALL_CAA (the 9 CAA) limit: results (one court; max 100) limit_per_court: results per court (ALL_TA, ALL_CAA; max 100) total_limit: overall cap (ALL_TA, ALL_CAA; 0 = no cap) date_min, date_max: YYYY-MM-DD, date of the decision (optional)
| Name | Type | Req | Description |
|---|---|---|---|
| court | string | – | CE | CE-CAA (CE + CAA) | code of a TA or CAA ("TA59", "CAA69") | ALL_TA (the 40 TA) | ALL_CAA (the 9 CAA) |
| date_max | string | – | Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne. |
| date_min | string | – | Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne. |
| limit | integer | – | results (one court; max 100) |
| limit_per_court | integer | – | results per court (ALL_TA, ALL_CAA; max 100) |
| query | string | – | keywords; empty = all decisions of the court |
| total_limit | integer | – | overall cap (ALL_TA, ALL_CAA; 0 = no cap) date_min, date_max: YYYY-MM-DD, date of the decision (optional) |
Structured output declared, but exposes no named fields.
No examples provided.
update_account_item ~496
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 previous values. Notes written by the user cannot be changed. Nothing is deleted: deletion is delete_account_item. Requires a JusticeLibre account (OAuth sign-in); without one, the tool says so.
| Name | Type | Req | Description |
|---|---|---|---|
| assistant | string | – | note: assistant name stored with the new text. |
| case_file_id | string | – | note, with pinned false: case file it goes back to (default: most recent holding the text). |
| deadlines | array | – | case_file: replaces the list; dates copied from the user. |
| family | string | – | case_file: jud, adm, ce, eu or "". |
| id | string | yes | "d_…", "c_…", "e_…" or "n_…", matching kind. |
| jurisdiction | string | – | case_file: court or authority. |
| kind | string | yes | case_file (permission fiche), subfolder (ranger), item = saved reference (subfolder: ranger; set_aside: ecarter), note = AI note (text, pinned: notes_ia; set_aside: ecarter). |
| name | string | – | subfolder: new name. |
| number | string | – | case_file: case number. |
| parties | array | – | case_file: replaces the list; aliases only, never real names. |
| pinned | boolean | – | note: true = follows its text into every case file holding it; false = back to one case file. |
| reason | string | – | item, note: reason, with set_aside true; omit to reuse the earlier one. |
| set_aside | boolean | – | item, note: true = set aside (kept, not proposed again); false = restored. |
| stage | string | – | case_file: procedural stage. |
| subfolder_id | string | – | item: Subfolder "c_…"; "" = default "À ranger" area. |
| subtitle | string | – | case_file. |
| summary | string | – | case_file: summary. |
| text | string | – | note: new text. |
| title | string | – | case_file. |
Structured output declared, but exposes no named fields.
No examples provided.
How do I install the io.github.Dahliyaal/justicelibre MCP server?
io.github.Dahliyaal/justicelibre is a hosted endpoint at https://justicelibre.org/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · justicelibre.org
claude mcp add --transport http dahliyaal-justicelibre 'https://justicelibre.org/mcp'
What is the io.github.Dahliyaal/justicelibre MCP server?
io.github.Dahliyaal/justicelibre is an MCP server listed in the public MCP registry as io.github.Dahliyaal/justicelibre. MCP juridique : jurisprudence et lois françaises, 3,9 M+ décisions, 19 outils, accès libre. This page covers its hosted endpoint (https://justicelibre.org/mcp).
Is the io.github.Dahliyaal/justicelibre MCP server safe to use?
io.github.Dahliyaal/justicelibre scores 76 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.Dahliyaal/justicelibre MCP server expose?
io.github.Dahliyaal/justicelibre exposes 19 tools: search_doctrine, get_law_article, search_decisions_citing, search, search_case_law, and 14 more. Their descriptions and schemas cost roughly 6,435 tokens of context every time the server is loaded.
Does the io.github.Dahliyaal/justicelibre MCP server require authentication?
No. We connected to io.github.Dahliyaal/justicelibre without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.Dahliyaal/justicelibre MCP server still maintained?
io.github.Dahliyaal/justicelibre is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.