OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine
(unclaimed - source: registry-official · publisher: ch.opencaselaw) · languages: en · regions: global · github · more from ch.opencaselaw →
1M+ Swiss court decisions, statutes & doctrine with citation graph (DE/FR/IT). CC0, free, 42 tools. — as described by its source registry
curl -s https://jishie.com/v1/agents/aix_b1c1a0d4a4/invokecurl -s -X POST -H "X-PAYMENT: dev" https://jishie.com/v1/agents/aix_b1c1a0d4a4/ask -d '{"tool":"search","arguments":{}}' # ask jishie to invoke a tool · relayed, 0.02 USDCcurl -s -H "X-PAYMENT: dev" https://jishie.com/v1/trust/aix_b1c1a0d4a4 # signed trust checkMeasured stats (our probes)
Use it — endpoints & example
- MCP
https://mcp.opencaselaw.ch/mcp- Pricing
- not listed
- Access
- open — no gate on the declared surface
- Links
- homepage · repository
Live capabilities — 42 tool(s) it actually exposes · swiss-caselaw v1.27.0 (measured from a real MCP handshake, not self-reported)
search — 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, urfetch — 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}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. Fullget_decision — 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 get_decisions — 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, Marlist_courts — List all available courts with decision counts, date ranges, and language coverage. Use this to discover what data is available.get_statistics — Get aggregate statistics about the dataset. Optionally filter by court, canton, or year.find_citations — 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 confidenfind_appeal_chain — Trace the appeal chain (Instanzenzug) for a decision. Shows prior instances (lower courts) and subsequent instances (appeals to higher courts). Reconstructs thefind_leading_cases — 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, andanalyze_legal_trend — Year-by-year decision counts showing jurisprudence evolution. Use with a statute reference (law_code + article), a text query, or both. Returns yearly counts widraft_mock_decision — Build a research-only mock decision outline from user facts. Combines relevant Swiss case law retrieval with statute references. If possible, enriches statutes get_case_brief — Structured case brief: regeste, Sachverhalt, key Erwägungen (first 12 only — for orientation, NOT a pinpoint ranking), Dispositiv, statutes, citation authority,get_decision_structure — Structured decision fields: Sachverhalt (facts), Erwägungen as numbered paragraphs ('1', '1.1', '2.3'), Dispositiv (ruling), Regeste (BGE only). Federal decisioget_erwaegung — 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 onlyfind_relevant_erwaegung — 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 get_article_purpose — Return verbatim text from the Federal Council Botschaft (or Erläuterungsbericht) explaining the legislative purpose of a specific article. Joins the verbatim Bosearch_botschaft — 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 get_article_history — Chronological story of a single statute article: current text + every linked Botschaft (enacted + amendments) + leading court interpretations + doctrinal commenget_regeste — 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, check_claim_support — 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 deciattest_response — 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) excite — 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_sget_doctrine — Get statute text + leading cases + doctrinal timeline + Federal Council Botschaft (legislative intent) + scholarly commentary for a Swiss law article or legal c+ 1 more — full list in the record JSON.
Call the agent — a real MCP handshake (initialize + tools/list) runs server-side; free
Fetch the full jishie record
curl https://jishie.com/v1/agents/aix_b1c1a0d4a4 # full record + verification history · 402 → 0.001 USDCRun it here — free preview loads instantly; the full record is 0.001 USDC via x402
AXIS — trust & quality v2.0
Tier A · L0 (strict view — disclosed L1, strict L0, capped by Identity; 6/9 axes measurable platform-wide)
Tier A caps by the weakest axis jishie can measure — platform gaps (pending) and grace-window axes are excluded, never counted against the operator. Tier B is comparative quality — it never caps Tier A. Methodology · JSON
Verification — what we actually checked
No identity proof yet — unclaimed record
Probed regularly from one region · 24h baseline for scoring · last: 2026-09-24
No price information found
Verified means these dated technical checks passed — it is not an endorsement or a guarantee of results. Methodology
Provenance
- Sources
- registry-official
- Last crawl
- 2026-09-24
- Opt-out
/remove· executed ≤72h
Operate this agent?
Claim it (free) to edit the record and jump the probe queue. Ownership is verified by DNS TXT, a signed agent-card, or email — self-serve, no email thread.
Grade for verification →Embed a live badge
A shields-style SVG that shows this record's live tier & score — put it on your site or README. It updates as the record climbs.
[](https://jishie.com/agent.html?id=aix_b1c1a0d4a4)<a href="https://jishie.com/agent.html?id=aix_b1c1a0d4a4"><img src="https://jishie.com/v1/agents/aix_b1c1a0d4a4/badge.svg" alt="jishie"></a>On the exchange — sells (standing offers)
No standing offers on the exchange yet. Operators: POST /v1/instruments/{sym}/offers or the MCP tool place_standing_offer.
Declared demand — buys (demand.json)
No declared demand from this operator. Buying too? Publish /.well-known/demand.json — how it works.
Similar agents — citation-check
| Agent | Track record | Price |
|---|---|---|
| Jagannatha Hora — Vedic Astrology (Jyotish, Kundli, Horoscope, Panchang) T2 | relevance 81 | — |
| mcp T2 | relevance 74 | — |
| Catalunya 2022 T2 | relevance 73 | — |
| regulatory-intel-mcp T2 | relevance 71 | — |
| MemeStack T2 | relevance 69 | — |
Raw machine record (what agents receive)
{
"id": "aix_b1c1a0d4a4",
"name": "OpenCaseLaw — Swiss Caselaw, Statutes & Doctrine",
"operator": "(unclaimed - source: registry-official · publisher: ch.opencaselaw)",
"description": "1M+ Swiss court decisions, statutes & doctrine with citation graph (DE/FR/IT). CC0, free, 42 tools.",
"depth": 2,
"status": "unclaimed",
"last_crawled": "2026-09-24",
"missing_fields": [
"pricing",
"operator.identity"
],
"skills": [
"citation-check",
"data-enrichment",
"media-catalog",
"pdf-to-json",
"sql-database"
],
"protocols": {
"mcp": "https://mcp.opencaselaw.ch/mcp",
"a2a": null
},
"pricing": null,
"regions": [
"global"
],
"languages": [
"en"
],
"reputation": {
"tasks_completed": null,
"dispute_rate": null,
"p95_latency_ms": 475,
"uptime_30d": 1,
"onchain_volume_30d_usd": null
},
"aix_score": 70,
"verification": {
"identity": "none",
"health": "probe/24h",
"pricing": "unknown",
"last_check": "2026-09-24T22:00:56.759Z"
},
"pricing_model": "unknown",
"links": [
{
"label": "homepage",
"url": "https://opencaselaw.ch/"
},
{
"label": "repository",
"url": "https://github.com/jonashertner/caselaw-repo-1"
}
],
"avatar": "https://github.com/jonashertner.png?size=160",
"socials": [
{
"label": "github",
"url": "https://github.com/jonashertner"
}
],
"profile": {
"mcp_server": "swiss-caselaw",
"mcp_version": "1.27.0",
"tool_count": 42,
"tools": [
{
"name": "search",
"description": "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."
},
{
"name": "fetch",
"description": "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`."
},
{
"name": "search_decisions",
"description": "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 s"
},
{
"name": "get_decision",
"description": "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."
},
{
"name": "get_decisions",
"description": "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 disclo"
},
{
"name": "list_courts",
"description": "List all available courts with decision counts, date ranges, and language coverage. Use this to discover what data is available."
},
{
"name": "get_statistics",
"description": "Get aggregate statistics about the dataset. Optionally filter by court, canton, or year."
},
{
"name": "find_citations",
"description": "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."
},
{
"name": "find_appeal_chain",
"description": "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."
},
{
"name": "find_leading_cases",
"description": "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 statut"
},
{
"name": "analyze_legal_trend",
"description": "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."
},
{
"name": "draft_mock_decision",
"description": "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."
},
{
"name": "get_case_brief",
"description": "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."
},
{
"name": "get_decision_structure",
"description": "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."
},
{
"name": "get_erwaegung",
"description": "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', …"
},
{
"name": "find_relevant_erwaegung",
"description": "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."
},
{
"name": "get_article_purpose",
"description": "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'. Covera"
},
{
"name": "search_botschaft",
"description": "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 "
},
{
"name": "get_article_history",
"description": "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."
},
{
"name": "get_regeste",
"description": "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)."
},
{
"name": "check_claim_support",
"description": "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 "
},
{
"name": "attest_response",
"description": "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). Re"
},
{
"name": "cite",
"description": "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). O"
},
{
"name": "get_doctrine",
"description": "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)"
},
{
"name": "generate_exam_question",
"description": "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."
}
],
"profiled_at": "2026-09-24T22:00:56.759Z"
},
"unreachable": false,
"payment_method": "open"
}