Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine

REMOTE · MCP.OPENCASELAW.CH · 2 COMPONENTS · SCANNED SEP 21

1M+ Swiss court decisions, statutes & doctrine with citation graph (DE/FR/IT). CC0, free, 42 tools.

0 this week 83 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security74
Transport & Reachability100
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 14861 tokens (~353/item across 42 items; 42 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 99% of tool parameters carry a description.Partial
  • Structured output schemas are declared (24% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 42 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 43 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine MCP server?

OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine is a hosted endpoint at https://mcp.opencaselaw.ch/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.opencaselaw.ch

# add to Claude Code
claude mcp add --transport http ch-opencaselaw-swiss-caselaw 'https://mcp.opencaselaw.ch/mcp'
// .cursor/mcp.json
{
  "mcpServers": {
    "ch-opencaselaw-swiss-caselaw": {
      "url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "ch-opencaselaw-swiss-caselaw": {
      "type": "http",
      "url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}
# ~/.codex/config.toml
[mcp_servers.ch-opencaselaw-swiss-caselaw]
url = "https://mcp.opencaselaw.ch/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ch-opencaselaw-swiss-caselaw": {
      "type": "remote",
      "url": "https://mcp.opencaselaw.ch/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add ch-opencaselaw-swiss-caselaw --url 'https://mcp.opencaselaw.ch/mcp' --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  ch-opencaselaw-swiss-caselaw:
    url: "https://mcp.opencaselaw.ch/mcp"
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "ch-opencaselaw-swiss-caselaw": {
      "Transport": "http",
      "Url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}
# add to Vellum
assistant mcp add ch-opencaselaw-swiss-caselaw -t streamable-http -u 'https://mcp.opencaselaw.ch/mcp'
// mcp.json
{
  "mcpServers": {
    "ch-opencaselaw-swiss-caselaw": {
      "type": "http",
      "url": "https://mcp.opencaselaw.ch/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 20 Sept 26 0
    • Authorization: unverified → partial security
    • Injection markers: unverified → pass security
    • Stability: unverified → pass security
    • Endpoint reachability: unreachable → reachable functional
    • Tool coverage: unverified → 100 functional
    • MCP protocol: unverified → pass functional
  • 19 Sept 26 0
    • Endpoint reachability: reachable → unreachable security
    • Authorization: partial → unverified security
    • Tool safety: pass → unverified security
    • Stability: pass → unverified security
    • Capabilities: pass → unverified functional
    • Tool coverage: 100 → unverified functional
    • First check of Schema quality: unverified functional
  • 10 Sept 26 0
    • Tool “search_botschaft” rewrote its description, which is the text the model reads security
    • Tool “attest_response” rewrote its description, which is the text the model reads security
    • Tool “find_leading_cases” rewrote its description, which is the text the model reads security
    • Tool “get_commentary” rewrote its description, which is the text the model reads security
    • Tool “get_law” rewrote its description, which is the text the model reads security
    • Tool “get_materialien” rewrote its description, which is the text the model reads security
    • “get_law” reworded the description of “abbreviation” cosmetic
  • 9 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “find_leading_cases” rewrote its description, which is the text the model reads security
    • Tool “get_erwaegung” rewrote its description, which is the text the model reads security
    • Tool “search” rewrote its description, which is the text the model reads security
    • Tool “cite” rewrote its description, which is the text the model reads security
    • Tool “fetch” rewrote its description, which is the text the model reads security
    • Tool “fetch” changed its title: Fetch decision (basic) cosmetic
    • Tool “find_appeal_chain” changed its title: Find appeal chain cosmetic
    • Tool “find_citations” changed its title: Find citations cosmetic
    • Tool “find_leading_cases” changed its title: Find leading cases cosmetic
    • Tool “find_relevant_erwaegung” changed its title: Find relevant Erwägung cosmetic
    • Tool “find_scholarship_citing_decision” changed its title: Scholarship citing decision cosmetic
    • Tool “find_scholarship_citing_statute” changed its title: Scholarship citing statute cosmetic
    • Tool “generate_exam_question” changed its title: Generate exam question cosmetic
    • Tool “get_article_history” changed its title: Article history cosmetic
    • Tool “get_article_purpose” changed its title: Article purpose (ratio legis) cosmetic
    • Tool “get_case_brief” changed its title: Case brief cosmetic
    • Tool “get_commentary” changed its title: Get commentary cosmetic
    • Tool “get_decision” changed its title: Get decision cosmetic
    • Tool “get_decision_structure” changed its title: Decision structure cosmetic
    • Tool “get_decisions” changed its title: Get decisions (batch) cosmetic
    • Tool “get_doctrine” changed its title: Get doctrine cosmetic
    • Tool “get_erwaegung” changed its title: Get Erwägung (verbatim) cosmetic
    • Tool “get_law” changed its title: Get law cosmetic
    • Tool “get_legislation” changed its title: Get legislation cosmetic
    • Tool “get_materialien” changed its title: Get Materialien cosmetic
    • Tool “get_regeste” changed its title: Get Regeste cosmetic
    • Tool “get_scholarship” changed its title: Get scholarship record cosmetic
    • Tool “get_scholarship_full_text” changed its title: Scholarship full text cosmetic
    • Tool “get_statistics” changed its title: Corpus statistics cosmetic
    • Tool “list_courts” changed its title: List courts cosmetic
    • Tool “list_scholarship_sources” changed its title: List scholarship sources cosmetic
    • Tool “search” changed its title: Search decisions (basic) cosmetic
    • Tool “search_botschaft” changed its title: Search Botschaft cosmetic
    • Tool “search_commentaries” changed its title: Search commentaries cosmetic
    • Tool “search_scholarship” changed its title: Search scholarship cosmetic
    • Tool “search_materialien” changed its title: Search Materialien cosmetic
    • Tool “search_legislation” changed its title: Search legislation cosmetic
    • Tool “search_laws” changed its title: Search laws cosmetic
    • Tool “search_decisions” changed its title: Search decisions cosmetic
    • Tool “analyze_legal_trend” changed its title: Analyze legal trend cosmetic
    • Tool “attest_response” changed its title: Attest response cosmetic
    • Tool “browse_legislation_changes” changed its title: Browse legislation changes cosmetic
    • Tool “check_claim_support” changed its title: Check claim support cosmetic
    • Tool “cite” changed its title: Canonical citation cosmetic
    • Tool “draft_mock_decision” changed its title: Draft mock decision cosmetic
  • 8 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “search_practice” rewrote its description, which is the text the model reads security
    • “search_practice” reworded the description of “doc_type” cosmetic
    • “search_practice” reworded the description of “issuing_authority” cosmetic
    • “search_practice” reworded the description of “source” cosmetic
  • 7 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “attest_response” rewrote its description, which is the text the model reads security
    • Tool “get_erwaegung” rewrote its description, which is the text the model reads security
    • Tool “get_law” rewrote its description, which is the text the model reads security
    • “attest_response” reworded the description of “audit_quotes” cosmetic
  • 6 Sept 26 0
    • Tool coverage: 10% → 24% functional
    • Tool “get_erwaegung” now declares an output schema functional
    • Tool “search_decisions” now declares an output schema functional
    • Tool “cite” now declares an output schema functional
    • Tool “find_citations” now declares an output schema functional
    • Tool “get_decision” now declares an output schema functional
    • Tool “get_law” now declares an output schema functional
  • 4 Sept 26 0
    • The server rewrote its instructions, which are the text every model session reads security
    • Tool “attest_response” rewrote its description, which is the text the model reads security
    • Tool “get_law” rewrote its description, which is the text the model reads security
    • Tool “get_practice” rewrote its description, which is the text the model reads security
    • Tool “search_practice” rewrote its description, which is the text the model reads security
    • “attest_response” added an optional parameter “audit_quotes” cosmetic
    • “search_practice” added an optional parameter “include_superseded” cosmetic
    • “get_legislation” reworded the description of “systematic_number” cosmetic
    • “get_law” reworded the description of “as_of” cosmetic
    • “get_legislation” reworded the description of “lexfind_id” cosmetic
    • “search_practice” reworded the description of “doc_type” cosmetic
    • “search_practice” reworded the description of “issuing_authority” cosmetic
    • “search_practice” reworded the description of “source” cosmetic
    • Tool “get_practice” changed its title: Get administrative practice cosmetic
    • Tool “search_practice” changed its title: Search administrative practice cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 21 Sept 2026 · Probed https://mcp.opencaselaw.ch/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_256_GCM_SHA384 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=mcp.opencaselaw.ch CN=YE1,O=Let's Encrypt,C=US 22 Aug 2026 20 Nov 2026 ECDSA 256 ECDSA-SHA384 5ca730c23d08aceb2869cb19b7cbd799c19
SANs: mcp.opencaselaw.ch
CN=YE1,O=Let's Encrypt,C=US (CA) CN=Root YE,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 ECDSA 384 ECDSA-SHA384 5ddd70dd31f801c85c186a7a04b80afe
CN=Root YE,O=ISRG,C=US (CA) CN=ISRG Root X2,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 ECDSA-SHA384 872165fc34b6e5fba8add5b3705fb53a
CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 ECDSA 384 SHA256-RSA 6c8f1dc727c7117f7baf853ac980f9cd

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.opencaselaw.ch. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
ch. present 58745 13 Verified
opencaselaw.ch. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.opencaselaw.ch/mcp Verified 200
http (plaintext) http://mcp.opencaselaw.ch/mcp HTTPS enforced 301 https://mcp.opencaselaw.ch/mcp
MCP tools · 42 exposed · ~11,129 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_legal_trend ~138

Year-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.

NameTypeReqDescription
articlestringArticle number (requires law_code)
courtstringOptional court filter
date_fromstringOptional start date (YYYY-MM-DD)
date_tostringOptional end date (YYYY-MM-DD)
law_codestringOptional law code (e.g., BV, OR, EMRK). Requires article.
querystringOptional text query (FTS search)

No output schema declared.

No examples provided.

attest_response ~496

MANDATORY FINAL-STEP AUDIT of your draft answer. Checks five hallucination classes: (1) every case citation (BGE/BGer/BVGer/BStGer/BPatGer/MKGE, FR/IT forms) exists and any pinpoint (E. X.Y) resolves to a real Erwägung; (2) every 'Art. X LAW' statute reference resolves; (3) quoted passages (60-400 chars) near a citation or statute reference are verbatim in that source (DE/FR/IT; audit_quotes, on by default); (4) decision dates adjacent to citations match the stored dates; (5) with audit_grounding=true, an LLM judge checks that each cited source supports the preceding claim (one call, ~3 s). Returns the annotated draft, an issues list and a `ledger` (denominator per check). It certifies the draft's own citations, quotations and statute references; it does not certify that no relevant authority is missing. CALL THIS BEFORE emitting any answer with a case citation, statute reference or quotation; set audit_grounding=true for 2+ citations. If ok=false, fix each issue; if ok=true, send linked_text verbatim.

NameTypeReqDescription
audit_groundingbooleanWhen true, additionally runs the LLM-judge grounding rail: for each verified case citation in the draft, the preceding claim sentence is checked against the cited Erwägung / Regeste / text by an inde…
audit_quotesbooleanVerifies that every quoted passage (60-400 chars) within ~250 chars of a case citation or an 'Art. X LAW' reference appears verbatim in the cited decision or in that statute article (DE/FR/IT). On by…
draft_textstringyesYour draft response text.

No output schema declared.

No examples provided.

browse_legislation_changes ~129

Browse recent legislation changes for a canton or federal level. Shows new laws, amendments, and abrogations with dates.

NameTypeReqDescription
cantonstringCanton code (CH for federal, ZH, BE, etc.). Default: CH.
languagestringOPTIONAL filter. Restricts results to ONE language version. Omit (recommended default) to fan out across DE/FR/IT and merge results — LexFind's API is single-language per request, so omission trigger…

No output schema declared.

No examples provided.

check_claim_support ~215

Verify whether a Swiss court decision actually supports a legal claim. Uses an independent Sonnet judge to compare the claim against verbatim text from the decision (Erwägung if pinpoint given, else Regeste, else first portion of full text). Returns {supports: yes|partial|no|contradicts|unrelated, confidence, supporting_excerpt, qualifying_excerpt, reasoning}. CALL THIS for any claim where citing the wrong authority would mislead the user — especially when paraphrasing a decision or drawing a proposition from a complex Erwägung. If supports=no or contradicts, do NOT use the cited decision for that claim.

NameTypeReqDescription
claimstringyesThe legal proposition you want to verify (e.g., 'A landlord is liable for fire-police violations under Art. 256 OR.').
decision_idstringyesDecision you intend to cite as authority.
pinpointstringOptional Erwägung number ('2.3'). If given, only that paragraph is judged; more precise verdict.

No output schema declared.

No examples provided.

cite ~327

Get the canonical Swiss citation string for a decision reference. CALL THIS BEFORE writing any case citation in your response. Returns ready-to-embed citation_string (DE/FR/IT variants plus a canonical URL) and a verbatim rule_statement. If the reference doesn't exist, returns exists=false plus close_matches for typo-correction — DO NOT guess or construct citations yourself; if you get exists=false, either re-query with a close match or skip the citation entirely. Accepts any Swiss reference form: decision_id (bger_4A_747_2012), BGE reference (BGE 140 III 86), or docket number (4A_747/2012). Optional pinpoint ('2.3') generates the Erwägung-anchored citation and URL. A pinpoint the decision does not contain returns pinpoint_valid=false plus the UNPINPOINTED citation_string — never re-append the rejected pinpoint to it.

NameTypeReqDescription
languagestringPrimary language for the citation_string field (all three variants always returned). Default: de.
pinpointstringOptional Erwägung/consid. number ('2.3', '5.2.1'). Included in the citation and as a #e-2-3 URL anchor.
referencestringyesAny form of Swiss case reference: decision_id, BGE ref, or docket number. E.g. 'BGE 140 III 86', '4A_747/2012', 'bger_4A_747_2012', 'MKGE 16 Nr. 1'.

Structured output declared, but exposes no named fields.

No examples provided.

draft_mock_decision ~265

Build 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.

NameTypeReqDescription
clarificationsarrayOptional answers to prior clarification questions. Each item: {id, answer}. The tool withholds conclusion until high-priority clarifications are answered.
deciding_courtstringHypothetical deciding court (e.g., bger, bvger).
factsstringyesDetailed facts of the hypothetical or real case.
fedlex_urlsarrayOptional Fedlex URLs used to fetch statute text. Useful when no built-in URL mapping is available.
limitintegerNumber of case-law exemplars (default 8, max 20).
preferred_languagestringOutput/analysis language preference.
questionstringOptional legal question to decide.
statute_referencesarrayOptional explicit statute list. Each item: {law_code, article, paragraph?}.

No output schema declared.

No examples provided.

fetch ~111

Minimal 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`.

NameTypeReqDescription
idstringyesDecision id from a search result (decision_id, docket, or BGE reference).
NameTypeReqDescription
idstring
metadataobject
textstring
titlestring
urlstring

No examples provided.

find_appeal_chain ~118

Trace 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.

NameTypeReqDescription
decision_idstringyesDecision ID (e.g., bger_6B_1_2025)
min_confidencenumberMinimum confidence score (0-1, default 0.3)

No output schema declared.

No examples provided.

find_citations ~198

Given 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.

NameTypeReqDescription
decision_idstringyesDecision ID (e.g., bger_6B_1_2025)
directionstringCitation direction: 'both' (default), 'outgoing', or 'incoming'
limitintegerMax citations per direction per page (default 50, max 200)
min_confidencenumberMinimum confidence score for resolved citations (0-1, default 0.3)
offsetintegerPagination offset per direction (default 0). The response reports *_total and *_has_more; when has_more is true, re-query with offset=next_offset to retrieve the rest (heavily-cited leading decisions…

Structured output declared, but exposes no named fields.

No examples provided.

find_leading_cases ~351

Find the most-cited decisions for a topic or statute. Authority ranking based on citation graph. 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.

NameTypeReqDescription
articlestringOptional article number (requires law_code)
courtstringOptional court filter (e.g., bger, bge, bvger)
date_fromstringOptional start date (YYYY-MM-DD)
date_tostringOptional end date (YYYY-MM-DD)
include_pinpointbooleanAttach a pinpoint Erwägung citation to the top 3 leading cases when a confident match exists. Defaults true.
law_codestringOptional law code (e.g., BV, OR, ZGB, EMRK, StGB)
limitintegerMax results (default 20, max 100)
querystringOptional text query to filter by topic (FTS search)

No output schema declared.

No examples provided.

find_relevant_erwaegung ~196

Find which Erwägung paragraph(s) match a legal claim. Server-side FTS5+BM25 over per-paragraph text; returns top-k with confidence labels (high/medium/low) and a highlighted_snippet wrapping the matched sentence in <mark>…</mark> (quote it verbatim). When no_match=true or confidence=low, do NOT cite any Erwägung — report no_match. Federal decisions only. Replaces the 'always-E.-3.1' guessing pattern.

NameTypeReqDescription
claimstringyesFree-text legal claim or proposition the user wants to verify against the decision. The more specific, the higher the confidence.
decision_idstringyesdecision_id, BGE reference, or docket number. Must be a federal decision (structured Erwägungen).
top_kintegerNumber of top matches to return (default 3, max 10).

No output schema declared.

No examples provided.

find_scholarship_citing_decision ~166

Find OA legal scholarship that cites a specific Swiss court decision. Reverse direction of the scholarship↔caselaw bridge: given a decision_id (e.g. 'bge_BGE_140_III_86' or 'bger_4A_571_2008'), return open-access publications that cite it in their full text. Citations are extracted deterministically by regex + lookup against the canonical decision corpus, so resolved citations are always to decisions we hold.

NameTypeReqDescription
decision_idstringyesCanonical decision_id (e.g. 'bge_BGE_140_III_86', 'bger_4A_571_2008').
limitintegerMaximum results (1-100, default 20).

No output schema declared.

No examples provided.

find_scholarship_citing_statute ~138

Find OA legal scholarship that cites a given Swiss statute article. Sourced from article-anchored commentaries (OnlineKommentar / OpenLegalCommentary) PLUS full-text citation extraction across the open-access journal corpus (~90k statute references resolved from 9k full-text records).

NameTypeReqDescription
articlestringArticle number (e.g. '41'). Omit for all articles of the law.
limitintegerMaximum results (1-100, default 20).
sr_numberstringyesSwiss SR number (e.g. '220' for OR, '210' for ZGB).

No output schema declared.

No examples provided.

generate_exam_question ~180

Generate a Swiss law exam practice question (Fallbearbeitung) based on a real BGE. Returns a fact pattern (Sachverhalt) from a real court decision and a hidden analysis (applicable statutes, leading case, legal test, correct outcome). Workflow: present the fact_pattern and hint to the student, wait for their analysis, then reveal the analysis field and compare. The student can then call get_case_brief(source_decision_id) to study the full case. Pass exclude_ids from previous calls to avoid repeating the same case.

NameTypeReqDescription
exclude_idsarraydecision_ids already used in this session — avoids repetition.
topicstringyesLegal area, statute, or concept. Examples: 'Haftpflichtrecht', 'Art. 41 OR', 'Mietrecht', 'Strafrecht', 'Vertragsrecht'.

No output schema declared.

No examples provided.

get_article_history ~179

Chronological story of a single statute article: current text + every linked Botschaft (enacted + amendments) + leading court interpretations + doctrinal commentary, all ordered by date. Combines statutes.db, materialien.db, reference_graph.db, and ok_commentaries.db into one timeline. USE THIS when the user asks 'how did Art. X evolve' or 'what's the full picture on Art. X' — a single call returns the legislative + judicial + doctrinal arc.

NameTypeReqDescription
articlestringyesArticle number, e.g. '41' for Art. 41 OR.
languagestring
leading_cases_limitintegerMax leading cases (default 5, max 15).
sr_numberstringyesSR number of the federal law, e.g. '220' for OR.

No output schema declared.

No examples provided.

get_article_purpose ~301

Return verbatim text from the Federal Council Botschaft (or Erläuterungsbericht) explaining the legislative purpose of a specific article. Joins the verbatim Botschaft corpus (post-2003 BBl publications, Akoma Ntoso XML where available, PDF fallback otherwise) with the article-Botschaft link table. Returns one entry per source — original Botschaft + any amendment Botschaften. All paragraphs are verbatim text the LLM can quote with `bbl_citation, S. {page}` references. USE THIS when the user asks 'what was the purpose of Art. X' or 'what did Parliament intend' or 'why does Art. X exist'. Coverage is rolling — empty `sources` means the verbatim corpus hasn't ingested that article's Botschaft yet; fall back to get_doctrine for the digest layer.

NameTypeReqDescription
articlestringyesArticle number, e.g. '41' for Art. 41 OR. Letter-suffixed forms like '41a' supported.
languagestringBotschaft language (defaults to German).
max_paragraphsintegerMaximum paragraphs per Botschaft (default 8, max 20).
sr_numberstringyesSR (Systematische Rechtssammlung) number of the law, e.g. '220' for OR (Obligationenrecht), '101' for BV, '311.0' for StGB.

No output schema declared.

No examples provided.

get_case_brief ~139

Structured case brief: regeste, Sachverhalt, key Erwägungen (first 12 only — for orientation, NOT a pinpoint ranking), Dispositiv, statutes, citation authority, related cases. Accepts BGE ref, decision_id, or docket. To pinpoint which Erwägung supports a specific claim, use find_relevant_erwaegung — never guess from key_erwaegungen alone.

NameTypeReqDescription
casestringyesAny case reference: BGE ref ('BGE 133 III 121', '133 III 121'), decision_id ('bge_BGE_133_III_121'), or docket number.

No output schema declared.

No examples provided.

get_commentary ~279

Look up a scholarly legal commentary from OnlineKommentar.ch (CC-BY-4.0) for a Swiss federal law article. Without article: lists available commentaries for that law. With article: returns the full commentary text, authors, and citation. Covers 19 Swiss laws including BV, OR, ZGB, StGB, StPO, ZPO, DSG, SchKG, and more. Where no commentary exists (most provisions: the corpus holds only the open-access OnlineKommentar.ch / OpenLegalCommentary.ch commentaries) the answer is flagged `found: false` / `no_commentary: true` and lists what the corpus holds on the provision instead — `leading_cases`, a `doctrine` excerpt, `scholarship_citing_statute` — none of which is commentary.

NameTypeReqDescription
abbreviationstringLaw abbreviation (e.g., 'OR', 'BV', 'ZGB', 'StGB'). Preferred over sr_number.
articlestringArticle number (e.g., '41', '8'). Omit to list available articles.
languagestringPreferred language (de, en, fr, it). Falls back to de if unavailable.
sr_numberstringSR number of the law (e.g., '220' for OR). Use if abbreviation unknown.

No output schema declared.

No examples provided.

get_decision ~129

Fetch 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.

NameTypeReqDescription
decision_idstringyesDecision ID, docket number, or partial docket
full_textbooleanInclude full text in response (default true). Set false to get only metadata and regeste.

Structured output declared, but exposes no named fields.

No examples provided.

get_decision_structure ~192

Structured decision fields: Sachverhalt (facts), Erwägungen as numbered paragraphs ('1', '1.1', '2.3'), Dispositiv (ruling), Regeste (BGE only). Federal decisions only; for cantonal use get_decision. Returns excerpts; for verbatim full text of one Erwägung, use get_erwaegung. PINPOINT POLICY: never guess. If user gave an e_number → verify with get_erwaegung. If user gave only a claim → use find_relevant_erwaegung (FTS5+BM25 with confidence labels). If neither is confident, report no_match — do NOT default to E. 3.1.

NameTypeReqDescription
decision_idstringyesdecision_id ('bger_5A_42_2026', 'bge_140 III 86'), BGE reference, or docket number.

No output schema declared.

No examples provided.

get_decisions ~255

Use 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.

NameTypeReqDescription
decision_idsarrayyesDecision ids, docket numbers or BGE references (e.g. ['bge_BGE_140_III_86', '6B_1234/2025']).
full_textbooleanInclude an excerpt of each decision's full text (default false — Regeste + metadata only).
max_chars_per_decisionintegerPer-decision text cap when full_text is true (default 20,000; total response stays under connector limits).

No output schema declared.

No examples provided.

get_doctrine ~192

Get statute text + leading cases + doctrinal timeline + Federal Council Botschaft (legislative intent) + scholarly commentary for a Swiss law article or legal concept. ALWAYS USE THIS for questions about the purpose, intent, or ratio legis of a provision — it returns the Botschaft (Materialien) alongside the case law. Input: statute reference ('Art. 41 OR', 'Art. 8 BV') or legal concept. Returns: current statute text, top 5-8 BGEs ranked by citation authority with the rule each establishes, doctrine evolution timeline, Botschaft reference (legislative intent from the Federal Council's message), and scholarly commentary excerpt from OnlineKommentar.ch when available.

NameTypeReqDescription
querystringyesStatute article ('Art. 41 OR', 'Art. 8 BV') or legal concept ('Tierhalterhaftung', 'culpa in contrahendo'). German preferred.

No output schema declared.

No examples provided.

get_erwaegung ~167

Verbatim text of ONE numbered Erwägung — the citable unit in Swiss practice (e.g. 'BGE 136 III 513 E. 2.3'). Use when the user already gave an e_number. If only a claim was given (no e_number): use find_relevant_erwaegung — never guess. Returns text + sibling Erwägung numbers. e_number: '1', '4.1', '5.2.1', …

NameTypeReqDescription
decision_idstringyesdecision_id, BGE reference, or docket number.
e_numberstringyesErwägung number to retrieve (e.g. '2', '2.3', '5.2.1'). Leading 'E.' is stripped if present.

Structured output declared, but exposes no named fields.

No examples provided.

get_law ~843

AUTHORITATIVE LOOKUP for the text of any Swiss law article — federal OR cantonal — from two local mirrors. Federal (canton='CH', default): Fedlex mirror, all federal acts (OR, ZGB, StGB, ZPO, StPO, BV, SchKG, BGG, DBG, AIG, BVG, KVG …) in DE/FR/IT; names match in any language, case, dots or spaces (Cst, OPP2), treaties by common name (IPBPR, KRK, CISG) and former names (OG → BGG, noted; as_of gives the old edition). Cantonal: LexFind mirror, every act of all 26 cantons in the canton's language; name it 'ZH/StG' or pass canton. Use this BEFORE relying on training-data recall — statute text changes often and LLMs hallucinate article content. With as_of: the dated Fedlex edition in force on that date (snapshot_date, in-force window, link); always tell the user the edition date. PDF-only editions carry `text_status` 'heading_only' / 'empty' = no article text recovered; say so and give the Fedlex link. Examples: get_law(abbreviation='BV', article='8'); get_law(canton='ZH', sr_number='554.5', article='1').

NameTypeReqDescription
abbreviationstringLaw abbreviation in DE, FR or IT ('BV'/'Cst'/'Cost', 'OR'/'CO', 'ZGB'/'CC', 'StGB'/'CP', 'BGG'/'LTF', 'OPP 2'), a treaty's common name ('EMRK', 'IPBPR', 'KRK', 'LugÜ', 'CISG') or a former name ('OG',…
articlestringArticle number to retrieve (e.g., '8', '41a', '1bis'). For cantonal § laws (ZH, SH, AI, AR, BS, BL, AG), pass the § number without the § sign. If omitted, returns the full article list.
as_ofstringPast date, ISO 'YYYY-MM-DD' (or Swiss 'DD.MM.YYYY'), to retrieve the HISTORICAL edition of a federal law in force on that date. The response names the edition (snapshot_date), the act's title and in-…
cantonstringTwo-letter canton code (ZH, BE, LU, …) or 'CH' for federal. Default 'CH' preserves backward compat.
languagestringLanguage for article text: de, fr, it. For cantonal laws, must match the canton's publication language (fr for FR/GE/JU/NE/VD, it for TI, de otherwise).
sr_numberstringStatute number. Federal: SR number ('210'=ZGB, '220'=OR, '101'=BV). Cantonal: the canton's systematic number — e.g. ZH 'LS' number '554.5' (Hundegesetz), '550.1' (Polizeigesetz). The `systematic_numb…
systematic_numberstringAlias for sr_number — the cantonal-friendly name (LS / systematic number), matching get_legislation. Either field works.

Structured output declared, but exposes no named fields.

No examples provided.

get_legislation ~272

Retrieve the FULL TEXT and article list of a specific Swiss law, federal or cantonal, by LexFind ID or SR/systematic number. For federal laws in the Fedlex mirror this is instant (local SQLite). For cantonal laws, the law is downloaded from LexFind as PDF, parsed with PyMuPDF, and segmented into articles (cached 30 days). Returns: title, entity, articles (article_num, heading, text), full_text, article_count. Use search_legislation first to find the right lexfind_id or systematic_number; then pass it here. For the core federal codes, get_law is still the fastest path.

NameTypeReqDescription
cantonstringCanton for systematic number lookup (default CH). Required for cantonal laws.
include_versionsbooleanInclude full version history (default false).
languagestringResult language: de, fr, it.
lexfind_idintegerLexFind ID of the law (from search_legislation results). Positive integer; omit it when unknown rather than passing 0.
systematic_numberstringSR/systematic number (e.g., '220' for OR, '210' for ZGB). Used when lexfind_id not available. One of lexfind_id or systematic_number is required.

No output schema declared.

No examples provided.

get_materialien ~262

Look up Materialien for a Swiss federal law article. Returns up to three things: `sources` = per-article digests of legislative intent (BV and BGFA only — 167 articles); `botschaft_documents` = the Federal Council messages that concern this article, with BBl citation, title and Fedlex link (620 SR numbers, 19,809 article links); `amendment_refs` = the AS/BBl publication locators from the statute's own footnotes. Empty `sources` means no digest exists for that law, NOT that the law has no legislative history — read `botschaft_documents` and cite the BBl reference. For full text of a message use search_botschaft. A provision with nothing keyed to it is flagged `found: false` / `no_materialien: true` and lists `leading_cases`, a `doctrine` excerpt and `scholarship_citing_statute` instead — none of it is legislative history.

NameTypeReqDescription
articlestringArticle number (e.g., '1', '8', '10a'). Omit to get all articles.
law_codestringyesLaw abbreviation (e.g., 'BV', 'BGFA', 'OR', 'StGB').

No output schema declared.

No examples provided.

get_practice ~114

Retrieve a single federal administrative-practice document by its doc_id (e.g. 'estv_ks_ks_nr_28', 'sem_weisungen_weisungen-aug-d', 'bsv_weisungen_6930_v20_de', 'seco_alv_avig_ale_de'). Returns full body text, title, date, issuing authority, and PDF URL. Use search_practice first to discover the doc_id.

NameTypeReqDescription
doc_idstringyesDocument identifier returned by search_practice.

No output schema declared.

No examples provided.

get_regeste ~139

Get the official Regeste (head-note) of a Swiss court decision. The Regeste is the court's own formulation of the legal rule established — for BGEs especially, this is the canonical citation target. Often references specific Erwägungen via '(E. 5.2.1)' which can then be retrieved verbatim with get_erwaegung. USE THIS when the user asks 'what does this case stand for' or 'what is the rule from this decision'. Available for ~54% of federal decisions (100% of BGE).

NameTypeReqDescription
decision_idstringyesdecision_id, BGE reference, or docket number.

No output schema declared.

No examples provided.

get_scholarship ~84

Fetch a single OA legal publication (article, dissertation, commentary, etc.) by its pub_id. Returns full metadata + abstract + full text if available + cross-citations to statutes and decisions.

NameTypeReqDescription
pub_idstringyesCanonical pub_id, e.g. 'sui_generis:article-1382' or 'onlinekommentar:<uuid>'.

No output schema declared.

No examples provided.

get_scholarship_full_text ~140

Fetch the full text of an OA legal publication by pub_id, on demand. Cached after first fetch so subsequent calls are instant. License-gated: only records under CC-BY-* (except CC-BY-ND), OA-Swiss-federal, or OA-author-permitted-reuse are extracted. ND/all-rights-reserved records return the upstream URL only. Use this when search_scholarship or get_scholarship returns only abstract/title and you need the article body to verify a claim or quote a passage.

NameTypeReqDescription
pub_idstringyesCanonical pub_id (from search_scholarship results).

No output schema declared.

No examples provided.

get_statistics ~58

Get aggregate statistics about the dataset. Optionally filter by court, canton, or year.

NameTypeReqDescription
cantonstringFilter by canton code
courtstringFilter by court code
yearintegerFilter by year

No output schema declared.

No examples provided.

list_courts ~34

List all available courts with decision counts, date ranges, and language coverage. Use this to discover what data is available.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

list_scholarship_sources ~45

List the open-access legal scholarship sources currently indexed, with publication counts by source, type, and language. Use this to discover what corpora are available before searching.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

search ~119

Minimal 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.

NameTypeReqDescription
limitintegerMax results (default 10, max 50).
querystringyesNatural-language or keyword query.
NameTypeReqDescription
resultsarray

No examples provided.

search_botschaft ~342

Use this tool to retrieve and quote the VERBATIM text of Federal Council Botschaften (legislative messages). Where get_article_purpose answers 'why does Art. X exist?', this tool answers 'show me every Botschaft passage about TOPIC X'. Useful when the caller doesn't know which SR/article to ask for — e.g. starting from a concept like 'Vaterschaftsurlaub' or 'Klimaschutz'. Returns ranked passages (FTS5 BM25) with bbl_citation, page, section path, and an article anchor where the parser could identify one. Quote verbatim; every snippet has a stable Fedlex ELI URI. When no paragraph carries every term, the page is relaxed to ranked OR and flagged `filters_relaxed: true` with a `note`.

NameTypeReqDescription
languagestringOPTIONAL — only set when the user explicitly limits the search to one language. Leave unset to search the corpus the caller has (currently de only). Setting this without the user asking will hide all…
limitintegerMax passages to return (default 20, max 50).
querystringyesSearch terms. FTS5 syntax supported — use quoted phrases for exact matches ('"Vaterschaftsurlaub"'), Boolean operators ('Klimaschutz AND Kanton'), and prefix queries ('Versicherungs*'). Stopwords are…
year_maxintegerLatest publication year of the source Botschaft (inclusive).
year_minintegerEarliest publication year of the source Botschaft (inclusive) — scope legislative history to an era.

No output schema declared.

No examples provided.

search_commentaries ~198

Use this tool ONLY for article-anchored commentary from OnlineKommentar.ch — doctrinal discussion tied to a specific statute article. For the full OA scholarship corpus (which includes OnlineKommentar) use search_scholarship. Searches commentary text, titles, and article numbers. Returns ranked results with snippets, authors, and links. Useful for finding doctrinal discussion of a legal concept across multiple laws.

NameTypeReqDescription
abbreviationstringFilter by law abbreviation (e.g., 'OR', 'StGB').
languagestringOPTIONAL filter (de/fr/it/en). Omit (recommended default) to search across all languages. Set ONLY when the user explicitly asks for one-language results; do NOT auto-apply based on conversation lang…
limitintegerMaximum results (1-50, default 10).
querystringyesSearch query (supports FTS5 syntax: quotes for phrases, OR for alternatives).

No output schema declared.

No examples provided.

search_decisions ~920

Use 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. Not for statutes (search_laws), commentary (search_scholarship), or administrative guidance (search_practice).

NameTypeReqDescription
cantonstringFilter by canton (CH for federal, ZH, BE, GE, etc.)
chamberstringFilter by chamber/division (substring match). Examples: 'Abteilung V' (BVGer asylum), 'Zivilrechtliche', 'CASSO', 'Strafrechtliche'
courtstringFilter by court code. Federal: bger, bge, bvger, bstger, bpatger, mkg. European Court of Human Rights: bge_egmr (BGE-published DE translations, Swiss cases), hudoc_ch (HUDOC Switzerland-tagged), ecth…
date_fromstringStart date (YYYY-MM-DD)
date_tostringEnd date (YYYY-MM-DD)
fieldsstringResponse detail level: 'full' (default) includes snippet/regeste/URL, 'compact' returns only docket, date, court, language, decision_id.
include_pinpointbooleanAttach a pinpoint Erwägung citation to the top results when a confident match exists (BM25 over the per-decision Erwägungen FTS5 index, gap-confidence ≥ medium). Defaults true; set false to skip the…
languagestringOPTIONAL filter. Restricts results to ONE language. Omit (recommended default) to search across all languages — Swiss federal decisions are issued in DE, FR, or IT depending on the case, so a languag…
limitintegerMax results to return (max 2000). Omit to use default of 50. Do not set low values like 5 or 10 unless the user explicitly asked for fewer results.
marked_for_publicationbooleanIf true, return only Federal Supreme Court rulings flagged for the official BGE collection (the Neuheiten '*' marker, 'für die Publikation vorgesehen') — future leading cases, flagged before the BGE…
offsetintegerSkip this many results (for pagination). Default 0.
querystringSearch query. Best results: 3-8 precise terms, one search per legal issue — never paste document text. Max 4,000 chars; input over 500 chars is auto-condensed to its citations + key terms. Examples:…
sortstringSort order: 'relevance' (default for FTS), 'date_desc', 'date_asc'.

Structured output declared, but exposes no named fields.

No examples provided.

search_laws ~491

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. Not for whole laws by name (search_legislation) or court decisions (search_decisions). BM25-ranked per corpus, merged by interleaving so each response surfaces both jurisdictions. Returns ranked snippets with article number, heading, law title, canton, and level ('federal' | 'cantonal'). Use this as the DEFAULT entry point when the user asks about any Swiss legal topic and you don't know which law or which jurisdiction applies. Filter with canton='ZH' (etc.) for cantonal-only, or jurisdiction='federal'/'cantonal' for explicit scoping. Examples: search_laws(query='Verjährung') — find statute-of-limitations provisions in federal + cantonal laws; search_laws(query='Hundehaltung', canton='ZH') — ZH dog-keeping rules; search_laws(query='Mietrecht', jurisdiction='federal') — federal-only tenancy law.

NameTypeReqDescription
cantonstringTwo-letter canton code (ZH, BE, …) to restrict to one canton's statute corpus. 'CH' → federal only. Omit to search every jurisdiction.
jurisdictionstringExplicit scope override: 'all' (default), 'federal', or 'cantonal'. Most callers should omit this and let sr_number/canton drive the scope.
languagestringOPTIONAL filter. Restricts results to ONE language. Omit (recommended default) to search across all three official languages — most laws exist in DE/FR/IT and a filter silently hides valid hits in th…
limitintegerMaximum merged results (1-50).
querystringyesSearch query. Explicit syntax is supported and operators must be UPPERCASE: 'Miete OR Pacht', 'Kündigung AND Frist' (AND with an absent term returns 0), '"exakte Wortfolge"' for phrases, 'Verfahr*' f…
sr_numberstringRestrict search to a specific federal law by SR number. Implies jurisdiction='federal'.
NameTypeReqDescription
cantonal_hitsinteger
federal_hitsinteger
hitsarray
querystring
totalinteger

No examples provided.

search_legislation ~583

Use this tool to find WHOLE LAWS by name or subject — 33,000+ federal and cantonal enactments from LexFind.ch; the entry point for cantonal questions ('Hundegesetz Bern', 'loi sur l'énergie Vaud'). Not for article-level topic search (search_laws) or the core federal codes (get_law is instant there). All 26 cantons + federal, DE/FR/IT. Also the entry point for municipal regulations and federal ordinances outside the core Fedlex mirror. SINGLE-CALL MODE: set fetch_top_n_texts=1..3 and the top results are returned with the parsed full text + article list of the law itself — no follow-up get_legislation call needed. Ideal for 'what does cantonal law X say about Y' questions. For core federal codes (OR, ZGB, StGB, BV, StPO, ZPO, SchKG, BGG, DBG, IPRG, AIG, BVG, KVG etc.), prefer get_law / search_laws — they are instant and cover all three languages.

NameTypeReqDescription
active_onlybooleanOnly show laws currently in force (default true).
cantonstringTwo-letter canton code (ZH, BE, LU, UR, SZ, OW, NW, GL, ZG, FR, SO, BS, BL, SH, AR, AI, SG, GR, AG, TG, TI, VD, VS, NE, GE, JU) or 'CH' for federal. Omit to search all 26 cantons + federal at once.
fetch_top_n_textsintegerIf > 0, download + parse the full text of the top N results (max 10) and return each with full_text_preview, article_count, and sample_articles. Use 1-3 for natural-language questions so you can answ…
languagestringOPTIONAL filter. Restricts results to ONE language version. Omit (recommended default) to fan out across DE/FR/IT and merge results — LexFind's API is single-language per request, so omission trigger…
limitintegerMax results (1-60, default 20).
querystringyesSearch query in natural language or keywords. Examples: 'Hundegesetz', 'loi sur l'énergie', 'Mietrecht Kanton Zürich', 'Baugesetz'.
search_in_contentbooleanAlso search inside the law text, not just titles and keywords (slower).
NameTypeReqDescription
hitsarray
querystring
totalinteger

No examples provided.

search_materialien ~170

Use this tool for DIGESTED legislative history — per-article intent summaries and key arguments, not verbatim text. COVERAGE IS NARROW: BV and BGFA digests (167 articles) plus BV debate transcripts, and nothing else. For any other law this returns 0 hits, which means 'outside this index', not 'no materials exist'. Prefer search_botschaft, which covers all 6,154 Federal Council messages verbatim, or get_materialien(law_code) for the messages linked to one statute.

NameTypeReqDescription
law_codestringFilter by law abbreviation (e.g., 'BGFA').
limitintegerMaximum results (1-50, default 10).
querystringyesSearch query (natural language or FTS5 syntax).

No output schema declared.

No examples provided.

search_practice ~1,030

Use this tool when the question involves federal ADMINISTRATIVE PRACTICE (Verwaltungspraxis): Wegleitungen, Kreisschreiben, Weisungen, Rundschreiben — agency guidance, not court decisions. 9,900+ documents. Covered: BSV (AHV/IV/EL/EO/FamZ/BVG Wegleitungen, Kreisschreiben, Mitteilungen, every version), OAK BV (BVG Weisungen, Mitteilungen, drafts), WEKO (Bekanntmachungen, Erläuterungen, all versions), SECO (ArG commentary, AVIG-Praxis), BAG (KVG Kreisschreiben), SEM (Weisungen AIG/Asyl/BüG, Handbuch Asyl), BJ (SchKG Weisungen, Existenzminimum), FINMA, ESTV, BAFU; counts in the filter enums. Returns ranked excerpts with authority, number, date, PDF link. Superseded versions collapse to the newest per document; for past conduct pass include_superseded=true and take the version dated before the facts. NOT covered: cantonal administrations — Sozialhilfe (SKOS, cantonal Handbücher), Prämienverbilligung (IPV) — say so, do not imply absence of guidance. Pre-2017 federal decisions: search_decisions(court='ch_vb').

NameTypeReqDescription
doc_typestringFilter by document type. wegleitung (SECO ArG 1,102 + BSV WEL/RWL…), rundschreiben (FINMA 1,017 + BSV/SEM), vollzugshilfe (297), kreisschreiben (ESTV 285 + BSV/BAG/BJ), rundschreiben_anhang (132 — FI…
include_supersededbooleanReturn every retained version of a document (FINMA, BSV) instead of collapsing to the newest. Set for point-in-time questions.
issuing_authoritystringFilter by authority. FINMA (1,133), SECO (Arbeitsgesetz 1,102 + AVIG-Praxis), ESTV (438), BAFU (297), SEM (Weisungen 92 + Handbuch), BSV (6,083, social insurance practice), BAG (38), BJ (debt enforce…
languagestringOPTIONAL filter (de/fr/it). Omit (recommended default) to search across all languages. Set ONLY when the user explicitly asks for one-language results.
limitintegerMaximum results (1-50, default 10).
querystringyesSearch query (FTS5 syntax: quotes for phrases, OR for alternatives, NEAR(term1 term2, N) for proximity).
sourcestringFilter by source key. finma_rs (1,133), seco_arg (1,102), bafu_vollzug (297), estv_ks (285), estv_mwst (153), sem_weisungen (92), bsv_weisungen (BSV Wegleitungen/Kreisschreiben/Rundschreiben/Mitteilu…

No output schema declared.

No examples provided.

search_scholarship ~424

Use this tool for open-access SCHOLARSHIP (Lehre): OA journal articles (sui generis et al.), OA legal commentaries (OnlineKommentar, OpenLegalCommentary — this tool SUBSUMES search_commentaries), dissertations and theses from Swiss university repositories, and federal legal-policy reports. Returns ranked results with snippets, authors, DOI, and direct links. Filters by source, publication type, language, and year range. Sort by relevance or year; an author filter may be used on its own (no query) for a bibliographic browse, e.g. all works by a given author, newest first.

NameTypeReqDescription
authorstringFilter by author (substring match on the authors field). May be used WITHOUT a query for a pure bibliographic browse (all works by an author).
languagestringOPTIONAL filter by language (de/fr/it/en). Omit to search across all languages (recommended — the corpus is trilingual).
limitintegerMaximum results (1-50, default 10).
pub_typestringFilter by type: 'article', 'commentary', 'dissertation', 'book', 'chapter', 'master_thesis', 'working_paper', 'report'.
querystringTopic query (FTS5 syntax: quotes for phrases, OR for alternatives). Optional — may be omitted when an `author` (or other) filter is given, which returns a bibliographic browse instead of a topical se…
sortstringOrder: 'relevance' (BM25, default for a topic query), 'year' (newest first), 'year_asc' (oldest first). With no query the default is newest-first.
sourcestringFilter by source slug (e.g. 'sui_generis', 'onlinekommentar', 'openlegalcommentary', 'zora_law').
year_maxintegerLatest publication year.
year_minintegerEarliest publication year.

No output schema declared.

No examples provided.

Common questions

What is the OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine MCP server?

OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine is an MCP server listed in the public MCP registry as ch.opencaselaw/swiss-caselaw. 1M+ Swiss court decisions, statutes & doctrine with citation graph (DE/FR/IT). CC0, free, 42 tools. This page covers its hosted endpoint (https://mcp.opencaselaw.ch/mcp).

Is the OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine MCP server safe to use?

OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine scores 83 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine MCP server expose?

OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine exposes 42 tools: search, fetch, search_decisions, get_decision, get_decisions, and 37 more. Their descriptions and schemas cost roughly 11,129 tokens of context every time the server is loaded.

Does the OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine MCP server require authentication?

No. We connected to OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine MCP server still maintained?

OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.