Skip to main content
Glama
nepseli

rag-blob-mcp

by nepseli

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

3. 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-documents

Alles 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:

  1. Azure-PortalRessource erstellen → Speicherkonto. Standardleistung, LRS-Redundanz ist für den persönlichen Gebrauch ausreichend.

  2. Im neuen Konto: Datenspeicher → Container → + Container, benennen Sie ihn (z. B. rag-documents), Zugriffsebene Privat.

  3. Sicherheit + Netzwerk → Zugriffsschlüssel → Schlüssel anzeigen, kopieren Sie die Verbindungszeichenfolge.

  4. Fügen Sie sie in .env als AZURE_STORAGE_CONNECTION_STRING ein und setzen Sie AZURE_STORAGE_CONTAINER_NAME auf 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.ini

Konfiguration

Alle Variablen befinden sich in der .env im Repository-Stammverzeichnis:

Variable

Standard

Zweck

OPENAI_API_KEY

— (erforderlich)

Chatmodell + Embeddings

OPENAI_MODEL

gpt-4.1

Chatmodell für den RAG-Agenten

OPENAI_EMBEDDING_MODEL

text-embedding-3-small

Embedding-Modell für den Vektorindex

AZURE_STORAGE_CONNECTION_STRING

— (erforderlich)

Blob Storage-Zugriff

AZURE_STORAGE_CONTAINER_NAME

— (erforderlich)

Container, in dem die Dokumente liegen

MCP_SERVER_HOST

127.0.0.1

Schnittstelle, an die der MCP-Server bindet

MCP_SERVER_PORT

8000

Port, an den der MCP-Server bindet

MCP_SERVER_URL

http://127.0.0.1:8000/mcp

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/ -v

29 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).

F
license - not found
Not graded
quality - not tested
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

  • A
    license
    A
    quality
    D
    maintenance
    Enables 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.
    3
    19
    4
    ISC
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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
  • 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.

View all related MCP servers

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.

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/nepseli/rag-blob-mcp'

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