Grounded Docs MCP Server: lokaler Doku-Index für Coding-Agenten
Grounded Docs MCP Server: Open-Source Alternative to Context7, Nia, and Ref.Tools
Auf einen Blick
- Was ist das?
- Der Docs MCP Server von arabold baut einen versionsgenauen Dokumentationsindex aus Websites, GitHub, npm, PyPI und lokalen Dateien und stellt ihn per MCP oder CLI bereit. Wer keine Dokumentationsinhalte an einen Fremddienst geben will, bekommt hier eine MIT-lizenzierte Alternative, muss aber die Betriebs- und Modellkosten selbst tragen.
- Für wen ist es gedacht?
- Sinnvoll ist der Docs MCP Server für Teams, die einen selbst betriebenen, versionsgenauen Doku-Index brauchen und Node.js 22 oder Docker ohnehin im Einsatz haben. Wer einen gehosteten Dienst ohne eigene Infrastruktur sucht, ist hier falsch.
- Darf ich es kommerziell nutzen?
- Ja. MIT ist eine freizügige Lizenz: Sie dürfen darauf aufbauende Software nutzen, verändern und verkaufen, solange Sie die Urheberrechts- und Lizenzhinweise beibehalten.
- Wird es noch gepflegt?
- Ja. Die letzten Commits kamen vor 17 Tagen.
- In welcher Sprache ist es geschrieben?
- Hauptsächlich TypeScript, laut der Sprachstatistik von GitHub.
Die Antworten beruhen auf den GitHub-Daten des Projekts (zuletzt abgeglichen am 15. September 2026) und auf unserer Analyse. Sie sind keine Rechtsberatung.
TIEFGEHENDE OPEN-SOURCE-ANALYSE
Welches Problem der Index adressiert
Sprachmodelle antworten über Bibliotheken häufig auf Basis veralteter Trainingsdaten. Das README benennt genau diesen Punkt: Der Server soll Halluzinationen und veraltetes Wissen reduzieren, indem er offizielle Dokumentation von Websites, GitHub, npm, PyPI und lokalen Dateien holt und dem Assistenten die Version zur Verfügung stellt, die im Projekt tatsächlich verwendet wird. Die Zielgruppe sind Entwickler, die mit MCP-fähigen Clients wie Claude, Cline, Copilot oder Windsurf arbeiten und dort Antworten zu einer konkreten Bibliotheksversion brauchen. Der zweite Adressat ist das Umfeld: Das Projekt positioniert sich als quelloffene Alternative zu Context7, Nia und Ref.Tools und betont, dass der Dienst vollständig auf der eigenen Maschine läuft und der Code das Netzwerk nicht verlässt. Für Teams mit Vorgaben zur Datenhaltung ist das der eigentliche Kaufgrund, nicht die Suchqualität.
Scrape, Index, Suche: der Ablauf im Detail
Der Weg ist dreistufig. Zuerst holt ein Scraper die Inhalte. Danach wird pro Quelle ein benannter Index angelegt, im Beispiel heißt er react. Die Suche läuft gegen diesen Index, nicht gegen das offene Web. Das erklärt, warum die Qualität der Antwort an der Qualität des Scrapings hängt und nicht nur am Modell.
Beim Scraping gibt es zwei dokumentierte Sonderfälle. Erstens prüft der Scraper vor dem normalen Crawling, ob unter dem Dokumentations-Unterpfad oder im Site-Root eine llms.txt liegt. Wird sie gefunden, dienen die kuratierten Links als zusätzliche Crawl-Seeds, und auf diesem Weg entdeckte Seiten bevorzugen .md-Varianten wie /guide/index.html.md, bevor sie auf die Originalseite zurückfallen. Zweitens senden Web-Anfragen standardmäßig den Header Accept: text/markdown, text/html;q=0.9, */*;q=0.8. Server mit Markdown-Content-Negotiation liefern damit direkt Markdown statt HTML. Beide Mechanismen zusammen sind der interessanteste Teil des Projekts, weil sie den Umweg über HTML-Parsing für einen Teil der Seiten einsparen.
Für hash-basierte Single-Page-Anwendungen existiert ein eigener Schalter. Wird preserveHashes aktiviert und steht der Scrape-Modus auf fetch, stuft der Scraper den Job laut README automatisch auf Playwright hoch, weil ein einfacher Abruf clientseitige Hash-Routen nicht auswerten kann. Der Refresh übernimmt die gespeicherte Einstellung, CLI und Web-Oberfläche können sie überschreiben. Die Dokumentation warnt ausdrücklich davor, den Schalter allgemein einzuschalten: Normale Seiten nutzen Hash-Fragmente für Anker innerhalb einer Seite, nicht für Routing.
Zwei Betriebsarten: CLI und MCP-Server
Für Agenten und Skripte empfiehlt das README den CLI-Weg. Ein Index entsteht mit npx @arabold/docs-mcp-server@latest scrape react https://react.dev/reference/react, abgefragt wird er mit search react "useEffect cleanup" --output yaml. Einzelne Seiten lassen sich mit fetch-url direkt in Markdown umwandeln. Für hash-geroutete Seiten ergänzt man --preserve-hashes.
Das Ausgabeverhalten ist für Skripte relevant: Strukturierte Befehle schreiben im nicht-interaktiven Lauf sauberes JSON nach stdout, das Format lässt sich über --output json|yaml|toon wählen. Textbefehle wie fetch-url behalten ihre Textausgabe auf stdout. Diagnosemeldungen laufen über einen gemeinsamen Logger und bleiben im nicht-interaktiven Betrieb von stdout fern, was Parsing-Fehler vermeidet. --quiet unterdrückt alles außer Fehlern, --verbose schaltet Debug-Ausgaben ein.
Für einen dauerhaft laufenden Endpunkt startet man npx @arabold/docs-mcp-server@latest ohne Unterbefehl und öffnet die Web-Oberfläche unter http://localhost:6280, um Dokumentation hinzuzufügen. Der Client wird dann per SSE angebunden, in der Claude-Konfiguration etwa mit type sse und url http://localhost:6280/sse. Alternativ läuft derselbe Dienst als Container: docker run mit den Volumes docs-mcp-data und docs-mcp-config auf den Ports 6280 und den Parametern --protocol http --host 0.0.0.0 --port 6280. Die Trennung von Daten- und Konfigurations-Volume ist hier wichtig, weil ein Update sonst den aufgebauten Index mitnimmt.
Formate und der Preis der Vollständigkeit
Die Liste der unterstützten Formate ist lang: PDF, Word, Excel, PowerPoint, OpenDocument, RTF, EPUB, FictionBook, Jupyter Notebooks, dazu ZIP und TAR mit gzip, die einzeln entpackt und verarbeitet werden, HTML, Markdown, MDX, reStructuredText, AsciiDoc, Org Mode, Textile, R Markdown, über 90 Programmiersprachen sowie Daten- und Konfigurationsformate von JSON bis Dockerfile und Terraform. Diese Breite ist ein Alleinstellungsmerkmal gegenüber Werkzeugen, die nur Webseiten oder nur Repositories lesen.
Sie ist zugleich eine Betriebslast. Jedes zusätzliche Format bringt eigene Parser und eigene Fehlerquellen mit. Ein schlecht extrahiertes PDF liefert dem Modell Text, der wie Dokumentation aussieht, aber keine ist. Wer den Index produktiv nutzt, sollte deshalb stichprobenartig prüfen, was nach dem Scraping tatsächlich im Index landet, statt sich auf die Formatliste zu verlassen. Die Formatübersicht im Repository nennt MIME-Typen und Verarbeitungsdetails, ersetzt aber keine Kontrolle am eigenen Material.
Embeddings: empfohlen, aber nicht Bedingung
Das README bezeichnet ein Embedding-Modell als optional, aber als deutliche Verbesserung der Suchqualität, weil es semantische Vektorsuche ermöglicht. Ohne Modell bleibt vermutlich die lexikalische Suche, deren Trefferqualität bei umformulierten Fragen abfällt. Aktiviert wird OpenAI im einfachsten Fall über die Umgebungsvariable OPENAI_API_KEY beim Start. Für Ollama, Gemini und Azure verweist das Projekt auf einen eigenen Leitfaden.
Das ist die wichtigste architektonische Entscheidung für Betreiber. Mit lokalem Ollama bleibt die Verarbeitung im eigenen Netz, was zum Datenschutzargument des Projekts passt. Mit einem gehosteten Anbieter wandern die Doku-Fragmente zum Embedding-Anbieter, auch wenn der Server selbst lokal läuft. Die Aussage, der Code verlasse das Netzwerk nicht, gilt also nur für die Standardkonfiguration ohne externen Embedding-Dienst. Wer den Satz als Zusage liest, sollte die eigene Konfiguration prüfen, bevor er sich darauf beruft.
Wo der Ansatz an Grenzen stößt
Der Server ist kein Ersatz für eine gepflegte Dokumentationsquelle. Er indexiert, was erreichbar ist, und übernimmt deren Struktur. Ändert sich die Website, ändert sich der Index, und ein Refresh ist nötig, weil der Server von sich aus nichts nachlädt. Wer viele kleine Bibliotheken einbindet, sammelt entsprechend viele Indizes und deren Aktualisierungsaufwand an.
Ein zweiter Punkt ist die Umgebungsbindung. Der CLI-Weg setzt Node.js 22 oder neuer voraus, was auf älteren Build-Agenten zum Ausschlusskriterium wird. Der Serverbetrieb bindet einen Port, im Beispiel 6280, und braucht je nach Umfang nennenswerten Speicherplatz für den Index. Für eine einmalige Frage zu einer einzelnen Funktion ist der Aufbau eines Index unverhältnismäßig; dafür genügt fetch-url. Und für Teams, die keinen eigenen Dienst betreiben wollen, ist ein gehosteter Anbieter schlicht die passendere Wahl, unabhängig von der Lizenz.
Dass das Projekt keine Angaben zu Laufzeiten oder Trefferquoten im README macht, ist kein Mangel, sondern eine Einladung: Das Repository liefert einen Leitfaden zum Benchmarking mit IR-Metriken und LLM-bewerteten Scores. Wer die Suchqualität beurteilen will, muss diese Messung selbst durchführen.
Alternative und was der Unterschied im Alltag bedeutet
Die naheliegende Alternative ist ein gehosteter Dokumentationsdienst wie Context7, Nia oder Ref.Tools. Der Unterschied liegt nicht in der Suchtechnik, sondern im Betriebsmodell. Gehostete Dienste pflegen die Indexierung zentral, der Nutzer zahlt mit einem Abonnement und überlässt die Anfragen dem Anbieter. Der Docs MCP Server dreht das um: Der Nutzer wählt die Quellen, betreibt den Dienst, bezahlt Speicher und gegebenenfalls Embedding-Tokens und trägt die Aktualisierung. Dafür kann er Dokumentation indexieren, die öffentlich nicht verfügbar ist, etwa lokale Ordner, ZIP-Archive oder ein internes Repository.
Eine zweite Abgrenzung ergibt sich zu reinen Web-Scrape-Werkzeugen, die eine Seite in Markdown umwandeln. fetch-url deckt diesen Fall ab, aber der eigentliche Wert des Projekts liegt im persistenten, benannten Index, gegen den ein Agent wiederholt sucht. Wer nur gelegentlich eine Seite zitieren will, braucht den Index nicht.
Pflegeaufwand, Lizenz und was vor dem Einsatz zu klären ist
Das Projekt steht unter der MIT-Lizenz, was kommerzielle Nutzung und Änderungen erlaubt, solange Lizenz- und Urheberrechtshinweis erhalten bleiben. Es gibt keine Copyleft-Pflicht und keine Klausel, die den Betrieb als Dienst einschränkt. Rechtlich verbindlich ist der Lizenztext selbst, nicht diese Zusammenfassung.
Die Wartungslage lässt sich an den Releases ablesen: v3.0.0 im August 2026, danach v3.0.1 und v3.1.0 innerhalb von drei Wochen. Drei Minor- und Patch-Versionen in diesem Abstand bedeuten, dass sich Schnittstellen und Verhalten zwischen Versionen bewegen können. Wer den Server in eine Agenten-Kette einbaut, sollte die Version festnageln, statt @latest zu verwenden, und beim Upgrade die Release Notes lesen. Die Volumes docs-mcp-data und docs-mcp-config gehören ins Backup, weil ein Neuaufbau des Index Zeit und bei gehosteten Embeddings Geld kostet.
Vor dem Rollout sind drei Dinge zu prüfen: ob die eigene Umgebung Node.js 22 erfüllt oder Docker bereitsteht, ob der Embedding-Anbieter lokal oder extern betrieben wird, und wie gut die Suche auf der eigenen Dokumentation tatsächlich trifft. Für den letzten Punkt liefert das Repository den Benchmark-Leitfaden mit IR-Metriken und LLM-bewerteten Scores; das ist der einzige belastbare Weg, die Qualität vor der Entscheidung zu beurteilen.
Redaktionelles Fazit
Sinnvoll ist der Docs MCP Server für Teams, die einen selbst betriebenen, versionsgenauen Doku-Index brauchen und Node.js 22 oder Docker ohnehin im Einsatz haben. Wer einen gehosteten Dienst ohne eigene Infrastruktur sucht, ist hier falsch. Vor dem Rollout sollte man mit dem Befehl aus dem Benchmark-Leitfaden die Retrieval-Qualität auf der eigenen Dokumentation messen, einmal mit und einmal ohne Embedding-Modell, und erst danach entscheiden, ob der Index in den Agenten-Workflow wandert.
Community-Notizen