_ registry / mcp http-sse · checked 2h ago

justicelibre

https://justicelibre.org

Registry code: b38511c3086a459e

api record

French and European case law and legislation, free of charge.

ENTRY POINT: `search` searches every source at once, with legal synonyms.

endpoint
https://justicelibre.org/mcp
protocol
http-sse ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is justicelibre live?
Yes — it answered the hub's last check (checked 2h ago). It answered 100% of checks over the last 30 days.
Is justicelibre free to use?
Yes — the hub reached it with no key and no payment.
What tools does justicelibre have?
19 tools: delete_account_item, update_account_item, open_ticket, reply_ticket, create_account_item, search_recent_admin_decisions, get_account_item, get_decision, ….
Is justicelibre safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.5%

90 days 99.7%· all time 99.7%

latency
124ms

last good check

priced tools
0

of 19 tools

_ answered our checks, 90 days 378 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • unknown → live
_ what it is for
used for
  • search french case law
  • read a french law article
  • find european court decisions
takes → gives
text → text
tools
3 reads
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 19 tools
12 open 7 never probed 12 of 19 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • get_decision open 5h ago

    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)

    mcp-tool

    {
      "type": "object",
      "title": "get_decisionArguments",
      "properties": {
        "id": {
          "type": "string",
          "title": "Id",
          "default": "",
          "description": "id from a search (JURITEXT, CETATEXT, 001-…, CELEX, JORFTEXT…) or a judicial/European case number"
        },
        "court": {
          "type": "string",
          "title": "Court",
          "default": "",
          "description": "CE | CAA | TA | CONSTIT | CASS | CA | TJ | TCOM | CPH | CEDH | CJUE | CNDA"
        },
        "nature": {
          "type": "string",
          "title": "Nature",
          "default": "",
          "description": "DC, QPC… (CONSTIT, shared number)"
        },
        "numero": {
          "type": "string",
          "title": "Numero",
          "default": "",
          "description": "case, appeal (pourvoi), RG, commercial court, ECHR or CJEU number"
        },
        "offset": {
          "type": "integer",
          "title": "Offset",
          "default": 0,
          "description": "long document (over 100,000 characters, served in pages): value of `pagination.suite`"
        },
        "court_name": {
          "type": "string",
          "title": "Court Name",
          "default": "",
          "description": "\"TA Lyon\", \"CA Douai\""
        }
      }
    }
    arguments 42 lines
  • get_law_article reads open 5h ago

    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")

    mcp-tool

    {
      "type": "object",
      "title": "get_law_articleArguments",
      "properties": {
        "num": {
          "type": "string",
          "title": "Num",
          "default": "",
          "description": "article number (\"1128\", \"L1152-1\") or \"LEGIARTI…\"; empty with code=\"LEGITEXT…\" (outside codes) or \"CEDH\"…: whole text, 120/page."
        },
        "code": {
          "type": "string",
          "title": "Code",
          "default": "",
          "description": "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\"; EU secondary law in force: \"UE-<CELEX>\", \"RGPD\", \"DSA\", \"directive 93/13\"."
        },
        "date": {
          "type": "string",
          "title": "Date",
          "default": "",
          "description": "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."
        },
        "view": {
          "type": "string",
          "title": "View",
          "default": "text",
          "description": "text (default: the article) | versions (its successive wordings) | map (texts that created, amended, cite or implement it)."
        },
        "offset": {
          "type": "integer",
          "title": "Offset",
          "default": 0,
          "description": "whole text: value of `suite` (120, 240…)."
        },
        "fallback_current": {
          "type": "boolean",
          "title": "Fallback Current",
          "default": false,
          "description": "date before the first version: false = error `not_in_force_at_date` (`premiere_version`, `ancien_numero`); true = current text flagged `hors_date`."
        }
      }
    }
    arguments 42 lines
  • search_legislation open 5h ago

    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

    mcp-tool

    {
      "type": "object",
      "title": "search_legislationArguments",
      "properties": {
        "code": {
          "type": "string",
          "title": "Code",
          "default": "",
          "description": "code abbreviation or name (\"CT\", \"code du travail\", \"CEDH\", \"RGPD\")"
        },
        "idcc": {
          "type": "string",
          "title": "Idcc",
          "default": "",
          "description": "kali: IDCC number"
        },
        "tout": {
          "type": "boolean",
          "title": "Tout",
          "default": false,
          "description": "kali: repealed texts too"
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 20,
          "description": "per page (max 50)"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "default": "",
          "description": "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": {
          "type": "string",
          "title": "Corpus",
          "default": "legi",
          "description": "legi | jorf | kali | europe (CEDH, treaties) | ue (EU acts)"
        },
        "nature": {
          "type": "string",
          "title": "Nature",
          "default": "",
          "description": "jorf: LOI, DECRET, ARRETE…"
        },
        "offset": {
          "type": "integer",
          "title": "Offset",
          "default": 0,
          "description": "offset"
        },
        "date_max": {
          "type": "string",
          "title": "Date Max",
          "default": "",
          "description": "YYYY-MM-DD (legi, jorf)"
        },
        "date_min": {
          "type": "string",
          "title": "Date Min",
          "default": "",
          "description": "YYYY-MM-DD (legi, jorf)"
        }
      }
    }
    arguments 66 lines
  • search open 12h ago

    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)

    mcp-tool

    {
      "type": "object",
      "title": "searchArguments",
      "required": [
        "query"
      ],
      "properties": {
        "sort": {
          "type": "string",
          "title": "Sort",
          "default": "relevance",
          "description": "relevance | date_desc | date_asc"
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 30,
          "description": "results (max 100)"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "description": "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": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "Sources",
          "default": null,
          "description": "dila, jade, legi, cedh, cjue, kali, jorf, doctrine (empty: all)"
        },
        "date_max": {
          "type": "string",
          "title": "Date Max",
          "default": "",
          "description": "YYYY-MM-DD"
        },
        "date_min": {
          "type": "string",
          "title": "Date Min",
          "default": "",
          "description": "YYYY-MM-DD (all sources)"
        },
        "expand_synonyms": {
          "type": "boolean",
          "title": "Expand Synonyms",
          "default": true,
          "description": "expand to legal synonyms (default true)"
        }
      }
    }
    arguments 60 lines
  • resolve_reference open 12h ago

    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)

    mcp-tool

    {
      "type": "object",
      "title": "resolve_referenceArguments",
      "required": [
        "reference"
      ],
      "properties": {
        "date": {
          "type": "string",
          "title": "Date",
          "default": "",
          "description": "YYYY-MM-DD (article version in the URL)"
        },
        "legitext": {
          "type": "string",
          "title": "Legitext",
          "default": "",
          "description": "parent LEGITEXT (for a LEGIARTI of a text outside the codes)"
        },
        "reference": {
          "type": "string",
          "title": "Reference",
          "description": "text number, identifier or decision citation"
        }
      }
    }
    arguments 26 lines
  • search_doctrine reads open 12h ago

    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")

    mcp-tool

    {
      "type": "object",
      "title": "search_doctrineArguments",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 20,
          "description": "max 100"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "description": "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 (* ( ) …) are ignored."
        },
        "offset": {
          "type": "integer",
          "title": "Offset",
          "default": 0,
          "description": "pagination (max 5000)"
        },
        "source": {
          "type": "string",
          "title": "Source",
          "default": "",
          "description": "optional filter among cada, ddd, ariane_crp, bofip, ctn, cnil (CNIL deliberations)"
        }
      }
    }
    arguments 32 lines
  • check_citations open 15h ago

    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.")

    mcp-tool

    {
      "type": "object",
      "title": "check_citationsArguments",
      "required": [
        "text"
      ],
      "properties": {
        "text": {
          "type": "string",
          "title": "Text",
          "description": "the quotation alone (a sentence or a paragraph), 3,000 characters at most."
        }
      }
    }
    arguments 14 lines
  • about open 2h ago

    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

    mcp-tool

    {
      "type": "object",
      "title": "aboutArguments",
      "properties": {
        "topic": {
          "type": "string",
          "title": "Topic",
          "default": "service",
          "description": "service | courts | codes"
        }
      }
    }
    arguments 12 lines
  • get_legislative_history open 15h ago

    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

    mcp-tool

    {
      "type": "object",
      "title": "get_legislative_historyArguments",
      "properties": {
        "loi": {
          "type": "string",
          "title": "Loi",
          "default": "",
          "description": "statute number (\"2016-1547\")"
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 5,
          "description": "number of files (max 20)"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "default": "",
          "description": "keywords from the file title (French); OR/AND/NOT in UPPERCASE between two words are operators; lowercase words are plain words"
        },
        "steps": {
          "type": "boolean",
          "title": "Steps",
          "default": true,
          "description": "include the stages of the shuttle between the two chambers"
        }
      }
    }
    arguments 30 lines
  • search_decisions_citing reads open 10h ago

    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")

    mcp-tool

    {
      "type": "object",
      "title": "search_decisions_citingArguments",
      "required": [
        "code",
        "num"
      ],
      "properties": {
        "num": {
          "type": "string",
          "title": "Num",
          "description": "article number (e.g. \"L1152-1\", \"1240\")"
        },
        "code": {
          "type": "string",
          "title": "Code",
          "description": "as in get_law_article (abbreviation, name or LEGITEXT)"
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 20,
          "description": "number of decisions per source (default 20, max 50)"
        },
        "sources": {
          "anyOf": [
            {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            {
              "type": "null"
            }
          ],
          "title": "Sources",
          "default": null,
          "description": "optional list of sources to query among [\"dila\", \"jade\", \"cedh\", \"cjue\"]. Default: all."
        }
      }
    }
    arguments 42 lines
  • search_directory open 10h ago

    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)

    mcp-tool

    {
      "type": "object",
      "title": "search_directoryArguments",
      "required": [
        "query"
      ],
      "properties": {
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 20,
          "description": "number of results (max 200)"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "description": "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": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Source",
          "default": null,
          "description": "directory source (optional)"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "title": "Category",
          "default": null,
          "description": "directory category (optional)"
        }
      }
    }
    arguments 46 lines
  • search_case_law open 15h ago

    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)

    mcp-tool

    {
      "type": "object",
      "title": "search_case_lawArguments",
      "properties": {
        "sort": {
          "type": "string",
          "title": "Sort",
          "default": "relevance",
          "description": "relevance | date_desc | date_asc (ADMIN, CE, CAA, TA, CNDA)"
        },
        "court": {
          "type": "string",
          "title": "Court",
          "default": "",
          "description": "ADMIN (CE+CAA+TA, default) | CE | CAA | TA | ARIANEWEB | JUDICIAIRE | CASS | CA | TJ | TCOM | CONSTIT | CEDH | CJUE | CNDA"
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 20,
          "description": "per page (max 50)"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "default": "",
          "description": "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"
        },
        "nature": {
          "type": "string",
          "title": "Nature",
          "default": "",
          "description": "QPC, DC… (CONSTIT)"
        },
        "offset": {
          "type": "integer",
          "title": "Offset",
          "default": 0,
          "description": "pagination (pass next_offset as is)"
        },
        "date_max": {
          "type": "string",
          "title": "Date Max",
          "default": "",
          "description": "same"
        },
        "date_min": {
          "type": "string",
          "title": "Date Min",
          "default": "",
          "description": "YYYY-MM-DD (not ARIANEWEB, CEDH, CJUE)"
        },
        "numero_rg": {
          "type": "string",
          "title": "Numero Rg",
          "default": "",
          "description": "RG number (CA, JUDICIAIRE)"
        },
        "court_name": {
          "type": "string",
          "title": "Court Name",
          "default": "",
          "description": "\"TA Lille\", \"CAA Douai\" (ADMIN, CE, CAA, TA)"
        }
      }
    }
    arguments 66 lines
  • delete_account_item unknown never probed

    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)

    mcp-tool

    {
      "type": "object",
      "title": "delete_account_itemArguments",
      "required": [
        "what",
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "title": "Id",
          "description": "\"d_…\", \"e_…\", \"c_…\", \"n_…\", or \"s_…\"/\"p_…\"."
        },
        "what": {
          "enum": [
            "folder",
            "element",
            "subfolder",
            "note",
            "skill"
          ],
          "type": "string",
          "title": "What",
          "description": "\"folder\", \"element\" (saved reference), \"subfolder\", \"note\" or \"skill\" (AI skill proposal not yet activated)."
        },
        "confirm": {
          "type": "boolean",
          "title": "Confirm",
          "default": false,
          "description": "true = the user explicitly agreed; otherwise nothing is deleted."
        }
      }
    }
    arguments 33 lines
  • update_account_item unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind",
        "id"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "\"d_…\", \"c_…\", \"e_…\" or \"n_…\", matching kind."
        },
        "kind": {
          "enum": [
            "case_file",
            "subfolder",
            "item",
            "note"
          ],
          "type": "string",
          "description": "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": {
          "type": "string",
          "description": "subfolder: new name."
        },
        "text": {
          "type": "string",
          "description": "note: new text."
        },
        "stage": {
          "type": "string",
          "description": "case_file: procedural stage."
        },
        "title": {
          "type": "string",
          "description": "case_file."
        },
        "family": {
          "enum": [
            "",
            "jud",
            "adm",
            "ce",
            "eu"
          ],
          "type": "string",
          "description": "case_file: jud, adm, ce, eu or \"\"."
        },
        "number": {
          "type": "string",
          "description": "case_file: case number."
        },
        "pinned": {
          "type": "boolean",
          "description": "note: true = follows its text into every case file holding it; false = back to one case file."
        },
        "reason": {
          "type": "string",
          "description": "item, note: reason, with set_aside true; omit to reuse the earlier one."
        },
        "parties": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "alias"
            ],
            "properties": {
              "role": {
                "type": "string"
              },
              "alias": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "description": "case_file: replaces the list; aliases only, never real names."
        },
        "summary": {
          "type": "string",
          "description": "case_file: summary."
        },
        "subtitle": {
          "type": "string",
          "description": "case_file."
        },
        "assistant": {
          "type": "string",
          "description": "note: assistant name stored with the new text."
        },
        "deadlines": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "date"
            ],
            "properties": {
              "date": {
                "type": "string",
                "description": "YYYY-MM-DD"
              },
              "text": {
                "type": "string"
              }
            },
            "additionalProperties": false
          },
          "description": "case_file: replaces the list; dates copied from the user."
        },
        "set_aside": {
          "type": "boolean",
          "description": "item, note: true = set aside (kept, not proposed again); false = restored."
        },
        "case_file_id": {
          "type": "string",
          "description": "note, with pinned false: case file it goes back to (default: most recent holding the text)."
        },
        "jurisdiction": {
          "type": "string",
          "description": "case_file: court or authority."
        },
        "subfolder_id": {
          "type": "string",
          "description": "item: Subfolder \"c_…\"; \"\" = default \"À ranger\" area."
        }
      },
      "additionalProperties": false
    }
    arguments 130 lines
  • open_ticket unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "type",
        "title",
        "message"
      ],
      "properties": {
        "type": {
          "enum": [
            "error",
            "missing",
            "bug",
            "idea"
          ],
          "type": "string",
          "description": "error (wrong data), missing (source or text missing), bug, idea."
        },
        "title": {
          "type": "string",
          "maxLength": 120,
          "description": "Precise title, 120 characters at most (\"CT L1234-1: wrong renumbering date\")."
        },
        "target": {
          "type": "string",
          "description": "The reference or URL concerned (\"article:CT:L1234-1\", a URL)."
        },
        "message": {
          "type": "string",
          "maxLength": 4000,
          "description": "What is wrong, what is expected, the source. 4,000 characters at most."
        },
        "attachments": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name",
              "content"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "File name, e.g. \"extract.txt\"."
              },
              "content": {
                "type": "string",
                "description": "Plain text."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 3,
          "description": "At most 3, plain text only."
        }
      },
      "additionalProperties": false
    }
    arguments 58 lines
  • reply_ticket unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "ticket_id",
        "message"
      ],
      "properties": {
        "message": {
          "type": "string",
          "maxLength": 4000,
          "description": "The message, 4,000 characters at most."
        },
        "ticket_id": {
          "type": "string",
          "description": "Ticket \"t_…\"."
        },
        "attachments": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "name",
              "content"
            ],
            "properties": {
              "name": {
                "type": "string",
                "description": "File name, e.g. \"extract.txt\"."
              },
              "content": {
                "type": "string",
                "description": "Plain text."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 3,
          "description": "At most 3, plain text only."
        }
      },
      "additionalProperties": false
    }
    arguments 42 lines
  • create_account_item unknown never probed

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind"
      ],
      "properties": {
        "kind": {
          "enum": [
            "case_file",
            "subfolder",
            "reference",
            "note",
            "skill_proposal"
          ],
          "type": "string",
          "description": "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_proposal (name, text, scope; skills)."
        },
        "name": {
          "type": "string",
          "description": "subfolder, skill_proposal: name."
        },
        "text": {
          "type": "string",
          "description": "note: text; skill_proposal: the working method, written as instructions."
        },
        "scope": {
          "enum": [
            "general",
            "case_file"
          ],
          "type": "string",
          "description": "skill_proposal: general or case_file."
        },
        "title": {
          "type": "string",
          "description": "case_file: title."
        },
        "family": {
          "enum": [
            "",
            "jud",
            "adm",
            "ce",
            "eu"
          ],
          "type": "string",
          "description": "case_file: jud, adm, ce, eu or \"\"."
        },
        "pinned": {
          "type": "boolean",
          "description": "note: true = follows its text into all case files (needs item_id)."
        },
        "item_id": {
          "type": "string",
          "description": "note: saved reference \"e_…\" of this case file; omit for a general note."
        },
        "replaces": {
          "type": "string",
          "description": "skill_proposal: skill \"s_…\"/\"p_…\" to replace once activated."
        },
        "subtitle": {
          "type": "string",
          "description": "case_file: subtitle."
        },
        "assistant": {
          "type": "string",
          "description": "note: assistant name, e.g. \"Claude\", \"ChatGPT\"."
        },
        "references": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "reference_type"
            ],
            "properties": {
              "id": {
                "type": "string",
                "description": "decision: id of /decision/<source>/<id> from search (not the case number); cada_opinion: \"20230001\"; cnil: \"CNILTEXT…\"; doctrine: fund-prefixed, \"ddd:25038\", \"ariane_crp:4960\", \"bofip:…\", \"ctn:…\"."
              },
              "num": {
                "type": "string",
                "description": "article: number as written (\"L. 211-2\")."
              },
              "code": {
                "type": "string",
                "description": "article: code abbreviation (CPC, CC, CRPA…) or LEGITEXT…."
              },
              "as_of": {
                "type": "string",
                "description": "article, text: date of the facts YYYY-MM-DD; that version is frozen (default: today)."
              },
              "source": {
                "enum": [
                  "dila",
                  "admin",
                  "ariane",
                  "cedh",
                  "cjue",
                  "kali",
                  "travaux"
                ],
                "type": "string",
                "description": "decision: dila (judicial), admin (TA/CAA), ariane (CE)…"
              },
              "legitext": {
                "type": "string",
                "description": "text: LEGITEXT… or JORFTEXT…."
              },
              "subfolder_id": {
                "type": "string",
                "description": "Subfolder \"c_…\"; \"\" = default \"À ranger\" area. Overrides the top-level one."
              },
              "reference_type": {
                "enum": [
                  "article",
                  "text",
                  "decision",
                  "cada_opinion",
                  "cnil",
                  "doctrine"
                ],
                "type": "string",
                "description": "article (code+num), text (legitext), decision (source+id), cada_opinion (id), cnil (id), doctrine (id)."
              }
            },
            "additionalProperties": false
          },
          "maxItems": 20,
          "minItems": 1,
          "description": "reference: 1-20, checked against the database; all or nothing."
        },
        "case_file_id": {
          "type": "string",
          "description": "Case file \"d_…\"; not for case_file; optional for general skill_proposal."
        },
        "subfolder_id": {
          "type": "string",
          "description": "reference: Subfolder \"c_…\"; \"\" = default \"À ranger\" area. Default for all references."
        }
      },
      "additionalProperties": false
    }
    arguments 143 lines
  • search_recent_admin_decisions unknown never probed

    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)

    mcp-tool

    {
      "type": "object",
      "title": "search_recent_admin_decisionsArguments",
      "properties": {
        "court": {
          "type": "string",
          "title": "Court",
          "default": "CE",
          "description": "CE | CE-CAA (CE + CAA) | code of a TA or CAA (\"TA59\", \"CAA69\") | ALL_TA (the 40 TA) | ALL_CAA (the 9 CAA)"
        },
        "limit": {
          "type": "integer",
          "title": "Limit",
          "default": 20,
          "description": "results (one court; max 100)"
        },
        "query": {
          "type": "string",
          "title": "Query",
          "default": "",
          "description": "keywords; empty = all decisions of the court"
        },
        "date_max": {
          "type": "string",
          "title": "Date Max",
          "default": "",
          "description": "Date de fin incluse, format AAAA-MM-JJ (ex. « 2024-12-31 »). Vide = pas de borne."
        },
        "date_min": {
          "type": "string",
          "title": "Date Min",
          "default": "",
          "description": "Date de début incluse, format AAAA-MM-JJ (ex. « 2020-01-01 »). Vide = pas de borne."
        },
        "total_limit": {
          "type": "integer",
          "title": "Total Limit",
          "default": 60,
          "description": "overall cap (ALL_TA, ALL_CAA; 0 = no cap) date_min, date_max: YYYY-MM-DD, date of the decision (optional)"
        },
        "limit_per_court": {
          "type": "integer",
          "title": "Limit Per Court",
          "default": 5,
          "description": "results per court (ALL_TA, ALL_CAA; max 100)"
        }
      }
    }
    arguments 48 lines
  • get_account_item unknown 10h ago

    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.

    mcp-tool

    {
      "type": "object",
      "required": [
        "kind"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "Id of the case file \"d_…\", item \"e_…\" or ticket \"t_…\"; omit for kind=account."
        },
        "kind": {
          "enum": [
            "account",
            "case_file",
            "item",
            "ticket"
          ],
          "type": "string",
          "description": "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 files where the same reference is saved (in_case_files); ticket: one ticket (\"t_…\") with its messages."
        }
      },
      "additionalProperties": false
    }
    arguments 23 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id b38511c3086a459e.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/b38511c3086a459e/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/b38511c3086a459e/badge.svg)](https://brick.blue/agent/b38511c3086a459e?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.