MCP-Server
Hoste einen Model-Context-Protocol-Server, damit Coding-Agents deine Docs direkt durchsuchen und lesen können — Tools, Ressourcen, Discovery-Dokumente, Filter für Content-Typen und Facetten, das Menü Connect to MCP sowie die dafür nötige Server-Ausgabe.
Hoste einen Model-Context-Protocol-Server, damit Coding-Agents (Claude Code, Cursor, VS Code, claude.ai-Connectoren) deine Docs direkt durchsuchen und lesen können — ohne Scraping. Das ist optional und muss aktiviert werden:
agents: {
mcp: {
enabled: true,
route: "/mcp", // where the server is mounted
},
}
| Option | Standard | Beschreibung |
|---|---|---|
enabled |
false |
Den MCP-Server generieren und hosten. |
route |
/mcp |
Pfad, unter dem der Streamable-HTTP-Endpunkt eingehängt wird. |
name |
title | Server-Name, der Clients angezeigt wird (Standard: title). |
instructions |
— | Optionaler System-Hinweis für verbundene Agents. |
clients |
true |
Clients, in die das Menü Connect to MCP den Server installiert. |
Wenn bereits eine Content-Seite oder eine eigene Seite die Route belegt, wird der Server nicht generiert: Der Build gibt eine Warnung aus, und llms.txt sowie die anderen Discovery-Dokumente lassen ihn weg.
Der Guide Einen MCP-Server zu deinen Docs hinzufügen führt dich durch den gesamten Ablauf — vom Aktivieren über das Deployment des Servers bis zum Verbinden eines Clients.
Tools und Ressourcen
Der Server stellt schreibgeschützte Tools bereit — search_docs, get_page, list_pages und get_navigation — sowie jede Seite als MCP-Ressource (resources/list listet die Seiten unter ihren ausgelieferten URLs mit dem Typ text/markdown auf und lässt dabei wie list_pages i18n-Fallback-Kopien nicht übersetzter Seiten weg; resources/read gibt das Agent-Markdown der Seite zurück, dieselbe Ausgabe wie get_page), sodass Clients, die Kontext per URI anhängen, die Docs ohne Tool-Aufruf durchstöbern können. Er veröffentlicht Discovery-Dokumente unter /.well-known/mcp.json und /.well-known/mcp/server-card.json. Die Server Card folgt dem Server-Card-Erweiterungsschema aus SEP-2127 (Reverse-DNS-name, remotes-Transport-Endpunkte), ergänzt um initialize-förmige Kompatibilitätsfelder (serverInfo, capabilities, transports) für Scanner, die gegen die frühere Fassung des Proposals gebaut wurden. Das Menü Connect to MCP jeder Seite bietet eine Copy-and-go-Installation für Claude Code, Cursor, VS Code und Codex (sichtbar, sobald deployment.site gesetzt ist), und du kannst die aufgelisteten Clients auswählen.
search_docs betreibt einen eigenen Volltextindex und funktioniert daher unabhängig von deinem Such-Provider — und selbst mit search: false. Der MCP-Server ist ein von der seitenbasierten Suche getrenntes Feature.
Versteckte Seiten erscheinen nicht in list_pages und resources/list und auch nicht in search_docs, sofern search.indexing.includeHiddenPages nicht aktiviert ist — genau wie sie auch in der Site-Suche und in llms.txt fehlen. get_page und resources/read geben eine versteckte Seite über ihre Route trotzdem zurück: Versteckt heißt nicht privat, und die Seite wird weiterhin unter ihrer URL und als Markdown ausgeliefert.
Dieselben Tools stehen über einfaches HTTP als JSON-API zur Verfügung — für Frameworks, die kein MCP sprechen.
Der Endpunkt liest einen Request-Body nur bis 64 KB und beantwortet alles Größere mit 413. Ein Aufruf eines Tools, das nicht existiert, oder mit arguments, die kein Objekt sind, erhält den JSON-RPC-Fehler „Invalid params“ (-32602).
Eingrenzen nach Content-Typ und Facetten
search_docs und list_pages akzeptieren beide einen optionalen contentTypes-Filter, der Ergebnisse auf Seiten mit den angegebenen Frontmatter-types eingrenzt — ["rfc"], ["blog", "changelog"] —, sodass ein Agent auf einer Site, die Docs mit RFCs, Runbooks oder Richtlinien mischt, den Abruf auf die benötigte Seitenart beschränken kann. Jedes Ergebnis nennt seinen Content-Typ, und die Ausgabe von list_pages zeigt die verwendeten Typen.
Beide Tools akzeptieren außerdem ein filters-Objekt, das gegen die Facetten abgleicht, die eine Site pro Content-Typ deklariert (content.types.<type>.facets) — eigene Frontmatter-Keys, deren Werte zu filterbaren Metadaten werden:
{
"query": "OpenAPI request schemas",
"contentTypes": ["rfc"],
"filters": { "domain": "architecture", "status": "enforced" }
}
Jeder filters-Eintrag muss zutreffen (Ergebnisse führen ihre Facettenwerte mit, und list_pages zeigt sie für jede Seite), sodass eine Wissensdatenbank Agent-Workflows nach dem Prinzip der schrittweisen Offenlegung antreiben kann — die durchgesetzten Standards auflisten, nur innerhalb davon suchen — ganz ohne eigenen Server.
Ein Wert muss exakt so übereinstimmen, wie list_pages ihn anzeigt, inklusive Groß- und Kleinschreibung: "enforced" trifft nicht auf eine Seite zu, deren status Enforced ist. Facettenwerte sind Strings, daher wird eine Zahl oder ein Boolean in filters mit seiner String-Form abgeglichen ({"priority": 1} findet priority: 1), und ein Wert jeder anderen Form, etwa eine Liste, wird ignoriert, statt zu filtern.
Menü „Connect to MCP“
Die Seitenaktion Connect to MCP kopiert die URL des Servers und listet danach die Clients auf, in die sie den Server installiert: Befehle zum Kopieren für Claude Code und Codex sowie Installationslinks für Cursor und VS Code. Mit clients wählst du sie aus. true (der Standard) listet jeden eingebauten Client auf, false keinen, sodass nur Copy server URL im Menü bleibt, und eine Liste zeigt die von dir genannten Clients in der angegebenen Reihenfolge, mit einer Trennlinie zwischen den Befehlen und den Links.
Einen Client, den Blume nicht mitliefert, gibst du als Objekt mit einem label und dem zu kopierenden command an. {name} im Befehl wird zum Namen des Servers als ID: name oder der Site-Titel, in Kleinbuchstaben umgewandelt, wobei jede Folge von Zeichen außer a–z und 0–9 zu einem Bindestrich wird und die Enden bereinigt werden (docs, falls nichts übrig bleibt). {url} wird zur URL des Servers. Auf einer mehrsprachigen Site kann label eine Map von Locale-Code zu Text sein. icon akzeptiert den Namen eines eingebauten Icons, einen Bildpfad bzw. eine Bild-URL oder ein Inline-SVG und ist standardmäßig terminal.
agents: {
mcp: {
enabled: true,
clients: [
"claude-code",
"codex",
{
label: "Copy Copilot CLI command",
command: "copilot mcp add --transport http {name} {url}",
},
"cursor",
"vscode",
],
},
}
| Key | Menüeintrag |
|---|---|
claude-code |
Kopiert den Befehl claude mcp add für Claude Code. |
codex |
Kopiert den Befehl codex mcp add für Codex. |
cursor |
Öffnet den MCP-Installationslink von Cursor. |
vscode |
Öffnet den MCP-Installationslink von VS Code. |
Server-Ausgabe erforderlich
Der MCP-Server ist ein Live-Endpunkt (/mcp) und kann daher nicht auf einem statischen Build laufen. Gib einen Host-Adapter aus blume/deploy an, um zur Server-Ausgabe zu wechseln:
import { node } from "blume/deploy"; // or vercel, netlify, cloudflare
export default defineConfig({
deployment: node({ site: "https://docs.example.com" }),
});
Ein statischer Build mit agents.mcp.enabled bricht sofort mit einer Meldung ab, die dich auffordert, einen Host-Adapter anzugeben. Die Adapter findest du unter Deployment. Nach dem Deployment verbindest du dich aus Claude Code so:
claude mcp add --transport http my-docs https://docs.example.com/mcp