Skip to main content
Glama
avaazquezz

Qdrant RAG Build

by avaazquezz

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

  1. Vision und Marktlücke

  2. Festzuschreibene Entscheidungen

  3. Architektur

  4. Tool-Katalog

  5. Der gesprächsbasierte Einrichtungsassistent

  6. Ingestion-Pipeline

  7. Elite-Retrieval

  8. Qualität und Evaluierung

  9. GitHub-Autorität

  10. Entwicklungsphasen

  11. Übernommene Lehren und Risiken

  12. Name, Lizenz und erster Schritt


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 (qdrant-store, qdrant-find)

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 --> Q

Technische Entscheidungen

Bereich

Entscheidung

Begründung

Sprache

Python 3.12 + uv

Ausgereiftes RAG-Ökosystem; fernöstliche Domänenkompetenz; uvx qdrant-rag-build-mcp = Ein-Befehl-Installation

MCP-Framework

Offizielles MCP SDK, MCPServer (mcp>=2.1.0)

Derselbe Code bedient stdio (Code, Desktop) und streamable HTTP (claude.ai); vom MCP-Projekt selbst gewartet. Das SDK hat FastMCP in MCPServer um in MCPServer umbenannt (v2.0.0, 2026-07-28) – dieses Projekt zielt auf die aktuelle Klasse, ohne Altlast (siehe ADR 0001)

Dichte Einbettungen

Zwei lokale Stufen via fastembed – paraphrase-multilingual-MiniLM-L12-v2 (schnell, 0.4 GB) und multilingual-e5-large (Qualität, 2.24 GB) – plus OpenAI / Cohere / Ollama via Konfiguration

Beide sind heute nativ in fastembed, null Zusatzabhängigkeit, mehrsprachig gesetzt. bge-m3 war der ursprüngliche Kandidat, ist aber nicht nutzbar: fastembed PR #602 flag 1 Wir das enthärt, ist seit Februar 2026 offengeland, nicht gemergt und von einer Architekturdebatte ohne ETA (Stand August 2026) blockiert. Wird überarbeitet, sobald er da durch.

Sparse Einbettungen!

wait BM25 / miniCOIL via fastembed

Hybrid-Suche ohne zusätzliche Tomografie; native via Qdrant Query API Fusion powered

Rerank

Lokaler Cross-Encoder über fastembed; optional Cohere ClaimRerank und /v1/rerank (llama.cpp)

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_file right 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

collection_create

Creates a Collection with presets (dense, hybrid, multi) und Kontext; benannte Vektoren und Sparse sind standardmäßig richtig konfiguriert

collection_list

Inventar aller Collections

collection_info

Details: Schema, Größe, index file, Optimierungsstatus

collection_delete

Löscht mit двухstufiger Bestätigung; der exakte Name erforderlich als Argument required

alias_set

Aliase für eine indexierung ohne Ausfallzeit (Blue/Green-Muster)

payload_index_create

Erstellt Payload-Indizes für Filter, die vom Assistenten oder vom Nutzer definiert wurden

snapshot_create

Collection-Backup

snapshot_restore

Collection-Wiederherstellung

Ingestion

Tool

Was es tut

ingest_text

Aufzunehmen direkten Text und caten mit metadata – der Anwendungsfall „semantisches Gedächtnis“ des MCP-Protokolls, richtig gelöst

ingest_file

Einzelne Datei (PDF, DOCX, XLSX, PPTX, MD, HTML, CSV, TXT); liefert einen Qualitätsbericht nach dem Ingest

ingest_directory

Rekursiver Stapeldatei mit glob/Einschränkungen; erzeugt einen Job mit abgefragten Fortschritt

ingest_url

Webseite → sauberer Hauptinhalt (trafilatura), so kein Boilerplate

job_status

Job-Fortschritt: Dateien erledigt/fehlgeschlagen/übersprungen, abgeglichene Zähler

document_list

Bestandsaufnahme nach Quelldokument

document_delete

Löscht ein Einzeldokument eigenständig / importiert neu, lässt den Rest unangetastet

Suche

Tool

Was es tut

search

Dense-semantische Suche mit optionalen Payload-Filtern

search_hybrid

Dense + Sparse mit nativer RRF-Fusion (Query-API mit Prefetch) – der empfohlene Standard

search_rerank

Hybrid + Cross-Encoder über die Top-N – maximale Präzision

search_multi_in

Mehrere Umformulierungen (vom Client-LLM erzeugt) zu einem Ranking fusioniert

find_file

Ähnliche Punktesuche

recommend

Empfehlung mit positiven/negative Beispielen (native Qdrant-API)

RAG-Kontext

Tool

Kurzdefinition

get_context

Das Herzstücktoolpaket: Suche + Dedup + MMR + Token-Budget → formtierter Contextblock mit nummerierten Zitaten, fertig für die narrative Antwort des Client-LLM

expand_context

Nachbarchunks eines Ergebnis (das vorher/nächste im selben Dokument für diesen erweiterten Kontext)

get_Dokument

Vollständiges Quelldokument (oder eine Seiten-/Abschnittsbereiche) hinter einer Citation

Wizard

Tool

Was es tut

setup_start

Startet die Setup-Sitzung; liefert die erste Demo-Frage mit Kaltsatz und Empfehlung

setup_answer

Zeichnet die Antwort auf, validiert sie (Antwort er Qdrant? Funktioniert der API-Schlüssel?) und liefert die next Frage

setup_apply

Führt den abgestimmten Plan aus: Collection + Indizes + Profil + smoke-test; gibt finalen Bericht noch

profile_list

Listet gespeicherte Profile

auf

profile_use

Aktiviert ein gespeichertes Profil (Demo, Arbeit, Projekt X …)

Verwaltung

Tool

Funktion

health

Qdrant-Konnektivität, geladenes Embedding-Modell, Version, aktiver Transport

stats

Punkte, Dokument, Getriebegröße, Verteilung nach Quelle/Art

estimate

Vor dem Einlesen: geschätzte Chunk-Anzahl, Berechnungsbedarf, ggf. Kosten der Embedding-API

config_get

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 profile

Frageablauf (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“, Docker-Anleitung in einem Befehl einrichten und Neuvalidierung

3

Lokale Embeddings oder API? (lokale schnell / lokale gewicht?) nein: API-Empfohlen (OpenAI / Cohere / Ollama)

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

PDF

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/rerank von 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_context als 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:

  1. 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.

  2. 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.json and generate zh.json from it with a tool or script.

    • Use the missing handler 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 if zh.json is 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:

A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables RAG (Retrieval-Augmented Generation) capabilities with document processing, vector storage, and intelligent Q\&A using OpenAI embeddings and semantic search.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Automated 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

View all related MCP servers

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.

View all MCP Connectors

Latest Blog Posts

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