MCP-Server

Aktiviere mcp, um bei jedem Build eine vollständige, unabgeschnittene site/mcp-index.json (sowie site/mcp-manifest.json und eine mcp-nav.json pro Baum) zu schreiben, damit bxSites Cloud deine veröffentlichte Website über einen öffentlichen, schreibgeschützten MCP-Server für KI-Agenten bereitstellen kann - unabhängig von search/searchProvider.

Auf dieser Seite

MCP-Server

Schalte mcp: true in bxsites.yaml ein, und jeder build schreibt drei Dateien neben deinen gerenderten Seiten - eine vollständige, maschinenlesbare Kopie des Inhalts, der Navigation und der Baumstruktur deiner Website, die bxSites Cloud liest, um einen öffentlichen, schreibgeschützten MCP-Server für deine veröffentlichte Website bereitzustellen - dieselbe Idee wie GitBooks „MCP servers for published docs". Nach der Veröffentlichung können KI-Agenten und -Assistenten (Claude, ChatGPT und jeder andere MCP-fähige Client) den Inhalt deiner Website direkt durchsuchen, browsen und abrufen, statt gerendertes HTML zu scrapen:

  • site/mcp-index.json - ein vollständiger Eintrag pro Seite, pro Baum
  • site/mcp-nav.json - die eigene Navigationsstruktur dieses Baums, pro Baum
  • site/mcp-manifest.json - ein websiteweiter Index aller Bäume (Hauptseite, Versionen, Sprachen) und wo die eigenen Dateien jedes Baums von oben zu finden sind

BxSites selbst erzeugt ausschließlich die auf dieser Seite beschriebenen Dateien - sie tatsächlich als MCP-Server über das Netzwerk auszuliefern, ist Aufgabe von bxSites Cloud, nicht etwas, das dieses Modul selbst übernimmt.

Erfordert einen kostenpflichtigen bxSites-Cloud-Plan

Das Erzeugen von mcp-index.json selbst ist kostenlos und funktioniert allein mit bxSites build, ganz ohne Cloud-Konto. Es tatsächlich als laufenden MCP-Server für eine veröffentlichte Website bereitzustellen, ist eine Funktion von bxSites Cloud, die nur in den kostenpflichtigen Plänen enthalten ist - nicht im kostenlosen Plan. Aktuelle Details zu den Plänen findest du unter bxsites.io/cloud.

Aktivieren

mcp: true
{ "mcp": true }
mcp = true

false (Standard) überspringt den gesamten Schritt - es werden weder mcp-index.json, mcp-nav.json noch mcp-manifest.json geschrieben, und build verursacht über die reine Prüfung des Flags hinaus keine zusätzlichen Kosten.

mcp hat nichts mit search/searchProvider zu tun - die beiden sind voneinander unabhängige Schalter:

  • mcp-index.json wird unabhängig davon erzeugt, ob search true oder false ist, und unabhängig von searchProvider.provider ("local", "algolia", "pagefind" oder ein eigener).
  • Das Aktivieren von mcp ändert nie etwas an der eigenen, besucherseitigen Suchbox deiner Website, und das Deaktivieren von search deaktiviert niemals mcp-index.json.

Deshalb kann mcp-index.json nicht einfach search-index.json wiederverwenden: Diese Datei wird nur für den "local"-Such-Provider gebaut (eine Algolia- oder Pagefind-gestützte Website erzeugt gar keine search-index.json, da beide ihren eigenen Index anderswo führen), und ihr body-Feld ist absichtlich abgeschnitten - search-index.json wird an den Browser jedes Besuchers für die Suchbox auf der Seite ausgeliefert, weshalb es wichtig ist, sie klein zu halten. Keine dieser Einschränkungen gilt für mcp-index.json: Sie wird serverseitig von bxSites Cloud abgerufen, nicht an Besucher ausgeliefert, und ein abgeschnittener Textkörper riskiert, dass ein KI-Agent eine unvollständige oder falsche Antwort gibt.

Das Format von mcp-index.json

