Skip to main content
Glama
canvena

Open Legal Data MCP Server

by canvena
README.md
# Open Legal Data — Remote MCP Connector

Ein **remote MCP-Server**, der die freie REST-API von [Open Legal Data](https://de.openlegaldata.io)
(deutsche Gerichtsentscheidungen + Gesetze, inkl. Zitationsgraph) als MCP-Tools bereitstellt.
Er lässt sich in Claude/Cowork über **„Add custom connector"** einbinden (Feld *Remote MCP server URL*).

Transport: **Streamable HTTP**. Endpoint-Pfad: **`/mcp`** → die einzutragende URL ist
`https://DEIN-HOST/mcp`.

## Tools

| Tool | Zweck |
|---|---|
| `search_cases` | Volltextsuche in Gerichtsentscheidungen (Snippets, Filter Gericht/Typ/Datum) |
| `get_case` | Einzelne Entscheidung per ID (optional Volltext) |
| `search_laws` | Volltextsuche in Gesetzesnormen (liefert `law_id`) |
| `citing_cases` | Urteile, die eine Entscheidung zitieren (Nachernte) |
| `case_references` | Von einer Entscheidung zitierte Normen/Urteile |
| `law_citing_cases` | Urteile zu einer Norm — „welche Rechtsprechung gibt es zu § X?" |

Alle sechs Endpunkte wurden am 17.07.2026 gegen die Live-API verifiziert.

## Wichtige Hinweise

- **Kein Login/API-Key nötig.** Die OLDP-Lese-API ist offen. Deine OLDP-Zugangsdaten werden
  **nicht** verwendet. (Falls du sie irgendwo geteilt hast: bei OLDP das Passwort ändern.)
- **Der Server muss dort laufen, wo er `de.openlegaldata.io` erreichen kann** (normaler Internet-Host).
- **OLDP ist unvollständig** — Treffer sind Arbeitsgrundlage, kein Vollständigkeits-/Aktualitäts-
  nachweis. Jede Fundstelle vor Verwendung am amtlichen Volltext (BGH/BVerfG/rechtsprechung-im-internet)
  zweistufig prüfen (Existenz + Rechtssatz). Nur abstrakt-rechtlich suchen (keine Beteiligtennamen).
- **Öffentlicher Endpoint:** Claudes Connector-Dialog verlangt eine erreichbare HTTPS-URL. Der Server
  ist selbst nicht authentifiziert (er proxyt nur die öffentliche OLDP-API). Wer den Endpoint schützen
  will, stellt ihn hinter eigene Auth / IP-Allowlist / einen Reverse-Proxy. Die OAuth-Felder im Dialog
  bleiben leer.

## Lokal starten (Test)

```bash
pip install -r requirements.txt
python server.py                 # http://0.0.0.0:8000/mcp
python server.py --selftest      # Offline-Selbsttest (kein Netz)
```

Konfiguration über Umgebungsvariablen: `OLDP_MCP_HOST` (Default 0.0.0.0), `OLDP_MCP_PORT`/`PORT`
(Default 8000), `OLDP_BASE` (Default `https://de.openlegaldata.io/api`), `OLDP_TIMEOUT` (Default 30).

## Deployen (öffentliche URL)

Claude erreicht nur öffentlich erreichbare **HTTPS**-URLs. Optionen:

**Docker (eigener Server/VPS mit TLS-Reverse-Proxy):**
```bash
docker build -t oldp-mcp .
docker run -p 8000:8000 oldp-mcp
# hinter Caddy/Nginx mit TLS auf https://oldp.deine-domain.de/mcp veröffentlichen
```

**PaaS (Render / Railway / Fly.io):** Repository mit diesen Dateien deployen; die Plattform gibt
`$PORT` vor (wird automatisch genutzt) und stellt eine HTTPS-URL bereit. Start-Kommando:
`python server.py`. Öffentliche URL dann als `https://<app>.onrender.com/mcp` eintragen.

## In Claude einbinden

1. **Add custom connector** öffnen.
2. **Name:** `Open Legal Data`
3. **Remote MCP server URL:** `https://DEIN-HOST/mcp`
4. OAuth Client ID/Secret **leer lassen**.
5. **Add** → danach die Tools in einer Unterhaltung nutzen (z. B. „suche OLDP-Urteile zu
   Anerkenntnis/Neubeginn der Verjährung").

## Verifizierte API-Form (Stand 17.07.2026)

- `cases/search/` → `{count, next, results[]}`; result: `id, court(code), court_jurisdiction,
  court_level_of_appeal, slug, date, decision_type, snippets[]`.
- `cases/{id}/citing_cases/` und `laws/{id}/citing_cases/` → `results[]` mit `court{name}, file_number,
  type, ecli, source_url`.
- `cases/{id}/references/` → **abweichende Form**: `law_references[]` (`id, book_code, section, title,
  marker_text`) + `case_references[]`. (Der Server mappt dies korrekt.)
- `laws/search/` → `results[]` mit `id, book_code, title, snippets[]`.