Deutsche Gesetze MCP Server
Dieser Server implementiert das Model Context Protocol (MCP), um deutschen Gesetzestexte für LLMs (Large Language Models) bereitzustellen. Er ermöglicht es KI-Assistenten, gezielt nach Gesetzen zu suchen und spezifische Paragraphen abzurufen.
Die Gesetzestexte werden aus Markdown-Dateien geparst, die dem Format des Bundestag/gesetze Repositories entsprechen (Hinweis: Dieses Repository ist veraltet und dient nur zu Demozwecken).
Funktionen
- Gesetze auflisten & suchen: Durchsuchen der verfügbaren Gesetze (z.B. BGB, StGB, HGB).
- Volltextsuche: Suche nach Begriffen in den Gesetzestexten.
- Paragraphen abrufen: Abruf des Volltextes spezifischer Paragraphen (inkl. Absätze).
- Flexible Datenquellen: Laden der Gesetze aus einem lokalen Ordner oder direkt von GitHub.
Installation
Lokal
-
Repository klonen:
git clone https://github.com/floleuerer/deutsche-gesetze-mcp.git cd deutsche-gesetze-mcp
-
Abhängigkeiten installieren: Es wird empfohlen, eine virtuelle Umgebung zu verwenden (z.B.
venvoderconda).pip install -r mcp/requirements.txt
Docker (Empfohlen)
Die Docker-Version klont automatisch das gesamte Bundestag/gesetze Repository (veraltet, nur Demo) in das Image, sodass alle Gesetze sofort lokal verfügbar sind.
-
Image bauen:
docker build -t deutsche-gesetze-mcp .
-
Container starten:
docker run -p 8001:8001 deutsche-gesetze-mcp
Datenvorbereitung
Das Projekt enthält im Ordner prepare_data Skripte, um aktuelle Gesetzestexte direkt von www.gesetze-im-internet.de herunterzuladen und für den Server aufzubereiten.
- Skript ausführen:
cd prepare_data ./prepare_gesetze_im_internet.sh
Dies lädt die Gesetze herunter, entpackt sie und konvertiert sie in das benötigte Format.
Konfiguration
Die Konfiguration erfolgt über Umgebungsvariablen oder eine .env Datei. Die Einstellungen werden in mcp/config.py definiert.
| Variable | Beschreibung | Standardwert |
|---|---|---|
LOAD_FROM_FOLDER |
Pfad zu einem lokalen Ordner mit Gesetzes-Markdown-Dateien. | /app/gesetze/ |
LOAD_FROM_GITHUB |
JSON-Liste von Gesetzeskürzeln, die von GitHub geladen werden sollen (überschreibt LOAD_FROM_FOLDER, wenn gesetzt). |
None |
MIN_PARAGRAPHS |
Minimale Anzahl an Paragraphen, damit ein Gesetz geladen wird. | 5 |
Beispiel .env Datei:
Um Gesetze direkt von GitHub zu laden (z.B. BGB und StGB):
LOAD_FROM_GITHUB='["BGB", "StGB"]'
LOAD_FROM_FOLDER=
Um lokale Dateien zu nutzen (angenommen, sie liegen in ./gesetze):
LOAD_FROM_FOLDER=./gesetze
Nutzung
Server starten
Der Server kann direkt über Python gestartet werden. Er nutzt FastMCP und stellt standardmäßig einen HTTP-Server auf Port 8001 bereit.
python mcp/server.py
Tests
Die Tests können mit pytest ausgeführt werden. Um die Tests zu starten, muss der mcp Ordner im Python-Pfad liegen:
PYTHONPATH=mcp python3 -m pytest mcp/tests
Verfügbare Tools
Der Server stellt folgende MCP-Tools zur Verfügung:
-
get_lawlibrary(law: str | None)- Listet verfügbare Gesetze auf.
- Parameter
law: (Optional) Suchbegriff oder Kürzel, um die Liste zu filtern (z.B. "BGB"). - Gibt eine JSON-Liste der gefundenen Gesetze zurück.
-
get_paragraph(law: str, paragraph: str)- Ruft den Inhalt eines Paragraphen ab.
- Parameter
law: Das Kürzel des Gesetzes (z.B. "BGB"). - Parameter
paragraph: Die Nummer des Paragraphen (z.B. "1", "14a"). - Gibt den Text des Paragraphen (und ggf. spezifische Absätze) zurück.
-
search_laws(query: str, laws: list[str] | None)- Volltextsuche über alle oder ausgewählte Gesetze.
- Parameter
query: Der Suchbegriff (z.B. "Schadensersatz", "Kündigung"). - Parameter
laws: (Optional) Liste von Gesetzeskürzeln zur Einschränkung der Suche (z.B.["BGB", "HGB"]). - Gibt eine Liste von Treffern mit Paragraphen und Textausschnitten zurück.
Verwendung mit MCP-Clients
Dieser Server kann mit jedem MCP-kompatiblen Client verbunden werden. Da er als HTTP-Server (SSE) läuft, muss der Client entsprechend konfiguriert werden, um sich mit http://localhost:8001/mcp zu verbinden.
Ein Beispiel für die Integration in einen KI-Agenten findest du im Ordner google-adk-agent, der das Google Agent Development Kit (ADK) nutzt.
Datenformat
Der Parser erwartet Markdown-Dateien, wie sie im Projekt bundestag/gesetze (veraltet, nur Demo) verwendet werden. Die Struktur sieht typischerweise so aus:
---
Title: Bürgerliches Gesetzbuch
jurabk: BGB
---
# § 1 Beginn der Rechtsfähigkeit
Die Rechtsfähigkeit des Menschen beginnt mit der Vollendung der Geburt.
...
Lizenz
Siehe LICENSE Datei.
Metadata
Release files for iflow-mcp_floleuerer-deutsche-gesetze-mcp 0.1.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| iflow_mcp_floleuerer_deutsche_gesetze_mcp-0.1.3.tar.gz | 553.2 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| iflow_mcp_floleuerer_deutsche_gesetze_mcp-0.1.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 566.9 kB
Release files / iflow_mcp_floleuerer_deutsche_gesetze_mcp-0.1.3.tar.gz
| Download URL | iflow_mcp_floleuerer_deutsche_gesetze_mcp-0.1.3.tar.gz |
|---|---|
| Size | 553.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
297170912789c5268946582cb12c5973dcf75f02b229ecd2a536597bf1663aa3
|
|
BLAKE2b-256 checksum How to use checksums |
f8619e261584e6408be3fc600a01355866b2379b69b6d28813e7934bd559841e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / iflow_mcp_floleuerer_deutsche_gesetze_mcp-0.1.3-py3-none-any.whl
| Download URL | iflow_mcp_floleuerer_deutsche_gesetze_mcp-0.1.3-py3-none-any.whl |
|---|---|
| Size | 13.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9a8dab1bdc9d5cb6732059756a73581a4a0d02c5bd72b2e3c23fb474d9840b6d
|
|
BLAKE2b-256 checksum How to use checksums |
262c73e321753a3fa8b093d8eb94a9b04f828b5c97024387c753ad992408c426
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|