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 installed
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
- 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.3194ISC
- 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 RAG (Retrieval-Augmented Generation) capabilities with document processing, vector storage, and intelligent Q\&A using OpenAI embeddings and semantic search.
Related MCP Connectors
Securely search and manage workspace context files for AI agents and teams.
Cross-agent artifact workspace with provenance across Claude Code, Codex, Cursor, LangGraph.
Search and reason over your Obsidian-style Markdown vault, right from ChatGPT.
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/nepseli/rag-blob-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server