Qdrant RAG Build
Qdrant RAG Build
Der Qdrant-MCP-Server, der eine vollständige RAG-Pipeline im Gespräch aufbaut.
Inoffiziell, von der Community gebaut — nicht mit Qdrant verbunden und nicht von Qdrant unterstützt.
Der offizielle Qdrant-MCP-Server stellt 2 Tools bereit (qdrant-store, qdrant-find). Qdrant RAG Build stellt 33 Tools in 6 Namespaces bereit – ein produktionsreifes RAG-System, das vollständig über eine MCP-Konversation verwaltet wird – plus einen gesprächsbasierten Einrichtungsassistenten, der einen Benutzer in einem einzigen Chat von null auf eine funktionierende, gut konfigurierte RAG-Collection bringt, ganz ohne Dokumentation.
Elevator Pitch: „Verbinde deine KI mit Qdrant und lass ein produktionsreifes RAG in einem einzigen Gespräch laufen." Nicht etwa ein weiterer Qdrant-Wrapper — RAG-in-a-Box per MCP.
Paket: qdrant-rag-build-mcp · Lizenz: Apache-2.0 · Status: Planung abgeschlossen, Implementierung nicht begonnen.
Inhaltsverzeichnis
Related MCP server: RAG Knowledge Base MCP Server
1. Vision und Marktlücke
These: Heute bekommst du, wenn du eine LLM per MCP mit Qdrant Freunde verbindest, ein semantisches Spielzeuggedächtnis. Keine Collection-Verwaltung, keine Datei-Erfassung, keine hybride Suche, kein Reranking, keine Zitate, keine geführte Konfiguration. All das existiert in maßgeschneiderten Enterprise-RAG-Systemen — aber niemand hat es als MCP-Server Map verpackt, den man in einem einzigen Befehl installiert.
Fähigkeit | Offizieller Qdrant-MCP | Qdrant RAG Build |
Tools | 2 ( | 33, organisiert in 6 Namespaces |
Collection-Verwaltung | Nur implizites Auto-Erstellen | Erstellen mit Presets, Aliassen, Snapshots, Payload-Indizes |
Datei-Erfassung | Nein — nur Rohtext | PDF, DOCX, XLSX, PPTX, MD, HTML, CSV, TXT, URL, Verzeichnisse |
Chunking | Nein | Strukturell, formatspezifisch, mit konfigurierbaren Presets |
Suche | Einfache dichte Suche | DichteSS + sparse Suche mit RRF-Fusion, Filtern, Reranking, MMR, Multi-Query |
Zitate | Nein | Stabiler Zitiervertrag (Dokument, Seite/Abschnitt, Score) |
Geführte Einrichtung | Umgebungsvariablen | Gesprächsbasierter Assistent, der alles einrichtet |
Clients | stdio (lokales Claude) | stdio + Remote-HTTP — Claude Code, Claude Desktop und claude.ai (v1); ChatGPT ist v2 |
2. Festgeschreibene Entscheidungen
Umfang. Vollständiges Retrieval + Qdrant-Engine Management + hochwertige Verarbeitung gängiger Formate (PDF, DOCX, Excel, PPTX, MD, HTML, CSV, URL). Sauberer, RAG-optimaler Inhalt ist das Markenzeichen des Projekts.
Ziel-Clients. V1 ist die gesamte Claude-Familie: Claude Code, Claude Desktop und claude.ai (Web). Code und Desktop sind stdio, lokal und nahezu eine One-Click-Installation (§3). claude.ai benötigt aus Protokollaussicherheitsgründen Remote-HTTP (ein Browser kann keinen lokalen Prozess starten) – das ist jedoch eine überschaubare Ergänzung, keine neue Kategorie: Das offizielle SDK spricht bereits streamable HTTP, und v1 benötigt nur ein Bearer-Token, kein vollständiges OAuth 2.1 (§3), plus einen Deployment-Guide, um eine öffentliche HTTPS-URL zu erreichen. ChatGPT bleibt außerhalb von v1. Im Gegensatz zu claude.ai erfordert es Developer Mode (eine zwingende Risikoanzeige, die zu akzeptieren ist) und einen Premium-Plan ganz ohne click-free Stufe – Reibung, die dem Ziel „ClCentrate" nicht dient, daher auf v2 verschoben.
Ziel. Ein herausragendes Open-Source-Werkzeug: Portfolio-Herzstück und GitHub-Autoritätsmaschine. Der Qualität von Dokumentation, CI und Entwicklererfahrung sind nicht optional – sie sind das Produkt.
Nicht im Umfang (v1). PST/E-Mail-Ingestion, schwerer OCR, NER/Entity-Extraction, server-seitige LLM-Generierung (der Client ist das LLM), eine eigene UI. Jeder Aus8 ist in §11 begründet.
3. Architektur
Ein Python-Paket, drei saubere Schichten. Der MCP-Server ist eine dünne Fassade; die gesamte Logik lebt in einem testbaren Kern ohne MCP-Abhängigkeit (was ohne jede Anpassung eine spätere CLI oder ein SDK ermöglicht).
flowchart LR
subgraph Clients
CC[Claude Code / Desktop<br/>stdio]
WEB[claude.ai<br/>HTTPS + bearer token]
end
subgraph QRB["Qdrant RAG Build"]
T[Transport<br/>stdio · streamable HTTP]
F[MCP facade<br/>33 tools · validation]
CORE[RAG core<br/>ingestion · retrieval · wizard]
EMB[Embeddings<br/>local fastembed · external APIs]
end
Q[(Qdrant<br/>local · cloud)]
CC --> T
WEB --> T
T --> F --> CORE
CORE --> EMB
CORE --> QTechnische Entscheidungen
Bereich | Entscheidung | Begründung |
Sprache | Python 3.12 + | Ausgereiftes RAG-Ökosystem; fernöstliche Domänenkompetenz; |
MCP-Framework | Offizielles MCP SDK, | Derselbe Code bedient stdio (Code, Desktop) und streamable HTTP (claude.ai); vom MCP-Projekt selbst gewartet. Das SDK hat |
Dichte Einbettungen | Zwei lokale Stufen via fastembed – | Beide sind heute nativ in fastembed, null Zusatzabhängigkeit, mehrsprachig gesetzt. |
Sparse Einbettungen! | wait BM25 / miniCOIL via fastembed | Hybrid-Suche ohne zusätzliche Tomografie; native via Qdrant Query API Fusion powered |
Rerank | Lokaler |
MCP verbindet einen Server nicht abstrakt „mit der KI“ – es verbindet ihn mit der Client-Anwendung, die das Modell beherbergt (Claude Desktop, Claude Code, claude.ai). Dieser Client hält die Verbindung aufrecht, übergibt dem Modell die Liste der verfügbaren Tools, fängt die Tool-Aufruf-Entscheidungen des Modells ab und führt sie gegen den Server aus. Für Nutzer liest sich das als „Ich spreche mit Claude und es verwaltet mein Qdrant“ – eine berechtigte Vereinfachung –, aber tatsächlich ist der Client mit dem Server verbunden, nicht das Modell.
Im Umfang von v1 gibt es keinen gemeinschaftlichen/Multi-Tenant-Server. Jeder Benutzer betreibt seinen eigenen Server, und derselbe lokale Prozess bedient alle drei v1-Clients:
Claude Code / Claude Desktop: Der Server läuft als lokaler Stdio-Kindprozess auf dem eigenen Rechner des Benutzers und wird vom Client aus dessen Konfiguration heraus startet. Echter Dateisystemzugriff, beschränkt auf per Allowlist freigegebene Verzeichnisse – Standard-MCP-stdio-Verhalten, nichts, was dieses Projekt erst noch bauen müsste.
claude.ai: Derselbe lokale Prozess, über HTTPS durch einen Tunnel (
cloudflared) oder über einen kleinen, permanent laufenden Host (ein $5 (VPS, Fly.io, Railway) erreichbar, der dasselbe Docker-Image ausführt – keine separate Cloud-Deployment und kein gemeinsamer Server. Der Dateisystemzugriff ist mit dem lokalen Fall identisch, wenn es sich um den eigenen getunnelten Rechner handelt; allein der Transport dorthin unterscheidet sich. Verfügbar in jedem claude.ai-Tarif, einschließlich Free (ein Connector).Konsequenz:
ingest_directory/ingest_fileright verhalten sich bei allen drei Clients gleich, solange der eigene Server des Benutzers (und bei claude.ai der Tunnel) läuft. Keinerlei Datei-Upload-Mechanismus nötig – der Server hat durch Konstruktionsweise immer direkten Dateisystemzugriff.Installation, einmalig:
Claude Desktop: eine
.mcpb-Datei in Einstellungen → Erweiterungen ziehen. Kein Terminal nötig.Claude Code:
claude mcp add qdrant-rag-build -- uvx qdrant-rag-build-mcp. Eine Zeile.claude.ai: Einstellungen → Connectors → Hinzufügen, die HTTPS-URL des Servers und das Bearer-Token einfügen. Der Server (und ggfs. Tunnel, wenn du das Laptop-Rezept nutzt) muss dabei zuerst laufen – das ist genauso bei jedem Remote-MCP-Connector protokollbedingt und keine aus freien Stücken getroffene Entscheidung dieses Projekts.
Von da an macht der Assistent das Konfigurieren des RAG vollständig gesprächsbasiert – Collections anlegen, Embeddings wählen, Dokumente erfassen, Suchen –, ganz ohne weitere technische Schritte, und zwar auf allen drei Clients.
v2: ChatGPT (absichtlich noch nicht)
ChatGPT benötigt dieselbe Remote-HTTP-Struktur wie claude.ai – technisch ist daran nichts Neues. Was es bewusst aus v1 heraushält, ist eine ChatGPT-spezifische Hürde: Developer Mode muss explizit aktiviert werden (mit einer Warnung über die Ausführung von Drittanbieter-Code), und benutzerdefinierte Connectors erfordern einen bezahlten Plan (Plus/Pro/Business/Enterprise/Edu) – es gibt keinerlei kostenfreien ChatGPT-Pfad, anders als bei den kostenlos inkludierten conncatoren von claude.ai. Nichts davon unterstützt das Ziel „Claude priorisieren“. v2 ergänzt einen ChatGPT-spezifischen Connector-Leitfaden und geprüft, falls relevant, erneut die volle OAuth-2.1-Unterstützung (ChatGPT lean more strongly than claude.ai) mehr darauf than.
4. Tool-Katalog
Das Herzstück of the Projekts. Sechs Namespaces, vorhersehbare Namen, Beschreibungen, die für das LLM geschrieben sind (wann ein Tool verwendet werden soll, nicht nur was es tut). Jedes destruktive Tool verlangt eine ausdrückliche Bestätigung, außerdem existiert ein globaler Modus read-only.
Collections
Tool | Was es tut | |
| Creates a Collection with presets (dense, hybrid, multi) und Kontext; benannte Vektoren und Sparse sind standardmäßig richtig konfiguriert | |
| Inventar aller Collections | |
| Details: Schema, Größe, index file, Optimierungsstatus | |
| Löscht mit двухstufiger Bestätigung; der exakte Name erforderlich als Argument required | |
| Aliase für eine indexierung ohne Ausfallzeit (Blue/Green-Muster) | |
| Erstellt Payload-Indizes für Filter, die vom Assistenten oder vom Nutzer definiert wurden | |
| Collection-Backup | |
| Collection-Wiederherstellung |
Ingestion
Tool | Was es tut |
| Aufzunehmen direkten Text und caten mit metadata – der Anwendungsfall „semantisches Gedächtnis“ des MCP-Protokolls, richtig gelöst |
| Einzelne Datei (PDF, DOCX, XLSX, PPTX, MD, HTML, CSV, TXT); liefert einen Qualitätsbericht nach dem Ingest |
| Rekursiver Stapeldatei mit glob/Einschränkungen; erzeugt einen Job mit abgefragten Fortschritt |
| Webseite → sauberer Hauptinhalt (trafilatura), so kein Boilerplate |
| Job-Fortschritt: Dateien erledigt/fehlgeschlagen/übersprungen, abgeglichene Zähler |
| Bestandsaufnahme nach Quelldokument |
| Löscht ein Einzeldokument eigenständig / importiert neu, lässt den Rest unangetastet |
Suche
Tool | Was es tut |
| Dense-semantische Suche mit optionalen Payload-Filtern |
| Dense + Sparse mit nativer RRF-Fusion (Query-API mit Prefetch) – der empfohlene Standard |
| Hybrid + Cross-Encoder über die Top-N – maximale Präzision |
| Mehrere Umformulierungen (vom Client-LLM erzeugt) zu einem Ranking fusioniert |
| Ähnliche Punktesuche |
| Empfehlung mit positiven/negative Beispielen (native Qdrant-API) |
RAG-Kontext
Tool | Kurzdefinition |
| Das Herzstücktoolpaket: Suche + Dedup + MMR + Token-Budget → formtierter Contextblock mit nummerierten Zitaten, fertig für die narrative Antwort des Client-LLM |
| Nachbarchunks eines Ergebnis (das vorher/nächste im selben Dokument für diesen erweiterten Kontext) |
| Vollständiges Quelldokument (oder eine Seiten-/Abschnittsbereiche) hinter einer Citation |
Wizard
Tool | Was es tut |
| Startet die Setup-Sitzung; liefert die erste Demo-Frage mit Kaltsatz und Empfehlung |
| Zeichnet die Antwort auf, validiert sie (Antwort er Qdrant? Funktioniert der API-Schlüssel?) und liefert die next Frage |
| Führt den abgestimmten Plan aus: Collection + Indizes + Profil + |
| Listet gespeicherte Profile |
auf | |
| Aktiviert ein gespeichertes Profil (Demo, Arbeit, Projekt X …) |
Verwaltung
Tool | Funktion |
| Qdrant-Konnektivität, geladenes Embedding-Modell, Version, aktiver Transport |
| Punkte, Dokument, Getriebegröße, Verteilung nach Quelle/Art |
| Vor dem Einlesen: geschätzte Chunk-Anzahl, Berechnungsbedarf, ggf. Kosten der Embedding-API |
| Effektive Konfiguration des aktiven Profils (Secrets maskiert) |
5. Der gesprächsbasierte Assistent
Das Unterscheidungsmerkmal. Auf dem Server läuft eine Zustandsmaschine: Jede Tool-Call liefert die nächste Frage samt Optionen und einer abgewogenen Empfehlung zurück; das LLM des Clients gibt sie an den Nutzer in natürlicher Sprache weiter und übermittelt die Antwort zurück. Kein weiteres Nachfragen, keine Abhängigkeit von irgendeinem bestimmten Client – die Konversation ist die Schnittstelle.
stateDiagram-v2
direction LR
[*] --> Discover
Discover --> Validate : setup_answer
Validate --> Discover : next question
Validate --> Summary : all answered
Summary --> Apply : user confirms
Apply --> SmokeTest
SmokeTest --> [*] : report + saved profileFrageablauf (feste Reihenfolge, Empfehlung bei jedem Schritt)
# | Frage | Was festgelegt wird |
1 | Was führt du in das RAG ein? (persönliche Dokumente / Team-Wiki / Technonn / Notizen) | Chunking-Preset und Payload-Schema |
2 | Wo läuft dein Qdrant? (lokal per Docker / Qdrant Cloud / nixcht vorhanden) | Verbindung; falls „noch nicht vorhanden“, |
3 | Lokale Embeddings oder API? (lokale schnell / lokale gewicht?) nein: API-Empfohlen ( | Dense-Anbieter und Geschwindigkeits-/Qualitätsstufe; API-Key wird, wenn nötig, direkt validiert |
4 | Korpussprache(n)? | Bestätigt die Wahl des mehrsprachigen Modells und Sparse-Analyzers |
5 | Hybride Suche? (empfohlen: eingeschaltet) | Sparse-Vektor im Schema der Collection |
6 | Re-Rank? (lokal / API / nein) | Cross-Encoder und dessen Falltierkosten, ehrlich dargestellt |
7 | Welche Filter werden verwendet? (Datum, Autor, Typ, Ordner …) | Default payload-Indizes, die automatisch angelegt werden |
8 | Name von Collection und Profil | Name und Profildatei |
Erfolgskriterium des Assistenten. Ein Benutzer, der Qdrant noch nie gesehen hat, bekommt in einem Gespräch unter 10 Minuten: eine sauber schematisierte Collection, funktionierende Embeddings, case cooled if local? … ein gespeichertes Profil, ein Beispiel-Dokument (ingested) und eine Testsuchen, die Ergebnisse mit Zitaten liefert. Der Abschlussbericht des
smoke-Tests ist der Beleg – and a recording of it is the cover of the README.
6. Ingestions-Pipeline
Qualitätsmerkmal: sauberer, RAG-optimierter Inhalt, pro Format, mit Ingestionsbericht über jeden Inschub. Nie einfach das nehmen, was der Parser higher spuckt.
Format | Parser | Qualitätsbehandlung |
PyMuPDF | Korrekte Lesereihenfolge, Erkennung und Entfernung wiederholter Kopf-/Fußzeilen, Tabellen in Markdown konvertiert, Qualitätsvorprüfung des Texts (Anteil gültiger Zeichen), bevor eine Seite übernommen wird | |
DOCX | python-docx | Überschriftenhierarchie als Metadaten-Breadcrumb erhalten; strukturierte Listen und Tabellen |
XLSX | openpyxl | Pro Blatt; Datenbereiche erkannt; Zeilen mit ihren Kopfzeilen serialisiert („Produkt: X · Preis: Y“) – niemals rohes CSV |
PPTX | python-pptx | Pro Folie: Titel + Textkörper + Sprechernotizen |
MD / HTML | native / trafilatura | Nach Überschriften zerlegt (chunked); bei Webseiten nur Hauptinhalt (keine Navigation, keine Cookies, keine Fußzeilen) |
CSV / TXT | stdlib | CSV als Zeilen mit Kopfzeilen-Labels; TXT nach Absätzen mit Token-Fenster |
Querschnittsregeln
Struktur zuerst, Tokens zweit. Zuerst entlang der Dokumentstruktur (Abschnitt, Blatt, Folie) schneiden und nur dann nach Token-Budget (mit Überlappung) unterteilen, wenn eine Einheit es überschreitet. Jeder Chunk trägt einen Breadcrumb („Anleitung › Kapitel 3 › Installation“).
Deduplizierung über normalisierten Inhalts-Hash auf Chunk-Ebene plus dokumentbezogene Idempotenz: Ein erneutes Einlesen einer Datei aktualisiert sie, dupliziert sie aber nie.
Minimaler, versionierter Zitationsvertrag. Das Zitationspayload (Dokument, Seite/Abschnitt, Datum, Quelle) ist eine geschlossene Feldmenge. Inhalte der internen Pipeline erreichen nie den LLM-Kontext – dieses Projekt hat den Bug, bei dem Metadatenbloat die tatsächlichen Quellen abschnitt, an zwei bezahlt (§11).
Ingestionsergebnisse immer melden. Erzeugte Chunks, aus Qualitätsgründen verworfene Seiten und warum, erkannte Duplikte. Transparenz ist Teil der Qualität.
Textbereinigung (Ersatzzeichen, Steuerzeichen, defekte Kodierungen) vor dem Einbetten – auf die harte Tour aus echten PST-Dateien gelernt.
7. Elite-Retrieval
Hybrid by default: Dense (multilinguale Embeddings) + Sparse (BM25/miniCOIL) mit nativer RR-Fusion über die Qdrant Query API (Prefetch + Fusion) – keine zusätzliche Infrastruktur.
Optionaler Rerank mit einem Cross-Encoder von Top-50 → Top-N. Lokal via Fastembed oder API (Cohere,
/v1/rerankvon llama.cpp).MMR für Vielfalt, unter Wiederverwendung der Vektoren, die Qdrant bereits zurückgibt (
with_vectors=true). Beim Retrieval niemals neu embedden – dieser Fehler verursachte beim Vorgänger dieses Projekts einen echten Produktionsabsturz.First-Class-Payload-Filter: Datum (sauber begrenzte Rückwertsbereiche, einschließlich Tagesende bei
lte), Quelle, Typ, Autor – über Indizes, die der Wizard anlegt.get_contextals Flaggschiff-Tool: Orchestert Hybrid → Rerank → MMR → Token-Budget → formatierten Block mit nummerierten Zitaten [1][2]. Harte Garantie: Nur was tatsächlich in den Kontext gelangt, wird zitiert – niemals Phantom-Zitate.Die Generierung bleibt beim Client. Der Server ruft sekundär kein Service dir.
and the current locale is zh, Vue I18n will either display the key itself (boutiqueLabel) or fall back to a configured locale — it depends on your fallbackLocale setting.
So, two possibilities:
The per-locale key is intentional. Maybe the message is semantically tied to a culture, product feature, or legal snippet, and you know it only belongs in the English UI. That's valid — but make sure you're not just forgetting to add the key to
zh.json.The key should exist everywhere, but you don't want to maintain it by hand. Then you need a single source of truth. Options:
Create a canonical
en.jsonand generatezh.jsonfrom it with a tool or script.Use the
missinghandler in Vue I18n to flag missing keys in development.Add a CI validation step that checks that both files have identical key paths — this catches drift early without forcing per-locale files to start out identical.
Use
fallbackLocale: 'en'so that, even ifzh.jsonis missing a key, the English version shows instead of the raw key.
For the workflow you mentioned:
"Update both files upon every change"
If your convention is always update both, you can enforce it by running a small script:
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables RAG (Retrieval-Augmented Generation) capabilities with document processing, vector storage, and intelligent Q\&A using OpenAI embeddings and semantic search.
- FlicenseNot gradedqualityCmaintenanceEnables searching a knowledge base and asking grounded questions with hybrid retrieval, reranking, and cited answers.
- AlicenseNot gradedqualityCmaintenanceAutomated RAG pipeline optimization and serving. It interviews users, builds and evaluates candidate configurations on their data, and registers the best ones as a fleet queryable via MCP.MIT
- FlicenseNot gradedqualityCmaintenanceEnables document Q&A and knowledge retrieval through hybrid semantic and keyword search, with tools for document ingestion, chunking, summarization, PII redaction, and RAGAS-based evaluation.
Related MCP Connectors
Search your knowledge bases from any AI assistant using hybrid RAG.
A personal RAG database you build from chat, so AI creates work that sounds like you.
Long-term memory for AI assistants. Hybrid retrieval, query expansion, auto-topics.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/avaazquezz/RAG-Build'
If you have feedback or need assistance with the MCP directory API, please join our Discord server