entscheidsuche-mcp
MCP-Server (beta-Version) für entscheidsuche.ch. Diese Instanz stellt die Suche in Schweizer Gerichtsentscheiden, Gerichtsurteilen und Rechtsprechung über einen MCP-Endpunkt bereit: Bundesgerichte und kantonale Gerichte, Verwaltungsbehörden und auch Strafbefehle.
https://mcp.entscheidsuche.ch/mcp
searchfür Volltextsuche in Schweizer Rechtsprechung, case law und Gerichtsurteilensearch_by_case_numberfür exakte Suche nach Geschäftsnummern, Aktenzeichen, Urteilsnummern und BGE-Zitatenfetch_documentfür den Abruf eines einzelnen Entscheids mit vollständigem Volltextlist_hierarchyfür Hierarchie-IDs und Trefferzahlenlist_facetsfür den lokalisierten Facettenbaumserver_infofür Server- und Versionsinformationen
Ein- und Ausgabeparameter jeder Methode. Alle Parameter mit einem Default sind optional; nur die mit Pflicht gekennzeichneten müssen angegeben werden. Die Beispiele sind echte, gekürzte Antworten dieses Servers.
search Volltextsuche
Volltextsuche über alle Entscheide. query versteht
Lucene-Syntax: "…" für Phrasen, AND/OR/NOT,
Wildcards * und ?. Default-Operator zwischen
Begriffen ist AND; Filter werden mit AND verknüpft.
Eingabe
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
query | string | "*" | Volltext-Anfrage. "*" matcht alles. |
language | "de"|"fr"|"it" | null | Bevorzugte Sprache für Titel/Highlight. Kein Filter — dafür language_filter. |
sort | "relevance"|"date"|"scrapedate" | "relevance" | Sortierung; date = Entscheiddatum. |
size | integer 1–100 | 20 | Treffer pro Seite. |
search_after | array | null | Cursor: next_cursor der vorigen Antwort. |
decision_date_from | date | null | Untergrenze Entscheiddatum (YYYY-MM-DD, inklusive). |
decision_date_to | date | null | Obergrenze Entscheiddatum (YYYY-MM-DD, inklusive). |
scrape_date_from | date | null | Untergrenze Scrape-Datum. |
scrape_date_to | date | null | Obergrenze Scrape-Datum. |
hierarchy | string[] | null | Hierarchie-IDs (Kanton/Gericht/Kammer) aus list_hierarchy. Mehrere werden mit OR verknüpft. |
language_filter | ("de"|"fr"|"it")[] | null | Echter Filter nach Dokumentsprache(n). |
include_aggregations | boolean | false | Aggregationen (Verteilungen) mitliefern. |
Ausgabe
| Feld | Typ | Beschreibung |
|---|---|---|
total | integer | Gesamtzahl der Treffer (nicht nur dieser Seite). |
hits | Treffer[] | Die Treffer dieser Seite — Felder siehe „Treffer-Objekt“ unten. |
next_cursor | array|null | Als search_after im nächsten Request mitgeben. null = keine weiteren Treffer. |
aggregations | object|null | Nur bei include_aggregations: true; je Feld eine Liste von {key, count}. |
Beispiel
// Aufruf
{ "query": "Mietrecht Kündigung", "sort": "date", "size": 3 }
// Antwort (gekürzt)
{
"total": 886,
"hits": [
{
"id": "ZH_BK_004_MJ240016-L_2026-04-22",
"title": "Zürich Bezirksgerichte Mietgericht 22.04.2026 MJ240016-L",
"abstract": "ZMP 2026 Nr. 6: Mietzinserhöhungen …",
"text": "Eine <em>Kündigung</em> kann auf jedes Monatsende …",
"meta": "Zürich Bezirksgerichte Mietgericht",
"canton": "ZH",
"court": "ZH_BK",
"decision_date": "2026-04-22",
"scrape_date": "2026-05-03",
"is_pdf": true,
"document_url": "https://entscheidsuche.ch/docs/ZH_Obergericht/ZH_BK_004_MJ240016-L_2026-04-22.pdf",
"original_url": null,
"sort": [1776816000000, "ZH_BK_004_MJ240016-L_2026-04-22"]
}
],
"next_cursor": [1772668800000, "ZH_BK_004_MJ240004-L_2026-03-05"],
"aggregations": null
}
search_by_case_number Geschäftsnummer / BGE-Zitat
Setzt case_number automatisch in Anführungszeichen und
sucht als exakte Phrase. Ansonsten identisch zu search —
gleiche Filter, gleiche Antwortstruktur.
Eingabe
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
case_number | string | Pflicht | Geschäftsnummer, Aktenzeichen, Urteilsnummer oder BGE-Zitat, z. B. BGE 142 III 1 oder 5A_396/2015. |
language | "de"|"fr"|"it" | null | Bevorzugte Sprache für Titel/Highlight (kein Filter). |
sort | "relevance"|"date"|"scrapedate" | "relevance" | Sortierung. |
size | integer 1–100 | 20 | Treffer pro Seite. |
search_after | array | null | Paginierungs-Cursor. |
decision_date_from / decision_date_to | date | null | Zeitraum Entscheiddatum (YYYY-MM-DD). |
scrape_date_from / scrape_date_to | date | null | Zeitraum Scrape-Datum. |
hierarchy | string[] | null | Hierarchie-IDs für Kanton/Gericht/Kammer. |
language_filter | ("de"|"fr"|"it")[] | null | Filter nach Dokumentsprache(n). |
include_aggregations | boolean | false | Aggregationen mitliefern. |
Ausgabe
Identisch zu search: total, hits,
next_cursor, aggregations.
Beispiel
// Aufruf
{ "case_number": "BGE 142 III 1", "size": 1 }
// Antwort (gekürzt)
{
"total": 171,
"hits": [
{
"id": "CH_BGE_005_BGE-142-III-1_2016",
"title": "Bundesgericht (BGE) Teil III 2016 BGE 142 III 1",
"abstract": "Regeste a … Art. 85 Abs. 1 IPRG; Art. 5 HKsÜ …",
"canton": "CH",
"court": "CH_BGE",
"decision_date": "2016-01-01",
"is_pdf": false,
"document_url": "https://entscheidsuche.ch/docs/CH_BGE/CH_BGE_005_BGE-142-III-1_2016.html",
"sort": [50.027256, "CH_BGE_005_BGE-142-III-1_2016"]
}
],
"next_cursor": [50.027256, "CH_BGE_005_BGE-142-III-1_2016"]
}
fetch_document Einzelentscheid inkl. Volltext
Liefert einen einzelnen Entscheid anhand seiner Dokument-ID — im
Unterschied zur Suche mit dem vollständigen Volltext
in text (nicht nur einem Highlight-Auszug).
Eingabe
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
id | string | Pflicht | Dokument-ID aus einem Suchtreffer, z. B. CH_BGE_005_BGE-142-III-1_2016. |
language | "de"|"fr"|"it" | null | Bevorzugte Sprache für Titel/Abstract. Ohne Angabe das erste vorhandene Sprachfeld. |
Ausgabe
| Feld | Typ | Beschreibung |
|---|---|---|
result | Treffer|null | Das Treffer-Objekt (Felder siehe unten) mit vollständigem text. null, wenn die ID nicht existiert. sort ist hier immer null. |
Beispiel
// Aufruf
{ "id": "CH_BGE_005_BGE-142-III-1_2016" }
// Antwort (gekürzt)
{
"result": {
"id": "CH_BGE_005_BGE-142-III-1_2016",
"title": "Bundesgericht (BGE) Teil III 2016 BGE 142 III 1",
"abstract": "Regeste a … Zuteilung der alleinigen elterlichen Sorge …",
"text": "Urteilskopf\n\n142 III 1\n\n1. Auszug aus dem Urteil der II. zivilrechtlichen Abteilung …",
"meta": "Eidgenossenschaft Bundesgericht (BGE) Teil III",
"canton": "CH",
"court": "CH_BGE",
"decision_date": "2016-01-01",
"scrape_date": "2023-01-01",
"is_pdf": false,
"document_url": "https://entscheidsuche.ch/docs/CH_BGE/CH_BGE_005_BGE-142-III-1_2016.html",
"original_url": null,
"sort": null
}
}
list_hierarchy Hierarchie-IDs mit Trefferzahlen
Liefert die Hierarchie-IDs für Kantone, Gerichte und Kammern mit
Trefferzahlen. Die IDs werden im hierarchy-Filter von
search verwendet. Mit query beziehen sich die
Zahlen auf die Treffer dieser Anfrage.
Eingabe
| Parameter | Typ | Default | Beschreibung |
|---|---|---|---|
query | string | "*" | Optionale Volltext-Anfrage zur Eingrenzung der Aggregation. |
size | integer 1–10000 | 1000 | Maximale Anzahl Einträge. |
Ausgabe
| Feld | Typ | Beschreibung |
|---|---|---|
entries | array | Liste von { id, count }, absteigend nach count. |
entries[].id | string | Hierarchie-ID, z. B. CH_BGer, ZH. |
entries[].count | integer | Anzahl Dokumente unter dieser ID. |
Beispiel
// Aufruf
{ "query": "Mietrecht", "size": 4 }
// Antwort
{
"entries": [
{ "id": "CH", "count": 736 },
{ "id": "CH_BGer", "count": 503 },
{ "id": "ZH", "count": 485 },
{ "id": "CH_BGer_004", "count": 444 }
]
}
list_facets Facettenbaum, lokalisiert
Hierarchischer Facettenbaum mit lokalisierten Bezeichnungen. Anders als
list_hierarchy ohne Trefferzahlen, dafür mit Klartext-Namen
in mehreren Sprachen. Die id-Werte sind im
hierarchy-Filter verwendbar.
Eingabe
Keine Parameter.
Ausgabe
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Hierarchie-ID (im hierarchy-Filter verwendbar). |
label | object | Bezeichnungen je Sprache: de, fr, it, en (einzelne können null sein). |
children | array | Untergeordnete Knoten gleicher Struktur (rekursiv). |
Beispiel
// Aufruf
{}
// Antwort (Auszug — ein Knoten je Listeneintrag)
{
"id": "CH",
"label": {
"de": "Eidgenossenschaft",
"fr": "Conféderation",
"it": "Confederazione",
"en": null
},
"children": []
}
{
"id": "AG",
"label": { "de": "Aargau", "fr": "Argovie", "it": "Argovia", "en": null },
"children": []
}
server_info Version und Endpunkte
Diagnose-Endpunkt: Version des Servers und die konfigurierten Upstream-URLs. Nützlich, um zu prüfen, welche Version tatsächlich läuft.
Eingabe
Keine Parameter.
Ausgabe
| Feld | Typ | Beschreibung |
|---|---|---|
name | string | Servername. |
version | string | Version des laufenden Servers. |
elasticsearch_url | string | Angebundener Suchindex. |
facets_url | string | Quelle des Facettenbaums. |
languages | string[] | Unterstützte Sprachen. |
sort_orders | string[] | Zulässige Werte für sort. |
Beispiel
// Aufruf
{}
// Antwort
{
"name": "entscheidsuche-mcp",
"version": "0.1.1",
"elasticsearch_url": "https://entscheidsuche.pansoft.de:9200/entscheidsuche.v2-*/_search",
"facets_url": "https://entscheidsuche.ch/docs/Facetten.json",
"languages": ["de", "fr", "it"],
"sort_orders": ["relevance", "date", "scrapedate"]
}
Treffer-Objekt gemeinsame Felder
Diese Struktur liefern search und
search_by_case_number in hits[] sowie
fetch_document in result.
| Feld | Typ | Beschreibung |
|---|---|---|
id | string | Dokument-ID — für fetch_document verwendbar. |
title | string | Titel des Entscheids. |
abstract | string | Regeste bzw. Kurzfassung, sofern vorhanden. |
text | string | Bei der Suche ein Highlight-Auszug (Fundstellen in <em>), bei fetch_document der vollständige Volltext. |
meta | string | Klartext-Bezeichnung des Gerichts. |
canton | string | Kantonskürzel, CH für Bundesbehörden. |
court | string | Gerichts-ID (aus der Dokument-ID abgeleitet). |
decision_date | string|null | Entscheiddatum, ISO YYYY-MM-DD. |
scrape_date | string|null | Datum der Erfassung, ISO YYYY-MM-DD. |
is_pdf | boolean | Ob das Originaldokument ein PDF ist. |
document_url | string|null | Direktlink auf das Originaldokument. |
original_url | string|null | URL der ursprünglichen Quell-Webseite. |
sort | array|null | Sortierwerte des Treffers (Basis für search_after). |
- Entscheide mit Schlüsselwörtern suchen.
- Geschäftsnummern wie
BGE 142 III 1oder5A_396/2015direkt nachschlagen. - Instruieren Sie Ihre KI, Referenzen in einem Dokument zu überprüfen.
- Lassen Sie Entscheide von Ihrer KI zusammenfassen.
Der Server arbeitet ohne Authentifizierung. Was Sie brauchen, ist ein Client, der das Model Context Protocol über Streamable HTTP spricht. Was Sie an Subscription brauchen, hängt vom Client ab — die folgenden Abschnitte fassen das pro Client zusammen.
Hinweis: Nicht jede der folgenden Anleitungen ist praktisch durchgespielt; einige beruhen auf den offiziellen Dokumentationen der jeweiligen Anbieter. MCP ist ein junges Protokoll. Tool-Listen, Tarife und Konfigurations-Pfade ändern sich bei Anthropic, OpenAI und anderen regelmässig und manchmal kurzfristig. Bei Abweichungen zur offiziellen Doku des Clients gilt dessen Doku — und gerne eine kurze Rückmeldung an uns, wenn etwas nicht mehr passt.
Claude.ai (Web, Mobile, Desktop) Pro / Max / Team / Enterprise
- claude.ai → Settings → Connectors (in einigen Tarifen Integrations).
- „Add custom connector" wählen.
-
Eintragen:
- Name:
entscheidsuche - Remote MCP server URL:
https://mcp.entscheidsuche.ch/mcp - Authentication: None
- Transport: Streamable HTTP (nicht SSE — SSE ist nur Legacy-Fallback).
- Name:
- Connector pro Chat aktivieren (Tool-Symbol unter dem Eingabefeld).
In Free-Konten sind Custom-Connectors nicht verfügbar. Team- und Enterprise-Workspaces können verlangen, dass der Workspace-Admin den Connector zentral freischaltet. Doku: support.claude.com.
Claude Desktop App gratis · benötigt Node.js
Claude Desktop spricht stdio. Über die Bridge mcp-remote klappt der HTTP-Server trotzdem:
{
"mcpServers": {
"entscheidsuche": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.entscheidsuche.ch/mcp"]
}
}
}
Pfad der Konfigurationsdatei:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Anschliessend Claude Desktop einmal komplett beenden und neu starten.
Claude Code (CLI) API-Credits oder Pro/Max
claude mcp add --transport http entscheidsuche https://mcp.entscheidsuche.ch/mcp
Status prüfen mit claude mcp list, entfernen mit
claude mcp remove entscheidsuche. Doku:
docs.claude.com.
Claude API (eigener Code) Anthropic-API-Konto
import anthropic
client = anthropic.Anthropic()
resp = client.messages.create(
model="claude-sonnet-4-6",
max_tokens=2048,
mcp_servers=[
{
"type": "url",
"url": "https://mcp.entscheidsuche.ch/mcp",
"name": "entscheidsuche",
}
],
messages=[{"role": "user", "content": "Suche BGE 142 III 1."}],
extra_headers={"anthropic-beta": "mcp-client-2025-04-04"},
)
Doku: docs.claude.com.
ChatGPT Pro / Team / Enterprise / Edu
- chatgpt.com → Settings → Connectors → „Create".
- MCP Server URL:
https://mcp.entscheidsuche.ch/mcp, Auth = No authentication. - Falls ein Transport-Feld erscheint: Streamable HTTP wählen (nicht SSE).
- Connector im Chat aktivieren (Tools-Menü) bzw. in einem Deep-Research-Run anhaken.
Hinweis: OpenAIs Deep-Research-Modus sucht nach Tools mit den Namen
search und fetch. Unser Server hat search;
fetch_document wird im normalen Connector-Modus
mitgenutzt, im strikten Deep-Research-Modus eventuell nicht
automatisch erkannt. Doku:
platform.openai.com.
Perplexity Pro / Enterprise · Verfügbarkeit ändert sich
- perplexity.ai → Settings → Connectors (bzw. „Integrations"; im Enterprise-Workspace unter „Workspace settings").
- „Add custom connector" / „Add MCP server" wählen.
-
Eintragen:
- Name:
entscheidsuche - Server URL:
https://mcp.entscheidsuche.ch/mcp - Authentication: None
- Name:
- Connector im Chat über das Tools-/Connectors-Symbol aktivieren.
Custom-MCP-Connectors sind in den kostenpflichtigen Tarifen vorgesehen, typischerweise Perplexity Pro, Enterprise oder Business. Verfügbarkeit und UI-Pfade ändern sich bei Perplexity öfter als bei anderen Anbietern; dieser Eintrag wurde nicht selbst durchgespielt. Doku: perplexity.ai/help-center.
VS Code mit GitHub Copilot Copilot Pro o.ä.
Workspace-lokal in .vscode/mcp.json:
{
"servers": {
"entscheidsuche": {
"type": "http",
"url": "https://mcp.entscheidsuche.ch/mcp"
}
}
}
Im Chat „Agent"-Modus wählen, Werkzeug-Symbol klicken, Tools aktivieren. Doku: code.visualstudio.com.
Cursor gratis möglich
UI: Settings → MCP → Add new MCP server. Oder in ~/.cursor/mcp.json:
{
"mcpServers": {
"entscheidsuche": {
"url": "https://mcp.entscheidsuche.ch/mcp"
}
}
}
Weitere Open-Source-Clients gratis
Cline, Continue.dev, Zed, 5ire, goose, LibreChat, Open WebUI,
LobeChat — jeweils ein Custom MCP server-Eintrag mit der URL
https://mcp.entscheidsuche.ch/mcp. Was bei diesen Tools
kostet, ist nur das jeweils gewählte Sprachmodell.
MCP Inspector (zum Testen) gratis · Node 18+
npx @modelcontextprotocol/inspector
Im Browser-UI: Transport HTTP / Streamable HTTP, URL
https://mcp.entscheidsuche.ch/mcp, Auth leer. Ideal zum
Ausprobieren, ohne irgendein Konto.
Eine ausführlichere Anleitung mit allen Voraussetzungen finden Sie in docs/CLIENTS.md im Repository.
Die eigentliche MCP-Schnittstelle liegt unter /mcp.
Auf dieser Startseite finden Sie nur die kurze Dokumentation und den
Einstieg für MCP-Clients.