rag-blob-mcp
RAG Blob MCP
Ein Model Context Protocol (MCP)-Server, der einem RAG-Agenten Suchzugriff auf eine in Azure Blob Storage gespeicherte Dokumentbibliothek bietet, sowie eine Streamlit-App zum Hochladen von Dokumenten und zum Chatten mit ihnen.
MCP-Server — FastMCP über Streamable HTTP, besitzt den gesamten Azure Blob Storage-Zugriff, stellt 4 Tools und 3 Prompt-Vorlagen bereit, hält einen In-Memory-Vektorindex (OpenAI-Embeddings), der bei jedem Start aus Blob Storage neu aufgebaut wird.
Streamlit-App — einen Bibliotheks-Tab (Dokumente hochladen / auflisten / löschen) und einen Chat-Tab (Fragen stellen, die von einem LangGraph-ReAct-Agenten beantwortet werden, der das Suchtool des Servers aufruft).
Schnellstart
1. Voraussetzungen
Python 3.11+ (entwickelt mit 3.13)
Ein Azure-Speicherkonto mit einem Blob-Container (siehe Azure-Einrichtung unten, falls Sie keins haben)
Einen OpenAI-API-Schlüssel
2. Installation
Aus dem Repository-Stammverzeichnis:
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt3. Konfiguration
Kopieren Sie .env.example (im Repository-Stammverzeichnis) in .env und füllen Sie Ihre Werte aus:
OPENAI_API_KEY=sk-...
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net
AZURE_STORAGE_CONTAINER_NAME=rag-documentsAlles andere (OPENAI_MODEL, OPENAI_EMBEDDING_MODEL, MCP_SERVER_HOST/PORT/URL) hat eine funktionierende Standardeinstellung — siehe Konfiguration.
4. Ausführen
Zwei Prozesse, zwei Terminals, beide aus dem Repository-Stammverzeichnis:
# Terminal 1 — MCP server
python server/mcp_server.py# Terminal 2 — Streamlit app
streamlit run app/streamlit_app.pyÖffnen Sie http://localhost:8501. Laden Sie eine PDF/DOCX/TXT/MD-Datei im Bibliotheks-Tab hoch und stellen Sie dann im Chat-Tab eine Frage dazu.
Related MCP server: Legal MCP Server
Azure-Einrichtung
Falls Sie noch kein Speicherkonto haben:
Azure-Portal → Ressource erstellen → Speicherkonto. Standardleistung, LRS-Redundanz ist für den persönlichen Gebrauch ausreichend.
Im neuen Konto: Datenspeicher → Container → + Container, benennen Sie ihn (z. B.
rag-documents), Zugriffsebene Privat.Sicherheit + Netzwerk → Zugriffsschlüssel → Schlüssel anzeigen, kopieren Sie die Verbindungszeichenfolge.
Fügen Sie sie in
.envalsAZURE_STORAGE_CONNECTION_STRINGein und setzen SieAZURE_STORAGE_CONTAINER_NAMEauf den von Ihnen gewählten Containernamen.
Projektstruktur
.
├── server/
│ ├── mcp_server.py # FastMCP server: tools, prompts, index rebuild, __main__ entrypoint
│ ├── blob_store.py # Azure Blob Storage wrapper
│ ├── indexing.py # text extraction (pdf/docx/txt/md) + chunking
│ ├── vector_index.py # in-memory vector store wrapper
│ └── test_*.py # automated tests (pytest)
├── agent/
│ └── rag_agent.py # LangGraph ReAct agent used by the Chat tab
├── app/
│ ├── mcp_client.py # direct MCP tool-call helpers used by the Library tab
│ └── streamlit_app.py # the UI
├── scripts/
│ └── smoke_test_server.py # manual end-to-end smoke test against a running server
├── docs_build/ # scripts that generate PROJECT.docx / PROJECT.pdf
└── pytest.iniKonfiguration
Alle Variablen befinden sich in der .env im Repository-Stammverzeichnis:
Variable | Standard | Zweck |
| — (erforderlich) | Chatmodell + Embeddings |
|
| Chatmodell für den RAG-Agenten |
|
| Embedding-Modell für den Vektorindex |
| — (erforderlich) | Blob Storage-Zugriff |
| — (erforderlich) | Container, in dem die Dokumente liegen |
|
| Schnittstelle, an die der MCP-Server bindet |
|
| Port, an den der MCP-Server bindet |
|
| URL, mit der die Streamlit-App/der Agent verbindet — aktualisieren Sie diese ebenfalls, wenn Sie den Port ändern |
Verwendung
Bibliotheks-Tab — Laden Sie PDF/DOCX/TXT/MD-Dateien hoch (200-MB-Limit, von Streamlit festgelegt). Jeder Upload wird in Chunks aufgeteilt, eingebettet und zum Suchindex hinzugefügt; die Dokumentliste zeigt den Status indexed / failed / pending mit Chunk-Anzahlen. Löschen entfernt ein Dokument sowohl aus Blob Storage als auch aus dem Index.
Chat-Tab — Stellen Sie eine Frage in einfachem Englisch. Der Agent entscheidet, wann er das Suchtool aufruft, ruft relevante Chunks ab und antwortet unter Angabe des Quelldokuments per Dateiname. Bei einer leeren oder irrelevanten Bibliothek sagt er das, anstatt zu raten.
Testen
pytest server/ -v29 Tests decken Textextraktion/Chunking, den Vektorindex, den Azure Blob Storage-Wrapper (gemockt) und alle 4 MCP-Tools + Prompts ab (über fastmcp.Client im Prozess, mit Fakes — keine echten Azure/OpenAI-Aufrufe). Es gibt keine automatisierte Abdeckung für die Streamlit-UI oder die Live-Agent/Server-Verdrahtung; siehe scripts/smoke_test_server.py für einen manuellen Smoke-Test gegen einen echten laufenden Server.
Bekannte Einschränkungen
In-Memory-Index, keine Persistenz. Jeder Server-Neustart lädt jedes Dokument im Container erneut herunter, extrahiert und bettet es erneut ein. Für eine kleine persönliche Bibliothek in Ordnung; kostet echte OpenAI-API-Aufrufe und Startzeit, wenn die Bibliothek wächst.
Einzelbenutzer, nur lokal. Keine Authentifizierung, keine Sicherheit für gleichzeitige Schreibvorgänge, nicht irgendwo bereitgestellt.
Beide Prozesse (MCP-Server, Streamlit-App) müssen laufen, damit die App funktioniert — siehe vollständige Projektdokumentation für weitere Informationen.
Für das vollständige Bild — Architektur, Designentscheidungen, bekannte Fehler und nächste Schritte — siehe PROJECT.md (auch verfügbar als PROJECT.docx / PROJECT.pdf).
This server cannot be deployed
Maintenance
Related MCP Connectors
Ingest, manage, and retrieve documents for RAG-powered AI applications
Document hosting and encrypted agent memory with multi-tenant persistence.
LLM Orchestration Agent (Langgraph)
Artifact store for AI agents — read, write, and search files by path; share by rendered URL.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI systems to perform full-text and semantic search operations over structured/unstructured data in Azure Cognitive Search, with capabilities for document indexing and management through natural language.325 npm4ISC
- FlicenseNot gradedqualityDmaintenanceEnables legal document analysis using Azure Blob Storage and Anthropic Claude API with streaming capabilities, prompt library management, and document retrieval for PDF files.-
- AlicenseNot gradedqualityDmaintenanceEnables Claude to search and retrieve documents from Azure AI Search indexes with intelligent summarization and analysis using LangGraph workflows and optional Google Gemini integration.MIT
- FlicenseNot gradedqualityDmaintenanceEnables listing image blobs from Azure Blob Storage and generating descriptions using Azure OpenAI's gpt-4o vision model.6-