Ein Eintrag pro nicht versteckter Seite (dieselbe Konvention „versteckte Seiten werden ausgeschlossen", die auch search-index.json/die Navigation verwenden), sowohl für reguläre Doku-Seiten als auch für Blog-Beiträge:

[
  {
    "title": "Getting Started",
    "url": "getting-started/index.html",
    "tags": ["guides"],
    "headings": ["Getting Started", "Installation", "Next steps"],
    "body": "Getting Started Installation Run bxSites new to scaffold a project... Next steps ...",
    "markdown": "# Getting Started\n\n## Installation\n\nRun `bxSites new` to scaffold a project...\n\n## Next steps\n\n...",
    "type": "page",
    "categories": [],
    "updatedAt": "2026-08-18T10:15:00.000Z"
  },
  {
    "title": "Announcing bxSites 2.0",
    "url": "blog/announcing-bxsites-2/index.html",
    "tags": ["release"],
    "headings": ["Announcing bxSites 2.0"],
    "body": "Announcing bxSites 2.0 Today we're shipping...",
    "markdown": "# Announcing bxSites 2.0\n\nToday we're shipping...",
    "type": "post",
    "categories": ["Releases"],
    "updatedAt": "2026-08-15"
  }
]
FeldBeschreibung
titleDer Titel der Seite (Frontmatter title, wie bei search-index.json)
urlDer URL-Pfad der Seite, relativ zur Wurzel ihres eigenen Baums - nie wurzelabsolut und ohne den eigenen path des Baums (siehe Baumrelative URLs weiter unten)
tagsDas Frontmatter-Array tags der Seite
headingsDer reine Text jeder Überschrift h1-h6 auf der Seite, in Dokumentreihenfolge
bodyDer vollständige reine Textinhalt der Seite, HTML-Tags entfernt - nie abgeschnitten
markdownDerselbe Seiteninhalt, aus dem gerenderten HTML in Markdown umgewandelt, nie abgeschnitten (siehe Markdown-Inhalt weiter unten). Fehlt in einem Index, der von einer älteren bxSites-Version erzeugt wurde - dort auf body zurückfallen.
type"page" für eine reguläre Doku-Seite, "post" für einen Blog-Beitrag
categoriesDas eigene Frontmatter-Array categories eines Beitrags; bei einer Doku-Seite immer [] (Doku-Seiten haben keine Kategorien)
updatedAtDas eigene Frontmatter-date eines Beitrags; bei einer Doku-Seite deren eigenes Frontmatter-date, sofern gesetzt, sonst der Zeitpunkt der letzten Änderung ihrer Quelldatei als ISO-8601-Zeitpunkt. "", wenn keines von beidem verfügbar ist.

Abgesehen von markdown, type, categories und updatedAt ist dies dieselbe Eintragsform wie bei search-index.json, mit einem Unterschied: dort wird body auf 400 Zeichen mit abschließender Ellipse gekürzt; hier ist es die vollständige Seite.

Markdown-Inhalt

markdown ist der gerenderte Seiteninhalt, in Markdown umgewandelt, damit ein KI-Agent Überschriften, Code, Listen und Tabellen lesen kann, ohne HTML zu parsen. Die Umwandlung geht vom gerenderten HTML aus, nicht von der Quelldatei (die Build-Direktiven und Variablen enthalten kann), und entspricht daher dem, was Besucher sehen. body bleibt unverändert und ist weiterhin der reine Text für die Suche.

Das liefert die Umwandlung:

  • Überschriften als ATX (# Titel, ## Abschnitt), ohne die Anker-Links
  • Codeblöcke mit Zaun behalten ihre Sprache, wenn der gerenderte Code eine hat (ein boxlang-Zaun); ein Block ohne Sprache wird als eingerückter Codeblock ausgegeben
  • Listen, verschachtelte Listen, Tabellen und Inline-Formatierung
  • Tab-Gruppen: Jedem Panel wird sein Tab-Name fett vorangestellt (**YAML**)
  • Hinweisboxen: ein Zitatblock, dessen erste Zeile der Titel in Fettschrift ist
  • Bilder als ![alt](src); dekorative Bilder ohne Alt-Text werden weggelassen
  • Skripte, Stile, SVG-Sprites und Formularelemente werden entfernt
  • Links und Bildquellen bleiben genau wie gerendert: websiteabsolute Pfade, die bereits den baseUrl-Pfad des Builds und das Präfix des Baums enthalten (zum Beispiel /versions/0.9/guides/setup/index.html)
Größe des Index

markdown verdoppelt die Größe von mcp-index.json in etwa. Bei dieser Dokumentations-Website wuchsen die 73 Seiten des Hauptbaums von etwa 460 KB auf etwa 1 MB.

Baumrelative URLs

mcp-index.json wird einmal pro Baum geschrieben, und die url jedes Eintrags ist relativ zur Wurzel des eigenen Baums: kein führender Schrägstrich, kein Baum-Präfix, kein baseUrl-Pfad. Der vollständige Pfad einer Seite ist der path des Baums aus dem Manifest, verbunden mit ihrer url (nur die url, wenn path "" ist):

Baum (Manifest-path)Index-Dateiurl des EintragsSeitendatei
""mcp-index.jsonguides/setup/index.htmlguides/setup/index.html
versions/0.9versions/0.9/mcp-index.jsonguides/setup/index.htmlversions/0.9/guides/setup/index.html
eses/mcp-index.jsonguides/setup/index.htmles/guides/setup/index.html

Dieselbe url kommt also in jedem Baum vor, der diese Seite hat. Alles, was einen Eintrag mit einem websiteabsoluten Anfragepfad abgleicht, etwa ein passwortgeschützter Teilbaum, muss zuerst den path des Baums voranstellen. Das betrifft nur url: Die Links und Bildquellen innerhalb von markdown sind bereits websiteabsolut.

Das Format von mcp-manifest.json

Einmal pro Website-Build geschrieben (nicht einmal pro Baum), listet site/mcp-manifest.json jeden Baum auf, der eine eigene mcp-index.json/mcp-nav.json erhalten hat, damit der MCP-Server von bxSites Cloud versions- und sprachbewusste Tools anbieten kann, ohne die eigenen Verzeichniskonventionen von bx-sites erraten zu müssen:

[
  { "path": "", "label": "1.0.x", "version": "1.0.x", "locale": "en", "default": true },
  { "path": "next", "label": "Next", "version": null, "locale": "en", "default": false },
  { "path": "versions/0.9", "label": "0.9", "version": "0.9", "locale": "en", "default": false },
  { "path": "es", "label": "Español", "version": "1.0.x", "locale": "es", "default": false }
]
FeldBeschreibung
pathDer eigene, wurzelrelative Pfad dieses Baums - "" für den Hauptbaum an der Website-Wurzel, sonst "next"/"versions/<name>"/"<localeCode>"/"versions/<name>/<localeCode>". Verbinde ihn mit /mcp-index.json (oder /mcp-nav.json), um die eigene Datei dieses Baums zu erhalten, z. B. "versions/0.9/mcp-index.json" - und für die Wurzel selbst einfach "mcp-index.json" (dort ist path gleich "").
labelEine menschenlesbare Bezeichnung für diesen Baum - die eigene Bezeichnung des Versionsschalters (der Name von versions.default, der eigene Name einer einfachen Version oder "Latest"/"Next"), kombiniert mit der eigenen Bezeichnung der Sprache für einen Sprach-Unterbaum
versionDer Name aus docs/versions/<name>/, den dieser Baum rendert, oder null, wenn es sich um keine benannte Version handelt (der unversionierte Hauptbaum oder /next/)
localeDer eigene Sprachcode dieses Baums - i18n.defaultLocale.code für einen Baum ohne Sprach-Suffix, sonst der eigene Code dieser Sprache
defaulttrue für den einen Baum, der an der Website-Wurzel gerendert wird - denjenigen, auf dem ein Besucher/KI-Agent ohne Angabe von Version oder Sprache landet

Das Format von mcp-nav.json

Neben der eigenen mcp-index.json jedes Baums geschrieben (Website- Wurzel, /next/, jeder /versions/<name>/-Baum, jeder Sprach-Unterbaum) ist mcp-nav.json die eigene Navigation dieses Baums - genau dieselbe verschachtelte { title, url, order, icon, children }-Struktur, aus der das Theme selbst die Seitenleiste rendert -, damit der MCP-Server von bxSites Cloud ein get_nav/Inhaltsverzeichnis-Tool anbieten kann, ohne eine zweite, eigene Navigationsform zu erfinden:

[
  {
    "title": "Getting Started",
    "url": "getting-started/index.html",
    "order": 1,
    "icon": "phosphor-duotone:rocket-launch",
    "children": []
  },
  {
    "title": "Guides",
    "url": "",
    "order": 2,
    "icon": "",
    "children": [
      { "title": "Search", "url": "guides/search/index.html", "order": 1, "icon": "", "children": [] }
    ]
  }
]

Ein Ordner-Gruppenknoten ohne eigene index.md (wie "Guides" oben) hat eine leere url - er ist keine Seite, sondern nur eine Überschrift für seine children.

Websites mit mehreren Versionen und Sprachen

Genau wie search-index.json werden mcp-index.json/mcp-nav.json einmal pro gerendertem Baum geschrieben - die Hauptseite, /next/ (wenn versions.default gesetzt ist), jeder /versions/<name>/-Baum und jeder Sprach-Unterbaum -, sodass jeder veröffentlichte Baum sein eigenes Dateipaar erhält, das nur die eigenen Seiten und die eigene Navigation dieses Baums abdeckt. mcp-manifest.json hingegen wird einmal pro Build geschrieben, nur an der Website-Wurzel, und listet jeden dieser Bäume auf.

Diese Seite bearbeiten Markdown herunterladen Zuletzt aktualisiert Oct 30, 2026, 8:50:56 PM Report an issue