Ein Model-Context-Protocol-Endpunkt, damit ein Agent die Dokumentation abfragen
kann, statt sie zu scrapen.

## Werkzeuge

| Werkzeug        | Was es tut                                              |
| :-------------- | :------------------------------------------------------ |
| `list_versions` | Jede Version, mit dem Prefix, das sie eingrenzt         |
| `list_pages`    | Das Inhaltsverzeichnis, begrenzt und eingegrenzt        |
| `search_docs`   | Eine Seite nach Begriff finden, mit Textausschnitt      |
| `read_page`     | Eine Seite als Markdown, mit duxt-Frontmatter           |

## Der Scope ist ein URL-Prefix

`list_versions` liefert das Prefix, unter dem jede Version ausgeliefert wird —
`/app`, `/app/v1`, `/de/app` — und genau dieser String ist der gesamte Scope,
den `list_pages` und `search_docs` annehmen. Dazu kommen Label, Lebenszyklus-
Status, die Sprachen der Version und ob sie die Standardversion ist: So wählt
ein Agent eine Ausgabe, bevor er darin sucht.

Ohne Prefix sind alle Versionen abgedeckt, in der Standardsprache der Seite.
Eine Version, die unter einer anderen liegt — `/app/v1` unterhalb des aktuellen
`/app` — gehört nie zum Scope der übergeordneten.

## Begrenzte Antworten

Beide Auflistungen nehmen `limit` (Standard 20, höchstens 100) und einen
`cursor`. Ergebnisse sind nach Pfad sortiert, und eine `nextCursor`-Zeile nennt
die Fortsetzung; fehlt sie, ist die Liste vollständig. Der Cursor ist der zuletzt
gelieferte Pfad und bleibt damit stabil, wenn sich die Dokumentation zwischen
zwei Aufrufen ändert.

## Was `read_page` zurückgibt

duxts eigenes YAML-Frontmatter — Pfad, Prefix, Version-Label und Ref, Sprache
und Lebenszyklus-Status — über dem geschriebenen Markdown, dessen ursprüngliches
Frontmatter entfernt ist. Nie das gerenderte HTML und nie Contents Parse-Baum.

## Anmerkungen

Dieselben Collections wie die Seiten, die Antworten können also nicht von dem
abweichen, was veröffentlicht ist. Name, Beschreibung und Instruktionen des
Servers kommen aus den Optionen des Moduls.

Der Server verwendet pro Produktions-Collection einen wiederverwendeten Pfadindex. Eine Liste liest Metadaten für die gewünschten Ergebnisse und eine Fortsetzungszeile. Die Suche liest Inhalte in Blöcken von höchstens 64 Seiten und stoppt, sobald Antwort und Fortsetzung feststehen. Unicode-Abgleich und Übersetzungspriorität bleiben erhalten. Ohne Treffer wird der ganze Bereich durchsucht, ohne alle Inhalte gleichzeitig zu speichern.