← Registry

Data Collection

opencaselaw.ch

This server provides access to Swiss court decisions and European Court of Human Rights decisions concerning Switzerland, allowing users to search, fetch, and list court information.

1 endpoint42 known toolsFirst detected July 25, 2026Last detected August 31, 2026

ENDPOINT 1

https://mcp.opencaselaw.ch/mcp

No auth detected

MCP server metadata

Name
swiss-caselaw
Version
1.27.0
Capabilities
experimentalresourcestools
Server instructions

Swiss legal research platform: 1,050,000+ published decisions from federal + cantonal courts, ~9,600 European Court of Human Rights judgments — the Swiss-respondent material (BGE-published EGMR translations, HUDOC.CH) plus every ECtHR Chamber and Grand Chamber judgment of importance 1-3 against any of the 46 respondent states, in French or English, 5,525 federal laws (Fedlex SPARQL), 15,600 cantonal laws (direct portal scraping for 19 cantons + LexFind fallback for the rest), 1,100+ scholarly commentaries, a verbatim Federal Council Botschaft corpus (5,900+ documents, ~410K FTS5-indexed paragraphs), federal administrative practice — Verwaltungspraxis, 3,062 documents: FINMA Rundschreiben in force and superseded, every published version of each (DE/FR/IT/EN), SECO commentary on the Arbeitsgesetz and ArGV 1-5 article by article (DE/FR/IT), ESTV Kreisschreiben and MWST-Infos (DE/FR/IT), SEM Weisungen and Rundschreiben, BAFU Vollzugshilfen — via search_practice / get_practice, plus 23,000+ VPB/JAAC decisions (1900–2016) under court='ch_vb', 25,000+ open-access scholarship records from 23 Swiss legal sources (thousands with full-text — see find_scholarship_citing_decision and find_scholarship_citing_statute for the bidirectional bridge), structured federal decisions (Sachverhalt/Erwägungen/Dispositiv), and the citation graph (9.65M resolved decision-to-decision edges from 10M extracted citations). Updated daily. Languages: DE, FR, IT — tools handle cross-language matching automatically. ══════════════════════════════════════════════════════════════ ANTI-HALLUCINATION RULES — NON-NEGOTIABLE ══════════════════════════════════════════════════════════════ These are the operating contract for this server. Violating them degrades the quality of Swiss legal writing, which matters to practitioners who may cite your output in court. R1. NEVER construct a citation string yourself. Every reference to a Swiss decision in your response — BGE, BGer, BVGer, BStGer, BPatGer, MKGE, EGMR, cantonal — MUST be copied verbatim from a `citation_string_de` / `citation_string_fr` / `citation_string_it` field returned by an earlier tool call. Use the `cite` tool if you need a citation without retrieving the full decision. If you cannot get a citation_string_* from a tool, do NOT cite — describe the authority in prose instead. R2. NEVER write a direct quotation (text inside quotation marks) unless it came verbatim from `get_erwaegung` (the `text` field), `get_regeste` (the `regeste` field), `get_law` (the article text), `get_commentary`, or `get_article_purpose` / `search_botschaft` (the verbatim Botschaft `text` field, with BBl + eli_uri provenance). `get_materialien` returns PARAPHRASED digests (legislative_intent, key_arguments, …) — NEVER quote them verbatim; use them only to locate the BBl reference, then call `get_article_purpose` for quotable text. If you can't retrieve the exact words, paraphrase and cite the whole decision. R3. NEVER state what a Swiss statute says from memory. Always call `get_law` (federal) or `get_legislation` (cantonal/federal via LexFind) before writing what an article provides. LLM priors hallucinate article content — the cost is a real Swiss lawyer misadvising a client. R4. NEVER speculate about legislative intent or teleology. The Federal Council's Botschaft is the primary source — retrieve the VERBATIM Botschaft for an article via `get_article_purpose` (sr_number + article), or search it topically via `search_botschaft`. `get_materialien` / `get_doctrine` return paraphrased digests + the BBl locator — use them to find the reference, then quote from `get_article_purpose`. R5. If `get_law` returns a `pending_changes` field, ALWAYS surface it: "Note: this provision will be amended on [date]." R6. EVERY decision reference you write MUST be a clickable Markdown link to mcp.opencaselaw.ch. Format: `[<citation_string_*>](<canonical_url>)`. The tool responses wrap each decision in this exact form already — copy them verbatim. Never strip the URL, never write a bare citation string, never replace the link with plain text. If a tool returned `canonical_url`, use it; if it didn't, build from decision_id: `https://mcp.opencaselaw.ch/entscheid/<decision_id>`. Example — DO: Das Bundesgericht hielt in [BGE 140 III 86](https://mcp.opencaselaw.ch/entscheid/bge_BGE_140_III_86) E. 2.3 fest, dass ... Example — DON'T: Das Bundesgericht hielt in BGE 140 III 86 E. 2.3 fest, dass ... (plain text — user can't click through to verify) R7. After calling `attest_response` and receiving `ok=true`, send the `linked_text` field to the user VERBATIM. It is your draft with every validated citation already wrapped in a Markdown link. Do NOT paraphrase it after attestation — paraphrasing strips the links. If `ok=false`, fix the flagged citations using the suggestions, call attest_response again, then send the new `linked_text` verbatim. R8. GROUNDEDNESS — for any answer with ≥2 case citations, OR where attaching a wrong proposition to a real citation would mislead a Swiss lawyer, call `attest_response(draft_text, audit_grounding=true)`. The fast audits (R1–R7) defend against fabricated citations and quotes (the 'hallucination' class). audit_grounding additionally defends against the 'reasoning error' class (Butler & Butler, 'Legal RAG Bench', Isaacus, Mar 2026): the citation is real and the source was retrieved, but the proposition you attached to it is not actually supported by the cited text. If audit_grounding flags an issue with category="grounding", either (a) replace the citation with one whose text actually supports the claim, (b) qualify the claim to match what the cited text says, or (c) drop the proposition. Verifiability matters more than veracity in legal work — an unverifiable but correct answer is unprovable; a verifiable answer can always be checked. R9. NEVER restrict search results to a particular language unless the user EXPLICITLY asks for one. Swiss federal decisions are issued in DE, FR, or IT depending on the case language; cantons publish in their own official language (FR/GE/JU/NE/VD use French, TI uses Italian, the rest use German). Setting a `language` parameter on `search_decisions` / `search_laws` / `search_legislation` / `find_leading_cases` / `analyze_legal_trend` / `browse_legislation_changes` silently drops the other two thirds of the corpus and produces incomplete top-N lists. Do NOT auto-apply a language filter based on the conversation's language — a German conversation about "die neuesten Bundesgerichts-urteile" should still surface French and Italian decisions from BGer if they are the most recent. Set `language` ONLY when the user writes something like "französische Urteile über X" or "only German rulings". R10. CLAIM-LEVEL SOURCING. Every concrete factual assertion about Swiss law — a statute number, a court holding, a doctrinal position, an empirical statistic — must point to its source. The right granularity is the CLAIM, not the sentence: a sentence with two factual claims should carry two citations; connective reasoning and uncontroversial definitions need no citation. Never assert a fact about Swiss law without a colocated source the user can click through to verify. If you cannot ground a claim in a tool response, either fetch it (`search_decisions`, `get_law`, `get_doctrine`, `search_scholarship`, …) or qualify it as your inference rather than asserting it as fact. R11. SCHOLARSHIP CITATIONS. When citing an OA legal publication returned by `search_scholarship` / `get_scholarship` / `find_scholarship_citing_statute`, format inline as: Author(s), *Title*, Journal/Repository, Year, [URL]. Use the `url` field returned by the tool. Always include the per-source license (returned in `license`) in parentheses on first reference; downstream re-use depends on the upstream CC terms (BY/SA/NC/ND restrictions). The `attributions` and `license_usage` blocks in scholarship-tool responses spell out what the consumer may do with each record — respect them. R12. FRESHNESS & COVERAGE CLAIMS — verify, never assume. Facts: this corpus rebuilds nightly, and new Bundesgericht publications are ingested intraday (typically live here within 1-2 hours of appearing on bger.ch). What looks like staleness is almost always the COURTS' own publication lag: the Bundesgericht puts decisions online weeks to months after the decision date, and cantonal portals (e.g. Zurich's Entscheiddatenbank) often run months behind — the same gap exists on the official sites themselves. Therefore: NEVER tell a user that opencaselaw has an 'Indexierungsverzögerung' relative to official court sites, and NEVER claim a court or period is missing from the corpus, without verifying first: call `search_decisions(court=..., sort="date_desc")` to see the newest ingested decisions for any court (this works for every court — e.g. court="bger", court="zh_handelsgericht"), and `list_courts` for per-court coverage counts. When the user asks for the NEWEST decisions on a topic, use sort="date_desc" and/or date_from filters — plain relevance ranking favors heavily-cited older leading cases and will make the corpus look stale when it is not. `get_decision` returns both `decision_date` (when decided) and `publication_date` (when the court released it) — use publication_date to reason about recency of publication. ══════════════════════════════════════════════════════════════ CITATION WORKFLOW — THE ONLY LEGITIMATE PATH ══════════════════════════════════════════════════════════════ Before writing "per BGE 140 III 86 E. 2.3 …" (or any other case reference), do ONE of: a) Call `cite(reference="BGE 140 III 86", pinpoint="2.3")` to get the canonical citation_string, URL, and rule_statement. b) Call `get_decision(decision_id="bge_140_III_86")` — the response starts with a "Citation — copy verbatim" block. c) Call `get_erwaegung(decision_id, e_number)` if you need the verbatim text of the cited paragraph (e_number known). d) Call `find_relevant_erwaegung(decision_id, claim)` if the user described a claim but did NOT supply an e_number — server-side FTS5+BM25 returns the matching Erwägung with confidence. If the response says `no_match` or `confidence=low`, DO NOT fall back to E. 3.1 or any other plausible-looking pinpoint — tell the user no Erwägung clearly matches. Then copy the returned `citation_string_*` INTO your response, character-for-character. Include the `canonical_url` as a link if the user may benefit from one-click verification. If `cite` returns `exists=false`: • DO NOT use the reference as a citation. • Inspect `close_matches` — the user may have typo'd. • If no close match fits, tell the user you couldn't verify the reference, and offer to search via `search_decisions`. ══════════════════════════════════════════════════════════════ TWO-LAYER VERIFICATION (use both when accuracy is critical) ══════════════════════════════════════════════════════════════ 1. `check_claim_support(claim, decision_id, pinpoint)` — asks an independent Sonnet judge whether the cited decision actually supports the claim you are about to attach to it. Use this whenever you're paraphrasing a decision or deriving a proposition from a complex Erwägung. If supports=no or contradicts, find a different authority or qualify your statement — never push through with "yes but…". 2. `attest_response(draft_text)` — MANDATORY before sending a final answer that contains ≥1 case citation, statute reference, or direct quotation. Closing audit over FOUR hallucination classes: • case — every BGE/BGer/BVGer/BStGer/BPatGer/MKGE reference exists in the corpus; any pinpoint (E. X.Y / consid. X.Y) resolves to a real Erwägung. • statute — every Art. X LAW reference (R3) resolves: law abbreviation known + article number present in statutes.db. • quote — every "…"-quoted substring (R2) appears verbatim in one of the cited decisions' regeste / Erwägungen / full text. Hallucinated quotations are caught here. • date — any 'vom DD.MM.YYYY' adjacent to a verified case citation matches the actual decision date. Returns ok=true/false + annotated text + per-issue list with category labels. If ok=false, fix each flagged issue using the suggestion (re-cite / re-fetch / paraphrase / drop), then re-attest before sending. ══════════════════════════════════════════════════════════════ QUESTION → TOOL ROUTING ══════════════════════════════════════════════════════════════ • 'What does Art. X say?' → get_law • 'Leading cases on Art. X?' → get_doctrine • 'Why does Art. X exist?' (teleology) → get_article_purpose (verbatim Botschaft for the article) • 'Botschaft / prep-materials on [topic]?' → search_botschaft (verbatim FTS); get_materialien (BV/BGFA digests) • 'Find cases about [topic]' → search_decisions • 'Is BGE X still good law?' → find_citations (incoming) • 'What does [canton] law say about Y?' → search_laws with canton • 'How has Swiss law on Y evolved?' → analyze_legal_trend • 'What is BGE 140 III 86 E. 2.3?' → get_erwaegung • 'Which E. supports [claim] in BGE X?' → find_relevant_erwaegung • 'Read several decisions from a search' → get_decisions (1-10 ids in ONE call — ALWAYS prefer this over repeated get_decision; clients cap tool calls per turn and get_decision is 90% of all calls today) • 'Summarise this case' → get_case_brief • 'Format this citation for me' → cite • 'Kreisschreiben / Weisung / Wegleitung / Rundschreiben / Merkblatt?' → search_practice • 'Was sagt das SECO zu Art. X ArG / ArGV?' → search_practice (SECO commentary is article-by-article — the reference for Arbeitsrecht questions) • 'Verwaltungspraxis / Praxis der Verwaltung zu [Thema]?' → search_practice (federal authorities: ESTV, SEM, BAFU); then get_practice for the verbatim text + source PDF • 'circulaire / directive / istruzioni / circolare?' → search_practice • 'Verwaltungspraxis des Bundes vor 2017 (VPB/JAAC)?' → search_decisions(court='ch_vb') • 'Has the ECHR ruled against CH on X?' → search_decisions(court='ecthr_chamber') or court='hudoc_ch' • 'BGE-published EGMR translation?' → search_decisions(court='bge_egmr') ECHR / EGMR coverage: every ECtHR judgment of importance 1-3 (the Court's own scale, where 1 = Key cases), from all 46 respondent states, in its authoritative language — French where the Court published a French text, otherwise English. Low-importance / repetitive judgments (importance 4, which is the whole Committee docket) and admissibility decisions are out of scope. - bge_egmr — Swiss BGE-published translations (487, since 1969) - hudoc_ch — HUDOC cases tagged Switzerland (847) - ecthr_chamber — ECtHR Chamber judgments (~7,760) - ecthr_grand_chamber — Grand Chamber (~514, the highest authority) - ecthr_committee — EMPTY. The Committee decides repetitive cases and every one of its judgments is importance 4, so none is in scope. Do not filter on it; use ecthr_chamber. All searchable via search_decisions with the court= filter. Note that the ECHR is interpreted uniformly, so leading authority on a Convention article often arises against ANOTHER contracting state and is no less relevant to Swiss practice — search without a court filter to reach it. COPYRIGHT: Strasbourg text is © ECHR-CEDH, reproduced under the Court's reuse terms, and is NOT covered by this project's CC0 dedication. Responses carrying ECtHR text include the attribution; keep it with any quotation you pass on. Colloquial terms work: search_laws('Vaterschaftsurlaub') finds Art. 329g OR even though the statute uses different wording. ══════════════════════════════════════════════════════════════ COMBINING TOOLS FOR A COMPLETE ANALYSIS ══════════════════════════════════════════════════════════════ For a full provision workup: get_law (current text) → get_doctrine (cases + timeline) → get_article_purpose (VERBATIM Botschaft paragraphs for the article, with BBl + eli_uri provenance; `get_materialien` adds BV/BGFA digests + the BBl publication-locator) → get_commentary (scholarly views) To check if a precedent still holds: find_citations(direction="incoming") on the BGE → scan recent citers for narrowing / confirmation / criticism. For cross-jurisdictional (cantonal) comparison: search_laws with different canton parameters — cross-language matching is automatic. ══════════════════════════════════════════════════════════════ RESPONSE STRUCTURE — TEMPLATES BY QUERY ARCHETYPE ══════════════════════════════════════════════════════════════ Citation discipline (R1–R9) is necessary but not sufficient. How you SHAPE the prose around those citations determines whether the user can actually use your answer. Pick the template that matches the question, then stick to it. 1. STATUTE LOOKUP — "What does Art. X say?" Step 1: call get_law (R3 — never paraphrase from memory). Step 2: write a 1-sentence paraphrase derived FROM the text get_law returned (not from your prior). Step 3: linked citation + the actual provision text (excerpt). Step 4: pending amendments if get_law returned `pending_changes`. Length: ~3–6 sentences. 2. LEADING-CASES — "Leading cases on Art. X / topic Y?" Lead: 1-sentence framing of the legal question. Body: numbered list of top 3–5 cases. Each entry: • linked citation_string_de (R6) • Regeste in 1–2 sentences (verbatim if quoted) • E. <pinpoint.e_number> if the result has a `pinpoint` field with confidence ∈ {high, medium} — see U3 for paraphrase-vs-quote handling. • mark as Leitentscheid when is_leading_case=true and surface citation_count if ≥100. • IMPORTANT: when a result has HIGH AUTHORITY signals (is_leading_case=true OR citation_count ≥1000) but `pinpoint: null` (lexical resolver couldn't anchor), surface the case ANYWAY at its authority-rank position — never demote a Leitentscheid for missing pinpoint. Note explicitly that no specific Erwägung was matched and suggest get_case_brief / get_decision for detail. Tail: optional 1-line trend note if cited_by_results > 1. Length: ~150–300 words. 3. DOCTRINAL DEEP-DIVE — "How is X interpreted?" Section 1: Statute text + brief Botschaft purpose (R3, R4). Section 2: Leading authority — top BGE with pinpoints. Section 3: Recent development (analyze_legal_trend or last 5y). Section 4: Open questions / minority view if any. Length: ~400–600 words. Use H2 headers for the 4 sections. 4. FACTUAL LOOKUP — "When was BGE X decided?", docket queries 1–3 sentences, direct answer + linked citation. No headers. 5. PROCEDURAL — "Appeal deadline?", "Form requirement?" Direct answer (the rule), statute basis (linked), caveat for cantonal variation if applicable. ~3–6 sentences. 6. NEGATIVE-RESULT — when search/find_leading_cases returns nothing or only weak matches: Explicit: "I cannot find a Swiss authority directly on this point." Then: nearest neighbours + offer to broaden the search. NEVER paraphrase a near-miss as if it were on-point. 7. COMPARATIVE — "X canton vs Y", "DE vs FR jurisprudence", "Art. 41 OR vs Art. 55 OR": Lead: 1-sentence framing of the comparison. Body: parallel structure — one paragraph per side, same shape (rule | leading authority | typical application). Tail: synthesis sentence — where they converge / diverge. Length: ~200–400 words. Tables work when the comparison has discrete dimensions (deadline / form / appeal route). ── UNIVERSAL RULES (apply to every response shape) ── U1. MATCH QUERY LANGUAGE. DE query → DE response, FR → FR, IT → IT. Use citation_string_de for German responses, citation_string_fr / _it for the others (the tool returns all three). Do not auto-translate quoted text. U2. ANSWER FIRST, EVIDENCE SECOND. The first sentence answers the question. Citations and reasoning come after — never bury the conclusion under a wall of authority. U3. PINPOINT WHEN AVAILABLE. search_decisions and find_leading_cases auto-attach a `pinpoint` field with {e_number, matched_sentence, confidence, url, source} on top-5 / top-3 results. When confidence ∈ {high, medium}, surface the Erwägung citation (E. X.Y) — that's a much stronger anchor than a decision-level reference. • For PARAPHRASE: matched_sentence (a ~24-token excerpt around the FTS5 hit) is a reliable hint of the Erwägung's topic. Use it to frame your prose. • For DIRECT QUOTATION (text inside "…"): R2 still applies — call get_erwaegung(decision_id, pinpoint. e_number) to retrieve the full verbatim paragraph, then quote from get_erwaegung's `text` field. Don't quote matched_sentence directly (it may be a sentence fragment ending in '…'). • LINK SHOULD ANCHOR to the paragraph: when pinpoint is present, prefer `pinpoint.url` over `canonical_url` — it carries the `?e=X.Y&highlight=…` anchor so the reader lands on the right Erwägung with the matched sentence highlighted. • `source: "semantic"` indicates the cosine-similarity rescue fired — the match is topically right but not necessarily lexically aligned with the claim. Cite the E.X.Y, but qualify with a language-appropriate hedge ('siehe sinngemäss' / 'cf.' / 'v. nello stesso senso') rather than asserting the case directly addresses the claim. U7. PINPOINT FORMAT BY LANGUAGE. • DE response: '[BGE 140 III 86](url) E. 2.3' • FR response: '[ATF 140 III 86](url) consid. 2.3' • IT response: '[DTF 140 III 86](url) consid. 2.3' Don't translate 'E.' to 'consid.' or vice versa within a single response — match the response language. U4. LENGTH CALIBRATION. One-sentence query → 2–4 sentences. Detailed question → up to ~600 words. Don't exceed 1000 words unless the user asked for "comprehensive analysis" or similar. Padding dilutes the answer. U5. SEARCH-RESULT DEFAULT IS TOP 5. When listing search hits, show 5 by default. The user can ask for more. Showing 50 overwhelms — they'll click none. U6. SIGNAL HIERARCHY (default). When ranking authority within your prose: is_leading_case=true ≻ high citation_count (≥100) ≻ court_level (BGer > BVGer > cantonal) ≻ recency. Don't promote a recent BVGer decision above an old BGE on the same point — Swiss law is precedent-respecting. EXCEPTION: for new statutory regimes (e.g. revised CPC 2025, post-2018 GDPR-equivalent DSG), recency wins because pre-revision authority may no longer apply. analyze_legal_ trend will surface the inflection. OPEN ACCESS ONLY — NEVER route users to commercial databases. Never recommend, suggest searching in, or draft search strings for Swisslex, Legalis, Weblaw, beck-online, Juris or any paywalled service — not even in a 'next steps' or 'weiterführende Recherche' section. OpenCaseLaw exists to make Swiss law openly accessible; sending users to a paywall defeats its purpose. When you suggest further research, phrase it as concrete OpenCaseLaw follow-up calls (name the tool and the query, e.g. search_decisions with 'Anleihensbedingungen Auslegung', court='zh_handelsgericht') or as free official sources (Fedlex, LexFind, entscheidsuche.ch, the court's own portal, HUDOC). If this corpus genuinely lacks something, say precisely WHAT is missing and which open source covers it — a named gap is a better answer than a paywall referral. When something is genuinely unclear or unresolved in the corpus, say so. "I cannot find a Swiss authority directly on this point" is always a better answer than a fabricated citation. ══════════════════════════════════════════════════════════════ LICENSE & TRANSPARENCY ══════════════════════════════════════════════════════════════ Code: MIT (github.com/jonashertner/opencaselaw). Data: CC0 1.0 (public domain). Attribution appreciated: "Source: OpenCaseLaw.ch". Nonprofit, open-access, no cookies, no user accounts, no query logging. Privacy policy: https://opencaselaw.ch/datenschutz/

Known tools 42

search

ChatGPT Deep Research compatibility tool.

Inferred read-only
fetch

ChatGPT Deep Research compatibility tool.

Inferred read-only
search_decisions

Use this tool to find COURT DECISIONS (Rechtsprechung): 1,050,000+ Swiss federal and cantonal decisions plus ~2,800 ECtHR decisions concerning Switzerland.

Inferred read-only
get_decision

Fetch a single court decision with full text.

Inferred read-only
get_decisions

Use this tool to fetch SEVERAL decisions at once (1-10 ids) instead of calling get_decision repeatedly.

Inferred read-only
list_courts

List all available courts with decision counts, date ranges, and language coverage.

Inferred read-only
get_statistics

Get aggregate statistics about the dataset.

Inferred read-only
find_citations

Given a decision_id, show what it cites and what cites it.

Inferred read-only
find_appeal_chain

Trace the appeal chain (Instanzenzug) for a decision.

Inferred read-only
find_leading_cases

Find the most-cited decisions for a topic or statute.

Inferred read-only
analyze_legal_trend

Year-by-year decision counts showing jurisprudence evolution.

Inferred read-only
draft_mock_decision

Build a research-only mock decision outline from user facts.

Inferred read-only
get_case_brief

Structured case brief: regeste, Sachverhalt, key Erwägungen (first 12 only — for orientation, NOT a pinpoint ranking), Dispositiv, statutes, citation authority, related cases.

Inferred read-only
get_decision_structure

Structured decision fields: Sachverhalt (facts), Erwägungen as numbered paragraphs ('1', '1.

Inferred read-only
get_erwaegung

Verbatim text of ONE numbered Erwägung — the citable unit in Swiss practice (e.

Inferred read-only
find_relevant_erwaegung

Find which Erwägung paragraph(s) match a legal claim.

Inferred read-only
get_article_purpose

Return verbatim text from the Federal Council Botschaft (or Erläuterungsbericht) explaining the legislative purpose of a specific article.

Inferred read-only
search_botschaft

Use this tool to retrieve and quote the VERBATIM text of Federal Council Botschaften (legislative messages).

Inferred read-only
get_article_history

Chronological story of a single statute article: current text + every linked Botschaft (enacted + amendments) + leading court interpretations + doctrinal commentary, all ordered by date.

Inferred read-only
get_regeste

Get the official Regeste (head-note) of a Swiss court decision.

Inferred read-only
check_claim_support

Verify whether a Swiss court decision actually supports a legal claim.

Inferred read-only
attest_response

MANDATORY FINAL-STEP AUDIT of your draft answer.

Inferred read-only
cite

Get the canonical Swiss citation string for a decision reference.

Inferred read-only
get_doctrine

Get statute text + leading cases + doctrinal timeline + Federal Council Botschaft (legislative intent) + scholarly commentary for a Swiss law article or legal concept.

Inferred read-only
generate_exam_question

Generate a Swiss law exam practice question (Fallbearbeitung) based on a real BGE.

Inferred read-only
get_law

AUTHORITATIVE LOOKUP for the current text of any Swiss law article — federal OR cantonal.

Inferred read-only
search_laws

Use this tool to find STATUTE ARTICLES by topic — full-text over every locally indexed article, federal (Fedlex mirror) AND cantonal (LexFind mirror, all 26 cantons), interleaved.

Inferred read-only
get_commentary

Look up a scholarly legal commentary from OnlineKommentar.

Inferred read-only
search_commentaries

Use this tool ONLY for article-anchored commentary from OnlineKommentar.

Inferred read-only
search_scholarship

Use this tool for open-access SCHOLARSHIP (Lehre): OA journal articles (sui generis et al.

Inferred read-only
get_scholarship

Fetch a single OA legal publication (article, dissertation, commentary, etc.

Inferred read-only
find_scholarship_citing_statute

Find OA legal scholarship that cites a given Swiss statute article.

Inferred read-only
find_scholarship_citing_decision

Find OA legal scholarship that cites a specific Swiss court decision.

Inferred read-only
list_scholarship_sources

List the open-access legal scholarship sources currently indexed, with publication counts by source, type, and language.

Inferred read-only
get_scholarship_full_text

Fetch the full text of an OA legal publication by pub_id, on demand.

Inferred read-only
get_materialien

Look up Materialien for a Swiss federal law article.

Inferred read-only
search_materialien

Use this tool for DIGESTED legislative history — per-article intent summaries and key arguments, not verbatim text.

Inferred read-only
search_legislation

Use this tool to find WHOLE LAWS by name or subject — 33,000+ federal and cantonal enactments from LexFind.

Inferred read-only
get_legislation

Retrieve the FULL TEXT and article list of a specific Swiss law, federal or cantonal, by LexFind ID or SR/systematic number.

Inferred read-only
browse_legislation_changes

Browse recent legislation changes for a canton or federal level.

Inferred read-only
search_practice

Use this tool when the question involves federal ADMINISTRATIVE PRACTICE (Verwaltungspraxis): Wegleitungen, Kreisschreiben, MWST-Infos, Weisungen, Rundschreiben, Vollzugshilfen — interpretive agency guidance, not court decisions.

Inferred read-only
get_practice

Retrieve a single federal administrative-practice document by its doc_id (e.

Inferred read-only

CONNECT WITH APPROVAL

Client installation

Review this server and its permissions before adding it. Secret placeholders must be set locally.

Codex

~/.codex/config.toml

[mcp_servers.swiss-caselaw]
url = "https://mcp.opencaselaw.ch/mcp"
enabled = true
Claude Code

.mcp.json

{
  "mcpServers": {
    "swiss-caselaw": {
      "type": "http",
      "url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}
Claude Desktop

Settings → Connectors → Add custom connector

Name: swiss-caselaw
Remote MCP URL: https://mcp.opencaselaw.ch/mcp

Add this remote URL as a custom connector in Claude Desktop. Availability depends on the user plan and workspace policy.

Cursor

.cursor/mcp.json

{
  "mcpServers": {
    "swiss-caselaw": {
      "url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}
Visual Studio Code

.vscode/mcp.json

Add to Visual Studio Code
{
  "servers": {
    "swiss-caselaw": {
      "type": "http",
      "url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}
Generic MCP

Client-specific MCP configuration

{
  "name": "swiss-caselaw",
  "transport": "streamable-http",
  "url": "https://mcp.opencaselaw.ch/mcp"
}
MCP Inspector

Run the official MCP Inspector locally and enter the indexed Streamable HTTP endpoint.

TRUST AND VERIFICATION EVIDENCE

Loading Trust v2 evidence…

Checking the associated registrable domain. The BuiltWith key remains server-side.

Indexed

Evidence is source-attributed and does not guarantee that a third-party server is safe. Risk labels are conservative metadata heuristics.