git:20260812.243e840 to git:20260904.de7cff4
21 added, 31 removed. Audit A to A.
# LibreJustice
- > Free, open-source search engine for French and European law: court decisions
- > (both the administrative and the judicial order) and legal texts (French codes
- > at any past date, EU law, treaties, collective agreements, administrative
- > doctrine). Rebuilt daily from official sources.
+ > Free, open-source search engine for French and European law: decisions from France's administrative and judicial courts and legal texts (French codes at any past date, EU law, treaties, collective agreements, administrative doctrine). Rebuilt daily from public and licensed sources.
## Searching: connect the MCP server, do not crawl
- The corpus is millions of decisions and more than a million texts. Fetching
- pages one by one will not find the relevant one — the search engine will. It is
- exposed as a Model Context Protocol server, free and open to any client:
+ The corpus contains millions of decisions and more than a million texts. Fetching pages one by one will not find the relevant one; the search engine will. It is exposed as a Model Context Protocol server, free and open to any client:
- Endpoint: https://librejustice.fr/mcp
- - Transport: streamable-http. Auth: OAuth, auto-discovered (RFC 9728 metadata at
- /.well-known/oauth-protected-resource).
+ - Transport: streamable-http. Auth: OAuth, auto-discovered (RFC 9728 metadata at /.well-known/oauth-protected-resource).
- Setup per client (Claude, ChatGPT, Codex, Cursor, Mistral…): https://librejustice.fr/mcp-guide
Tools:
- - `search_decisions` — case law, hybrid meaning + keyword matching, with
- structured filters (jurisdiction, dates, cited articles, codes) and facet
- counts to refine. Quoted phrases and the `ET` / `OU` / `SAUF` / `PROCHE<n>`
- operators switch to exact-wording matching — the only way to target which way
- a court ruled, since semantic matching ignores negations.
- - `get_decision` — full text of one decision, with inline links to the articles
- and decisions it cites. Also reports whether the decision still stands
- (`appellateFate`: reversed or upheld on review) and the linked prior and
- subsequent decisions of the same case. Read that before citing it as authority.
- - `search_legal_texts` — finds statutory articles from their subject or wording
- when the article number is unknown; ranked snippets, facets by code.
- - `get_legal_text` — one article as it read on a given date (or today), with its
- status, validity dates and the timeline of every version. Say which version
- you quote.
+ - `search_decisions`: case law, hybrid meaning + keyword matching, with structured filters (jurisdiction, dates, cited articles, codes) and facet counts to refine. Quoted phrases and the `ET` / `OU` / `SAUF` / `PROCHE<n>` operators switch to exact-wording matching, the only way to target which way a court ruled since semantic matching ignores negations.
+ - `get_decision`: full text of one decision, with inline links to the articles and decisions it cites. Also reports whether the decision still stands (`appellateFate`: reversed or upheld on review) and the linked prior and subsequent decisions of the same case. Read that before citing it as authority.
+ - `search_legal_texts`: finds legal articles from their subject or wording when the article number is unknown; ranked snippets, facets by code.
+ - `get_legal_text`: one article as it stood on a given date (or today), with its status, validity dates and the timeline of every version. Say which version you quote.
Queries are written in French: it is a French-language corpus.
+ ## Calling from code: the REST API
+
+ The same corpus for a program rather than an assistant. The key is free, created from an account.
+
+ - Spec: https://librejustice.fr/openapi.json (OpenAPI 3.1). Guide and key: https://librejustice.fr/api-guide
+ - Auth: `Authorization: Bearer <key>`, or the `x-lj-api-key` header.
+ - Five routes: `/api/search`, `/api/search-textes`, `/api/decision/{id}`, `/api/texte/{code}/{article}`, `/api/texte/{code}/{article}/{date}`.
+ - One identity, one budget: API calls, MCP calls and site searches share a counter. Over it, a `429` with a `Retry-After`.
+
+ It answers a question, it does not export a corpus: paging stops at offset 99 on both search routes. Narrow the filters instead.
+
## Browsing (crawlable trees, for humans and indexers)
Two symmetric trees, one per corpus, plus a directory of parties:
- - https://librejustice.fr/juridictions — courts, then year, then decisions.
- A decision: /decision/{id}
- - https://librejustice.fr/normes — funds (codes, lois, décrets, arrêtés,
- collective agreements, EU texts, treaties, circulaires, BOFiP), then year,
- then texts. An article: /texte/{code}/{article}, or
- /texte/{code}/{article}/{date} for the version in force at that date.
- - https://librejustice.fr/annuaire — companies, public bodies, associations and
- counsel appearing in the decisions.
+ - https://librejustice.fr/juridictions: courts, then year, then decisions. A decision: /decision/{id}
+ - https://librejustice.fr/normes: collections (codes, lois, décrets, arrêtés, collective agreements, EU texts, treaties, circulaires, BOFiP), then year, then texts. An article: /texte/{code}/{article}, or /texte/{code}/{article}/{date} for the version in force at that date.
+ - https://librejustice.fr/annuaire: companies, public bodies, associations and counsel appearing in the decisions.
Search pages: /decisions (case law), /textes (legal texts).
## Provenance and reuse
- Sources and update schedule: https://librejustice.fr/sources
- Code: https://github.com/librejustice/librejustice (Apache-2.0)
- Crawler policy, including AI training: https://librejustice.fr/robots.txt