Skip to main content
Glama

🔌 MCP Docs Assistant

Produktionsreife Retrieval-Augmented-Generation-Pipeline (RAG) über der offiziellen Model Context Protocol-Dokumentation — bereitgestellt über REST, MCP-Tools und Docker.

Stellen Sie natürlichsprachliche Fragen zu MCP (Architektur, Aufbau von Servern/Clients, Tools/Ressourcen/Prompts, Sicherheit) und erhalten Sie Antworten, die in der echten Dokumentation verankert sind — mit Guardrails, PII-Maskierung, Reranking, semantischem Cache und eingebauter Halluzinationsprüfung.


✨ Features

Fähigkeit

Implementierung

🔀 Multi-Key-LLM-Gateway

Von Portkey geroutet, lastverteilt über 2 Gemini-Keys + 2 Groq-Keys, mit automatischem Provider-Fallback

📚 Quellenbasiertes Retrieval

Offizielle MCP-Dokumentation, in Chunks zerlegt und in einen persistenten Qdrant-Vektorstore eingebettet

🎯 Reranking

Ein Cross-Encoder (ms-marco-MiniLM-L-6-v2) grenzt einen großen Kandidatenpool auf die relevantesten Chunks ein

🛡️ Guardrails

NeMo Guardrails (Colang 2.x) — Sicherheitsprüfungen von Ein-/Ausgabe, Erkennung von Jailbreak und Instruction-Leaks

🕵️ PII-Maskierung

Microsoft Presidio — maskiert E-Mails, Telefonnummern und Kreditkarten in Eingabe und Ausgabe

🧮 Token-Budgetierung

Der abgerufene Kontext wird vor dem Aufruf des LLM greedy an ein festes Token-Budget angepasst

Semantischer Cache

Embedding-Ähnlichkeits-Cache (kein Exact-Match) mit TTL und Größenlimit

💬 Multi-Turn-Konversationen

LangGraph-Checkpointer + Kondensation von Folgefragen („zeig mir dafür ein Python-Beispiel“)

🔍 Halluzinationsprüfung

Laufzeit-LLM-as-Judge-Urteil (GROUNDED / HALLUCINATED) für jede erzeugte Antwort

📊 Offline-Auswertung

RAGAS-Metriken (Faithfulness, Relevanz, Kontext-Präzision/Recall) gegen 25 Referenz-Frage-Antwort-Paare

🔌 MCP-nativ

Stellt sich selbst als MCP-Tools bereit (ask_mcp_docs, search_mcp_docs, … ) — nutzbar direkt aus Claude Desktop, Claude Code oder jedem anderen MCP-Host

🌐 REST-API

FastAPI-Endpunkte für jeden normalen HTTP-Client

🐳 Dockerisiert

Deployment mit einem Befehl via docker-compose.yaml up


Related MCP server: FusionPact MCP Server

🏗️ Architektur

flowchart TD
    A[User Question] --> B[Guard Input<br/>NeMo Guardrails]
    B -->|blocked| Z[Refusal message]
    B -->|allowed| C[Mask Input PII<br/>Presidio]
    C --> D[Condense Follow-up<br/>into standalone question]
    D --> E{Semantic<br/>Cache Hit?}
    E -->|yes| F[Return cached answer]
    E -->|no| G[Retrieve Top-15<br/>Qdrant Vector Store]
    G --> H[Rerank Top-5<br/>Cross-Encoder]
    H --> I[Fit to Token Budget]
    I --> J[Generate Answer<br/>Portkey: Gemini / Groq]
    J --> K[Guard Output<br/>leak / PII pattern check]
    K --> L[Hallucination Check<br/>LLM-as-judge]
    L --> M[Mask Output PII]
    M --> N[Cache + Store History]
    N --> O[Return Answer]

Jeder obige Knoten ist ein Modul in rag_pipeline/, die zu einem LangGraph-StateGraph in rag_pipeline/graph.py verdrahtet sind. rag_core.py erstellt alle Abhängigkeiten genau einmal (als Singleton) und bietet eine kleine stabile API — chat(), search(), get_history(), cache_stats() — die von der REST-Ebene (main.py) und der MCP-Ebene (mcp_server.py) identisch genutzt wird. So werden ein gemeinsamer Vektor-Speicher / Cache / ein gemeinsamer Unterhaltungsverlauf geteilt, egal über welche Schnittstelle eine Anfrage eingeht.


