Metadata-Version: 2.4
Name: gesetze-mcp
Version: 0.1.1
Summary: MCP-Server für deutsche Gesetze & Rechtsprechung über die OpenLegalData-API (German statutes & case law for AI agents).
Project-URL: Homepage, https://github.com/localmind-gmbh/gesetze-mcp
Project-URL: Repository, https://github.com/localmind-gmbh/gesetze-mcp
Project-URL: Issues, https://github.com/localmind-gmbh/gesetze-mcp/issues
Project-URL: Data source, https://de.openlegaldata.io
Author-email: Localmind GmbH <johannes@localmind.ai>
License-Expression: MIT
License-File: LICENSE
Keywords: ai-agents,fastmcp,german-law,gesetze,legal,llm,mcp,openlegaldata,rechtsprechung
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Legal Industry
Classifier: Natural Language :: German
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Requires-Python: >=3.11
Requires-Dist: fastmcp>=3.4
Requires-Dist: httpx>=0.27
Requires-Dist: markdownify>=1.1
Requires-Dist: pydantic-settings>=2.3
Requires-Dist: pydantic>=2.7
Description-Content-Type: text/markdown

# gesetze-mcp

**MCP-Server für deutsche Gesetze & Rechtsprechung** – ein [FastMCP](https://gofastmcp.com)-Server,
der die offene [OpenLegalData](https://de.openlegaldata.io)-API kapselt und KI-Agenten Zugriff auf
**Gesetzestexte** (BGB, StGB, GG …) und **Gerichtsentscheidungen** gibt.

Gebaut für die Anbindung an LangChain-basierte, modell-agnostische KI-Plattformen über **stdio**.

> ⚠️ **Keine Rechtsberatung.** Dieser Server liefert Informationen aus OpenLegalData. KI-Antworten
> können fehlerhaft sein. Jede inhaltliche Aussage enthält eine **Quelle** (verifizierbare URL +
> Fundstelle) und einen rechtlichen Hinweis – bitte stets den Originaltext und dessen Fassung prüfen.

---

## Highlights

- **11 Tools, 1 Resource (+ Template), 2 Prompts** – kuratiert, mit **deutschen** Beschreibungen.
- **Structured Output** (Pydantic): jede Antwort ist typisiert und enthält ein `quelle`-Objekt.
- **Verifizierbarkeit & Sicherheit**: kanonische Quell-URLs, Aktualitäts-Warnungen, Disclaimer auf
  mehreren Ebenen (Server-`instructions`, `rechtlicher_hinweis`-Feld, Prompts).
- **Robuste Norm-Auflösung**: `§ 823 BGB` wird zuverlässig auf die **neueste Fassung** aufgelöst –
  inklusive lokaler Titel-/Paragraphensuche, die den (lückenhaften) Volltext-Index kompensiert.
- **Read-only**, alle Tools mit `readOnlyHint`/`idempotentHint`/`openWorldHint`.

## Tools

| Tool | Zweck |
|---|---|
| `gesetzbuecher_auflisten` | Verfügbare Gesetzbücher finden (Code/Titel, neueste Fassung). |
| `gesetzbuch_details` | Alle Fassungen/Revisionen eines Gesetzbuchs. |
| `gesetz_lesen` | Volltext einer Norm – per `law_id` **oder** `gesetzbuch_code` + `section`. |
| `normen_auflisten` | Normen eines Buches durchblättern/lokal nach Titel filtern. |
| `gesetz_volltextsuche` | Volltextsuche über Normtexte (Elasticsearch). |
| `gesetz_querverweise` | Verweise einer Norm (ausgehend / zitiert von Urteilen / von Normen). |
| `urteil_volltextsuche` | Volltextsuche über Gerichtsentscheidungen. |
| `urteile_auflisten` | Urteile nach Metadaten filtern (Gericht, Az., ECLI, Datum). |
| `urteil_lesen` | Volltext einer Entscheidung. |
| `urteil_querverweise` | Von einem Urteil zitierte Normen/Urteile (und umgekehrt). |
| `zitat_pruefen` | Zitat validieren/auflösen (`§ 823 BGB`, Aktenzeichen, ECLI). |

**Resources:** `gesetzbuch://katalog` (Katalog), `gesetz://{gesetzbuch_code}/{section}` (z. B. `gesetz://BGB/823`).
**Prompts:** `norm_recherche`, `gesetz_erklaeren` (mit eingebauten Quellen-/Disclaimer-Leitlinien).

## Installation

Der Server läuft am einfachsten via [`uv`](https://docs.astral.sh/uv/) ohne Vorinstallation:

```bash
uvx gesetze-mcp
```

Oder klassisch:

```bash
pip install gesetze-mcp
gesetze-mcp           # startet den stdio-Server
```

## Konfiguration (Umgebungsvariablen)

| Variable | Default | Zweck |
|---|---|---|
| `OPENLEGALDATA_API_KEY` | – (optional) | API-Token. **Lesezugriffe sind öffentlich** – der Key ist nur für höhere Rate-Limits/Schreibzugriffe nötig. |
| `OPENLEGALDATA_BASE_URL` | `https://de.openlegaldata.io` | Basis-URL der API. |
| `OPENLEGALDATA_TIMEOUT` | `30` | HTTP-Timeout (Sekunden). |
| `OPENLEGALDATA_AUTH_SCHEME` | `Token` | Präfix des `Authorization`-Headers (z. B. `Token` oder `Bearer`). |

## Anbindung an eine KI-Plattform (stdio)

Die Plattform startet den Server als Subprozess und reicht den Key per ENV durch:

```json
{
  "mcpServers": {
    "gesetze": {
      "command": "uvx",
      "args": ["gesetze-mcp"],
      "env": { "OPENLEGALDATA_API_KEY": "<dein-key>" }
    }
  }
}
```

### LangChain / LangGraph

Mit [`langchain-mcp-adapters`](https://github.com/langchain-ai/langchain-mcp-adapters) werden die
Tools modell-agnostisch in einen Agenten geladen:

```python
from langchain_mcp_adapters.client import MultiServerMCPClient

client = MultiServerMCPClient(
    {
        "gesetze": {
            "command": "uvx",
            "args": ["gesetze-mcp"],
            "transport": "stdio",
            "env": {"OPENLEGALDATA_API_KEY": "<dein-key>"},
        }
    }
)
tools = await client.get_tools()
# tools -> an dein LangChain/LangGraph-Agenten-Setup übergeben
```

### Empfohlene System-Prompt-Leitlinien für den Agenten

Der Server liefert diese Regeln zwar bereits maschinenlesbar über seine `instructions`, ergänze sie
aber im Agenten-System-Prompt:

1. **Immer Quelle/Fassung zitieren** (Gesetzbuch + §/Art. bzw. Gericht + Az./ECLI, plus `quelle.url`).
2. **Keine Rechtsberatung** – bei rechtlich relevanten Fragen auf qualifizierte Beratung verweisen.
3. **Nicht halluzinieren** – wenn ein Tool nichts findet, das offen sagen und Suche/Originaltext anbieten.

## Quellen & Verifizierbarkeit

Jede inhaltliche Antwort enthält ein `quelle`-Objekt mit zwei Links und allen Identifikatoren
(Gesetzbuch-Code, §/Art., Fassung; Gericht, Aktenzeichen, ECLI, Datum):

- **`url`** — die **lesbare** Fundstelle zum Anklicken:
  - Gesetze → **amtliche Fassung bei [gesetze-im-internet.de](https://www.gesetze-im-internet.de)**
    (Bundesrecht, z. B. `…/bgb/__823.html`). Für nicht abbildbares Recht (Landes-/EU-Recht) fällt
    `url` auf die API-URL zurück.
  - Urteile → OpenLegalData-Entscheidungsseite (`…/case/<slug>`).
- **`api_url`** — die maschinenlesbare **OpenLegalData-API-URL** (`…/api/laws/<id>/` bzw.
  `…/api/cases/<id>/`); das ist die Quelle der angezeigten Daten und dient der Verifikation.

## Entwicklung

```bash
uv sync                      # Umgebung einrichten
uv run python -m pytest      # Tests (Live-Tests werden übersprungen)
RUN_LIVE=1 uv run python -m pytest -m live   # Tests gegen die echte API
uv run python -m ruff check . && uv run python -m ruff format --check .
uv run python -m mypy src
```

## Datenquelle & Lizenz

Daten von [OpenLegalData](https://de.openlegaldata.io) (Open Data). Code unter **MIT-Lizenz**
(siehe `LICENSE`). Dieses Projekt steht in keiner offiziellen Verbindung zu OpenLegalData.

---

## English summary

`gesetze-mcp` is a FastMCP server wrapping the [OpenLegalData](https://de.openlegaldata.io) API so AI
agents can query **German statutes** (BGB, StGB, GG …) and **court decisions**. It exposes 11 curated
tools, a catalog resource + a norm template, and two research prompts. Tool descriptions are in
German. Every result carries a verifiable `quelle` (source URL + identifiers) and a legal disclaimer
(this is **not legal advice**). Read access is public; an `OPENLEGALDATA_API_KEY` is optional. Run via
`uvx gesetze-mcp` over stdio and connect it to any LangChain/MCP-compatible, model-agnostic platform.
