Swiss Case Law vs Justicelibre
A side-by-side look at the Swiss Case Law and Justicelibre MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Swiss Case Law for legal work; choose Justicelibre for legal. You can also run both side by side in one mcpServers block.
Which MCP server should you choose?
Choose Swiss Case Law when
- You need dedicated capabilities in the Legal domain.
- Its auth model fits you: No auth required.
- You want tools like
search, fetch, search_decisions.
Choose Justicelibre when
- You need dedicated capabilities in the Legal domain.
- Its auth model fits you: No auth required.
- You want tools like
search_doctrine, get_law_article, search_decisions_citing.
Feature & specification comparison
Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Legal | Legal |
| Quality signal | 59/100 · Good | 55/100 · Good |
| Install command | Not confirmed yet | Not confirmed yet |
| Transport | — | — |
| Auth | No auth required | No auth required |
| Pricing | Free | Free |
| Required env vars | None listed | None listed |
| Verified owner | Community listing | Community listing |
| GitHub stars | 75 | 12 |
| Directory activity | 3 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 42 | 19 |
| Full listing | View Swiss Case Law | View Justicelibre |
Tools & capabilities
Swiss Case Law tools 42
searchMinimal search tool following the deep-research search/fetch convention. Returns a ranked list of Swiss court decisions matching a query, each as {id, title, url, snippet}. Pair with `fetch` to retrieve a decision's full text by id. General (non-deep-research) clients should prefer `search_decisions`, which exposes filters (court, canton, date, language) and richer metadata.fetchMinimal fetch tool following the deep-research search/fetch convention. Fetches one Swiss decision's full text by id, returning {id, title, text, url, metadata}. The id comes from a `search` result (a decision_id like bger_6B_1234_2025; a docket number or BGE reference also resolves). General clients should prefer `get_decision`.search_decisionsUse this tool to find COURT DECISIONS (Rechtsprechung): 1,050,000+ Swiss federal and cantonal decisions plus ~2,800 ECtHR decisions concerning Switzerland. Full-text search with keywords, phrases (in quotes), Boolean operators (AND, OR, NOT), prefix matching (word*), docket lookup (6B_1234/2025) and column-scoped search (regeste:keyword). Filter by court, canton, language, date range, chamber. Results are relevance-ranked and enriched with citation counts, statute references and is_leading_case. Use offset to page. Most recent decisions: empty query + sort='date_desc' + court filter. Newly PUBLISHED decisions (alerts): published_from + sort='published_desc'. Not for statutes (search_laws), commentary (search_scholarship), or administrative guidance (search_practice).get_decisionFetch a single court decision with full text. Look up by decision_id (e.g., bger_6B_1234_2025), docket number (e.g., 6B_1234/2025), or partial match. Full text is truncated at 200,000 characters for very long decisions. Set full_text=false to get only metadata and regeste.get_decisionsUse this tool to fetch SEVERAL decisions at once (1-10 ids) instead of calling get_decision repeatedly. Same data per decision — canonical citation strings, Markdown link, Regeste, metadata — in ONE call. Prefer this whenever you are about to read more than one decision from a search result: it is the difference between one tool call and ten, which matters because clients cap tool calls per turn. full_text defaults to FALSE here (unlike get_decision) because ten full judgments exceed connector response limits; set it true only for a short id list, and each text is excerpted with the cut disclosed. Ids not found are reported individually — the rest of the batch still returns.list_courtsList all available courts with decision counts, date ranges, and language coverage. Use this to discover what data is available.get_statisticsGet aggregate statistics about the dataset. Optionally filter by court, canton, or year.find_citationsGiven a decision_id, show what it cites and what cites it. Uses the reference graph database with 9.65M citation edges. Returns resolved citations with confidence scores and unresolved references.find_appeal_chainTrace the appeal chain (Instanzenzug) for a decision. Shows prior instances (lower courts) and subsequent instances (appeals to higher courts). Reconstructs the full procedural path, e.g. Bezirksgericht → Obergericht → Bundesgericht. Uses the is_prior_instance flag from decision headers.find_leading_casesFind the most-cited decisions for a topic or statute. Authority ranking based on citation graph; a free-text topic ranks decisions whose regeste carries the query terms first (`regeste_match`: share of terms found, null without a regeste). Filter by statute (law_code + article), topic query, court, and date range. Top-3 results auto-attach a `pinpoint` field {e_number, matched_sentence, confidence, url, score, source} anchoring the most-relevant Erwägung (surface it as 'E. <e_number>' when confidence is high or medium). Each result also carries citation_string_{de,fr,it} + canonical_url + is_leading_case + citation_count for ready-to-quote Swiss-format citations. A statute reference inside `query` ("Art. 29 BV") is used as the statute filter. When the query excludes every candidate, the page is relaxed to ranked OR and flagged `filters_relaxed: true` with a `note` — nearest neighbours, not on-point authority.analyze_legal_trendYear-by-year decision counts showing jurisprudence evolution. Use with a statute reference (law_code + article), a text query, or both. Returns yearly counts with visual bar chart.draft_mock_decisionBuild a research-only mock decision outline from user facts. Combines relevant Swiss case law retrieval with statute references. If possible, enriches statutes with Fedlex text excerpts. IMPORTANT: The tool may return clarification questions (high/medium priority). High-priority clarifications must be answered (via the clarifications parameter) before the tool will provide a conclusion. Call again with clarifications to get the full analysis.- +30 more on the listing page
Justicelibre tools 19
search_doctrineOpinions of the CADA (access to administrative documents), decisions of the Défenseur des droits, conclusions of the CE's rapporteurs publics, BOFiP (tax guidance), Code du travail numérique, CNIL deliberations. These are NOT court decisions: an opinion does not bind the judge. 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")get_law_articleArticle of a French code or statute, as in force on a date (default: today). `code`: abbreviation ("CT", "cc"), name ("code du travail"), LEGITEXT or statute ("loi 91-647", "loi du 1er juillet 1901"); list: about(topic="codes"). European texts: "CEDH" (protocols: num="P1-1"), "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")search_decisions_citingCourt decisions that EXPLICITLY cite an article ("article 1240 du code civil", "art. L. 1152-1 du code du travail"). Does not find indirect references or citations without an article number: searching by concept is for `search`. Example: search_decisions_citing(code="CC", num="1240")searchSearches all sources (French and European case law, codes and statutes, Journal officiel, collective agreements, doctrine), expanding to legal synonyms. Entry point for an open question; for one specific court, use `search_case_law`. A citation ("Cass. soc. 11 mai 2022", an 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)search_case_lawDecisions of one court or court family, by relevance or by date (latest decisions: `search_recent_admin_decisions`). Keywords in French. ECHR, CJEU: texts sometimes in English only. Example: search_case_law(query="licenciement inaptitude", court="CASS") Args: query: keywords (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) | 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)search_recent_admin_decisionsLatest decisions from the administrative courts' open data (daily mirror), sorted by date: what a court has just decided (by relevance: `search_case_law`). All words required (singular or plural); "in double quotes": exact form; OR/AND/NOT/NEAR in UPPERCASE between two words 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)get_decisionFull text of a decision, by `id` or by `numero` (+ `court`). Several decisions with that number: list `decisions` (ECHR/CJEU: the one judgment is served, the rest in `autres_documents`). An administrative number alone ("2200433") is refused; CE: see `homonymes`. Also reads 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)search_legislationKeyword search in French codes and statutes (LEGI), the Journal officiel (JORF), agreements (KALI) or EU law. Known article: `get_law_article`. Keywords in French. Example: search_legislation(query="harcèlement moral", code="CT") Agreement (corpus="kali"): idcc="1486" without 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 tooresolve_referenceTurns a reference into an identifier and an official link: statute or decree number ("91-647", "loi n° 78-17") → the text; identifier (LEGIARTI, LEGITEXT, JORFTEXT, CETATEXT, JURITEXT, ECLI, CELEX of a judgment or of a text, HUDOC) → URL at the source; CNDA reference ("CNDA, 12 mars 2024, n° 23012345") → id and link; 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. A decision number is read with get_decision instead (the error gives the exact call). Examples: resolve_reference(reference="loi n° 91-647") resolve_reference(reference="LEGIARTI000032041571") Args: reference: text number or identifier legitext: parent LEGITEXT (for a LEGIARTI of a text outside the codes) date: YYYY-MM-DD (article version in the URL)get_legislative_historyLegislative history (travaux préparatoires) of a French statute or bill (Assemblée nationale files since 2012; key dates only before). Each step of `parcours` lists its documents (bill, reports, opinions, adopted or rejected texts: number, date, authors, official URL), votes, 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 chamberssearch_directoryPublic addresses and contacts in France: courts, court registries (greffes), town halls, CCAS, prefectures, public services. Example: search_directory(query="tribunal judiciaire Dunkerque") Args: query: name, town or type of office (French); OR/AND/NOT in UPPERCASE between two 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)aboutWhat JusticeLibre covers (sources, volumes, freshness, terms of use), the list of administrative courts and their codes, or the list of codes and statutes accepted by get_law_article. Example: about(topic="codes") Args: topic: service | courts | codes- +7 more on the listing page
Ready-to-paste client configs
Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
Swiss Case Law
No confirmed install command for Swiss Case Law yet — follow the setup steps linked from its listing page rather than a guessed package name.
Justicelibre
No confirmed install command for Justicelibre yet — follow the setup steps linked from its listing page rather than a guessed package name.