📁 Projektstruktur

mcp-docs-rag-assistant/
├── main.py                    # FastAPI app — REST endpoints + mounts MCP at /mcp
├── mcp_server.py               # MCP tools (stdio standalone, or mounted in main.py)
├── rag_core.py                 # Singleton facade wiring the whole pipeline together
├── rag_pipeline/
│   ├── config.py                 # Env vars / secrets (single source of truth)
│   ├── logging_setup.py          # Logging + Logfire
│   ├── gateway.py                 # Portkey multi-key LLM gateway
│   ├── errors.py                   # Retry + safe-node error handling
│   ├── ingestion.py                 # MCP docs loader + splitter
│   ├── vectorstore.py                # Embeddings + persistent Qdrant store
│   ├── reranker.py                    # Cross-encoder reranking
│   ├── pii_masking.py                  # Presidio PII masking
│   ├── guardrails.py                    # NeMo Guardrails (Colang 2.x)
│   ├── token_management.py               # Context window budgeting
│   ├── semantic_cache.py                  # Embedding-similarity cache
│   ├── query_condensation.py               # Follow-up question rewriting
│   ├── hallucination.py                     # Runtime hallucination judge
│   └── graph.py                              # LangGraph StateGraph — full pipeline
├── scripts/
│   └── evaluate_ragas.py        # Offline RAGAS evaluation (25 reference Q&A)
├── tests/
│   └── test_pipeline.py         # Fast smoke tests (no API keys needed)
├── configs/guardrails/           # Colang rail files (generated at first run)
├── data/                          # Persisted Qdrant vector store (gitignored)
├── notebooks/                      # Original development notebook
├── Dockerfile
├── docker-compose.yml
├── requirements.txt
└── .env.example

🚀 Einrichtung

Voraussetzungen

1. Repository klonen und virtuelle Umgebung einrichten

git clone https://github.com/<your-username>/mcp-docs-rag-assistant.git
cd mcp-docs-rag-assistant
python -m venv venv
venv\Scripts\activate          # Windows
# source venv/bin/activate     # macOS/Linux

2. Abhängigkeiten installieren

pip install -r requirements.txt
python -m spacy download en_core_web_sm   # required by Presidio for PII detection

3. Umgebungsvariablen konfigurieren

cp .env.example .env

Öffnen Sie .env und tragen Sie die echten Schlüssel ein (GEMINI_API_KEY_1/2, GROQ_API_KEY_1/2, PORTKEY_API_KEY, PORTKEY_CONFIG_ID).

4. Server starten

uvicorn main:app --reload

Nur erster Lauf: Der Vektor-Speicher existiert noch nicht, also werden die MCP-Dokumentation eingelesen und in limitierten Batches eingebettet — das kann 5–10 Minuten dauern. Bei jedem weiteren Start wird der persistierte Speicher aus data/qdrant_mcp_db/ sofort geladen.

Sobald Sie Startup: RAG-Pipeline bereit. oder Startup: RAG pipeline ready. sehen, öffnen Sie:

  • http://localhost:8000/docs — interaktive Swagger-BrowseruI, POST /chat ausprobieren

  • http://localhost:8000/health — Health-Check


📡 REST-API

Methode

Endpunkt

Beschreibung

POST

/chat

Nachricht stellen. Body: {"question": "...", "thread_id": "optional"}

POST

/search

Rohkontext abrufen und reranken, keine Generierung. Body: {"query": "...", "top_n": 5}

GET

/history/{thread_id}

Verlauf für einen Thread abrufen

GET

/cache/stats

Semantic-Cache-Observability

GET

/health

Health-Check


🔌 Verwendung als MCP-Server

Standalone (stdio) — für Claude Desktop

Direkt ausführen:

python mcp_server.py

Oder einen lokalen MCP-Host auf den Server zeigen, z. . in der Konfigurationsdatei von Claude Desktop (claude_desktop_config.json):

{
  "mcpServers": {
    "mcp-docs-assistant": {
      "command": "python",
      "args": ["E:\\mcp-docs-rag-assistant\\mcp_server.py"]
    }
  }
}

Remote (streamable-http) — über FastAPI

Wenn main.py läuft, sind dieselben MCP-Tools erreichbar unter:

http://localhost:8000/mcp

Verfügbare Tools: ask_mcp_docs, search_mcp_docs, get_conversation_history, cache_stats.


