# fedlex-Engine

> Der Eigenbau über dem öffentlichen Fedlex-Endpunkt des Bundes: SR-Nummern, Fassungen, Artikeltexte — jede Antwort mit Beleg. Der erste ausgebaute Bereich.

## Was es tut {#was}

Der fedlex-Server liest das Bundesrecht dort, wo der Bund es publiziert: über den öffentlichen SPARQL-Endpunkt fedlex.data.admin.ch/sparqlendpoint und die Akoma-Ntoso-Fassungen im selben Filestore. 35 Werkzeuge — eine SR-Nummer auflösen, die Fassungen einer Erlassfamilie listen, einen Artikel im Wortlaut lesen, ein Zitat gegen den gelesenen Normtext prüfen, die Fundstelle bilden —, und jede Antwort trägt ihre Herkunft und den Moment, in dem sie wirklich geholt wurde. Vor dem Server stand die Datenkunde: 123 Regeln aus zwei Regelwerken, und für jede sagt eine Konformitätstabelle, ob dieser Server sie einhält, ihr widerspricht oder bloss nicht geprüft ist. Ein Test liest diese Tabelle aus: eine Zeile, die «honoured» behauptet, muss einen Test benennen, den es gibt und der auch läuft — «sieht richtig aus» heisst untested, nie honoured. Was er nicht tut: er erfindet keinen Text, ein zwischengespeicherter Erlass wird nie an die Stelle einer Antwort gesetzt, die der Graph verweigert hat, und gegen den Bund geht höchstens eine höfliche Anfrage aufs Mal — zwei pro Sekunde, sonst eine typisierte Absage statt einer Warteschlange.


## Selbst betreiben {#betreiben}

**Sie brauchen:**

- Rust (stable über rustup) und Git; alle Befehle laufen aus der Wurzel des Korpus-Checkouts.

Aus der Wurzel des Korpus-Checkouts, Zeile für Zeile:

```bash
cargo run --locked --manifest-path mcp/gateway/Cargo.toml -- --root . --http 8700 --fedlex-fixtures mcp/servers/fedlex/tests/fixtures --lindas-fixtures mcp/servers/lindas/tests/fixtures
```

Danach sehen Sie:

```text
gateway on 127.0.0.1:8700
```

Der Server spricht MCP über stdin/stdout und hat keine eigene Netzadresse; der einfachste Start ist hinter dem Gateway mit Fixtures. Direkt: cargo run --locked --manifest-path mcp/servers/fedlex/Cargo.toml -- --fixtures mcp/servers/fedlex/tests/fixtures, dann verbindet sich ein MCP-Client über stdio.


## Testen {#testen}

```bash
cargo test --locked --manifest-path mcp/servers/fedlex/Cargo.toml
```

- **Aufgezeichnete Fixtures:** `mcp/servers/fedlex/tests/fixtures`
- Läuft ohne Netz: jede Antwort kommt aus dem Repository, das Ergebnis ist bei jedem Lauf gleich.

## Ansteuern {#ansteuern}

- **Öffentlich:** *noch nicht* — Kein öffentlicher Endpunkt: weder Zone noch Route noch Deployment sind aufgeschaltet.
- **Lokal:** über das Gateway: POST http://127.0.0.1:8700/tool/fedlex.<werkzeug>

### Verträge

- **Werkzeugvertrag v1** `mcp/servers/fedlex/TOOLSET-v1.md`
- **Regelwerk** `docs/reference/fedlex-data-rules.md`
- **Engine-Manifest** `mcp/servers/fedlex/engine.manifest.json`

### Die fedlex-Zeilen der Werkzeugliste

```bash
curl -s http://127.0.0.1:8700/tools
```

Antwort (Auszug):

```json
[{"id":"directory.get","domain":"directory","summary":"The directory envelope (v0.2, authority: manifest). …","weight":1}, … 52 rows]
```

## Mitwirken {#mitwirken}

Änderungen laufen über Merge Request und dieselben Gates wie für den Verein: Formatierung, Clippy ohne Warnungen, Tests, Siegel- und Drift-Prüfungen. Sicherheitsmeldungen vertraulich an admin@openhelvetia.swiss.

Die Basis-Stufe kostet nichts; wovon der Betrieb lebt, steht unter [Über uns, Finanzierung](../../../about/financing/index.html).

## Steckbrief {#steckbrief}

Zustand, Belege, Download und Abhängigkeiten stehen auf der Infrastruktur-Seite: [fedlex-Engine](../../../directory/building-blocks/fedlex-engine/index.html).

---

Quelle: erzeugt aus public/web/modules.json
