# Das Gateway aufrufen

> Zweistufige Entdeckung, ein Aufruf, und was eine Absage bedeutet — lokal heute, öffentlich, sobald der Endpunkt serviert wird.


Ein Gateway, zwei Funktionen: Politik (Rate, Sitzungsbudget, typisierte Absagen) und Aggregation (flache Namen, deterministische Werkzeugliste, zweistufige Entdeckung). Dahinter zwei Schnittstellen zu Bundesinfrastruktur: fedlex über dem öffentlichen Fedlex-SPARQL-Endpunkt, lindas über den 44 politischen Datenwürfeln der Bundeskanzlei.

**Stand:** `mcp.openhelvetia.swiss/mcp` ist vorbereitet und nicht serviert. Alles hier beschreibt den gebauten Stand, wie ihn die Tests beweisen. Lokal läuft er heute; wie, steht in [MCP-Gateway betreiben, testen, ansteuern](../infrastructure/module-mcp-gateway.md).

## Die drei Türen {#tueren}

| Tür | Für wen | Bemerkung |
|---|---|---|
| MCP über stdio | lokale Hosts und Tests | die Maschinentür; der Prozess ist die Sitzung |
| MCP streamable-HTTP `/mcp` | Agenten und Hosts über das Netz | die vorgesehene öffentliche Tür (Revision 2026-07-28) |
| JSON-Hülle `GET /tools`, `POST /tool/<id>` | einfache Clients, der Chat dieser Website | lokal; kein Produktionstransport; dieselben Werkzeuge, dieselben Absagen |
| Relais `/relay/infomaniak/<Produkt>/…` | der Chat dieser Website, für einen Anbieter, dessen API keine Browser-Aufrufe annimmt | reicht `chat/completions` und `models` mit dem eigenen Schlüssel des Besuchers an Infomaniak weiter und nirgendwohin sonst; speichert und protokolliert nichts davon; offen nur, wo der Betreiber `--relay` setzt (E16, Revision 05.09.2026) |

## Zweistufige Entdeckung {#entdeckung}

1. **meta.tools.** Jedes Werkzeug mit Kennung, Domäne, Einzeiler und Gewicht, ohne Eingabeschemata. Kostet 1.
2. **meta.schemas.** Die vollständigen Eingabeschemata nur der genannten Kennungen, typisch drei bis fünf.
3. **Aufruf.** Beide Stufen und `tools/list` lesen denselben Router; die Schemata sind byte-identisch.

Eine Zeile aus Stufe eins, wörtlich aus dem Werkzeug-Inventar:

```json
{
  "id": "fedlex.resolve_sr",
  "domain": "fedlex",
  "summary": "Resolve an SR number (e.g. 832.10) to the act's ELI, titles and in-force status: use when a question names an SR; predecessors stay visible. norm.",
  "weight": 2
}
```

## Ein Aufruf über die JSON-Hülle {#aufruf}

```bash
curl -s http://127.0.0.1:8700/tools
curl -s -X POST http://127.0.0.1:8700/tool/meta.schemas -H 'content-type: application/json' -d '{"names": ["fedlex.resolve_sr", "fedlex.read_article"]}'
curl -s -X POST http://127.0.0.1:8700/tool/lindas.list_cubes -H 'content-type: application/json' -d '{}'
```

## Die erste Nachricht über MCP streamable-HTTP {#discover}

```text
POST https://mcp.openhelvetia.swiss/mcp
Accept: application/json, text/event-stream
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
MCP-Method: server/discover

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "server/discover",
  "params": {
    "protocolVersion": "2026-07-28",
    "_meta": {
      "io.modelcontextprotocol/protocolVersion": "2026-07-28",
      "io.modelcontextprotocol/clientCapabilities": {}
    }
  }
}
```

Beide Accept-Typen, Versions- und Methoden-Header, `params._meta` mit beiden Schlüsseln: fehlt eines, weist ein konformer Server die Anfrage ab, bevor MCP-Logik läuft.

## Grenzen {#grenzen}

Sitzungsbudget: gewichtete harte Grenze (Registerlesen 1, Domänenaufruf 2), erholt sich nicht. Rate: Voreinstellung 60 Gewichtseinheiten pro Minute, Burst 20, je Client. Eine Absage kostet nichts. Die sechs Absagen stehen in der [Referenz](../reference/refusals.md).

---

Quelle: docs/de/how-to/call-the-gateway.md