🐳 Docker

Die einzige Voraussetzung ist Docker Desktop (das Docker Compose mitbringt) — Sie müssen Python, die pip-Abhängigkeiten oder das spacy-Modell nicht separat auf dem Rechner installieren. All das geschieht automatisch innerhalb des Images beim Build (siehe Dockerfile ohne Komma — es führt pip install -r requirements.txt und python -m spacy download en_core_web_sm als Build-Schritte aus).

# 1. Make sure .env exists (same as the local setup, step 3 above)
cp .env.example .env   # then fill in real keys

# 2. Build and run
docker compose up --build

Der eine Befehl baut das Image, installiert alle Abhängigkeiten darin und startet den Container. Der Ordner data/ ist als Volume eingebunden (siehe docker-compose.yml), so bleibt der Vektor-Speicher über Container-Neustarts erhalten — der langsae einzige Erstlauf-Aufwand entsteht auch mit Docker nur einmal.

Der Server ist genauso erreichbar wie beim lokalen Lauf: http://localhost:8000/docs.

Zum Stoppen:

docker compose down

Nach dem Ändern von Code oder Abhängigkeiten neu erstellen:

docker compose up --build

🧪 Tests

Schnelle Smoke-Tests — keine API-Schlüssel oder Netzwerkaufrufe nötig (nutzen Fake-Embeddings):

pip install pytest
pytest tests/ -v

📊 Offline-Evaluierung (RAGAS)

Qualifiziert die Pipeline gegen 25 handgeschriebene MCP-Fragen mit Referenzantworten, unter Verwendung von RAGAS:

python scripts/evaluate_ragas.py

Dieses Skript benötigt keinen laufenden Server — es baut die Pipeline selbst auf (derselbe Singleton wie main.py/mcp_server.py) und gibt eine Metriktabelle aus:

  • Faithfulness — ist die Antwort im abgerufenen Kontext begründet?

  • Response Relevancy — geht die Antwort wirklich auf die Frage ein?

  • Context Precision — ist der abgerufene Kontext relevant?

  • Context Recall — deckt der abgerufene Kontext ab, was die Referenzantwort braucht?

⏱️ Dauert einige Minuten: Jede der 25 Fragen durchläuft eine echte Retrieval- und Generierrungsrunde, danach wird jede Metrik selbst per LLM-as-Judge bewertet.


⚙️ Konfigurationsreferenz

Die gesamte Konfiguration findet sich in .env (siehe .env.example). Die wichtigsten Variablen:

Variable

Zweck

GEMINI_API_KEY_1/2, GROQ_API_KEY_1/2

Provider-Schlüssel, von Portkey lastverteilt

PORTKEY_API_KEY, PORTKEY_CONFIG_ID

Portkey-Gateway-Anmeldedaten + Routing-Konfiguration

QDRANT_PATH, QDRANT_COLLECTION

Pfad und Name des Vektor-Speichers

LOGFIRE_TOKEN

Optional — ohne Angabe wird nur noch Konsolen-Logging verwendet

HOST, PORT

Bind-Adresse des Servers


🛠️ Technologie-Stack

FastAPI · LangChain · LangGraph · Qdrant · Portkey · Sentence-Transformers · Presidio · NeMo Guardrails · RAGAS · MCP Python SDK · Docker


📄 Lizenz

MIT — siehe LICENSE.

A
license - permissive license
Not graded
quality - not tested
C
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
    C
    quality
    D
    maintenance
    A Model Context Protocol server that provides Retrieval-Augmented Generation capabilities using Contextual AI, enabling AI interfaces like Cursor IDE and Claude Desktop to query domain-specific knowledge with context-aware responses and source citations.
    1
    21
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables querying enterprise documents (DOCX, PDF, PPTX) using natural language, with hybrid search and MCP integration for Claude Desktop and other agents.
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    An MCP server that enables Claude Desktop to search and read local documents via full-text and fuzzy search, providing direct access to indexed files without chunking.
    MIT

View all related MCP servers

Related MCP Connectors

  • Augments MCP Server - A comprehensive framework documentation provider for Claude Code

  • Query any docs site via MCP. Submit a URL, ask questions, get cited answers.

  • Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.

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/imanshrajsingh-boost/mcp-docs-rag-assistant'

If you have feedback or need assistance with the MCP directory API, please join our Discord server