# MCP-Gateway

> Die Maschinen-Tür der Plattform: dieselben Werkzeuge über MCP und eine JSON-Schnittstelle — 52 Fähigkeiten aus zwei Domänen — mit Abruf-Budget und typisierten Absagen.

## Was es tut {#was}

Der Gateway ist die Maschinen-Tür der Plattform: dieselben 52 Fähigkeiten über MCP und über eine minimale JSON/HTTP-Schale, beide durch denselben Dispatcher. Die Politik liegt damit an genau einer Stelle — Abruf-Budget, Ratenbegrenzung und typisierte Absagen geschehen einmal, gleich welche Tür der Aufrufer benutzt hat. Die Entdeckung läuft in zwei Stufen: «meta.tools» nennt jedes Werkzeug mit einzeiliger Beschreibung, Domäne und Preis, ohne ein einziges Eingabeschema; «meta.schemas» liefert die Schemata nur der Werkzeuge, die ein Agent auch benannt hat. Dahinter hängen zwei Schnittstellen zu Bundesinfrastruktur, fedlex mit 35 und LINDAS mit 8 Werkzeugen, und ihre Stufe-eins-Zeilen sind wortgleich die des jeweiligen Servers, festgenagelt durch einen Test. Was er nicht tut: die JSON-Schale ist ausdrücklich kein Produktionstransport — eine Verbindung aufs Mal, kein Keep-alive, kein TLS, keine Sitzungen —, und ein abgelehnter Aufruf kostet nichts, weil beide Schranken vor jeder Belastung geprüft werden. Einen öffentlichen Endpunkt serviert er bis heute nicht.


## 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
```

Mit den Fixture-Flags antworten beide Schnittstellen aus aufgezeichneten Dateien, ohne Netz. Ohne die Flags fragt der Gateway die öffentlichen Endpunkte des Bundes.


## Testen {#testen}

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

- **Aufgezeichnete Fixtures:** `mcp/gateway/tests`
- 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:** http://127.0.0.1:8700 — GET /tools, POST /tool/<id>, POST /mcp

### Verträge

- **Werkzeug-Inventar (Stufe eins)** `mcp/gateway/tool-inventory.json`
- **RFC-9728-Metadaten** `mcp/gateway/oauth-protected-resource.json`

### Ein Domänenwerkzeug über die JSON-Hülle aufrufen

```bash
curl -s -X POST http://127.0.0.1:8700/tool/lindas.list_cubes -H 'content-type: application/json' -d '{}'
```

Antwort (Auszug):

```json
{"cubes":[{"cube":"https://politics.ld.admin.ch/fc/cube-chancellor","description":"Bundeskanzler der Schweiz mit Partei, Kanton und Amtszeiten.","family":"fc","name":"Bundeskanzler","observations":15, …}, …]}
```

### Aufruf und Optionen

```text
usage: oh-mcp-gateway --root <repo root> [--budget <n>] [--rate <n/min>] [--burst <n>] [--trust-forwarded-for] [--upstream-rate <n/s>] [--fedlex-fixtures <dir>] [--lindas-fixtures <dir>] [--http <port>] [--model-key-file <path>] [--model-cap <answers/client/day>]
```

## 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: [MCP-Gateway](../../../directory/building-blocks/mcp-gateway/index.html).

---

Quelle: erzeugt aus public/web/modules.json
