rag-blob-mcp
RAG Blob MCP
Un servidor de Model Context Protocol (MCP) que proporciona a un agente RAG acceso de búsqueda a una biblioteca de documentos almacenada en Azure Blob Storage, además de una aplicación Streamlit para subir documentos y chatear con ellos.
Servidor MCP — FastMCP sobre Streamable HTTP, gestiona todo el acceso a Azure Blob Storage, expone 4 herramientas y 3 plantillas de prompt, mantiene un índice vectorial en memoria (embeddings de OpenAI) reconstruido desde Blob Storage en cada inicio.
Aplicación Streamlit — una pestaña Biblioteca (subir / listar / eliminar documentos) y una pestaña Chat (hacer preguntas, respondidas por un agente LangGraph ReAct que llama a la herramienta de búsqueda del servidor).
Inicio rápido
1. Requisitos previos
Python 3.11+ (desarrollado contra 3.13)
Una cuenta de Azure Storage con un contenedor de blobs (consulta Configuración de Azure a continuación si no tienes una)
Una clave de API de OpenAI
2. Instalación
Desde la raíz del repositorio:
python -m venv .venv
.venv\Scripts\activate # Windows
pip install -r requirements.txt3. Configuración
Copia .env.example (en la raíz del repositorio) a .env y completa tus valores:
OPENAI_API_KEY=sk-...
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net
AZURE_STORAGE_CONTAINER_NAME=rag-documentsTodo lo demás (OPENAI_MODEL, OPENAI_EMBEDDING_MODEL, MCP_SERVER_HOST/PORT/URL) tiene un valor predeterminado funcional — consulta Configuración.
4. Ejecución
Dos procesos, dos terminales, ambos desde la raíz del repositorio:
# Terminal 1 — MCP server
python server/mcp_server.py# Terminal 2 — Streamlit app
streamlit run app/streamlit_app.pyAbre http://localhost:8501. Sube un archivo PDF/DOCX/TXT/MD en la pestaña Biblioteca y luego haz una pregunta sobre él en la pestaña Chat.
Related MCP server: Legal MCP Server
Configuración de Azure
Si aún no tienes una cuenta de Storage:
Azure Portal → Crear un recurso → Cuenta de almacenamiento. Rendimiento estándar, redundancia LRS es suficiente para uso personal.
En la nueva cuenta: Almacenamiento de datos → Contenedores → + Contenedor, asígnale un nombre (por ejemplo,
rag-documents), nivel de acceso Privado.Seguridad y redes → Claves de acceso → Mostrar claves, copia la cadena de conexión.
Pégala en
.envcomoAZURE_STORAGE_CONNECTION_STRING, y estableceAZURE_STORAGE_CONTAINER_NAMEcon el nombre del contenedor que elegiste.
Estructura del proyecto
.
├── 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.iniConfiguración
Todas las variables están en el .env de la raíz del repositorio:
Variable | Valor predeterminado | Propósito |
| — (obligatorio) | Modelo de chat + embeddings |
|
| Modelo de chat para el agente RAG |
|
| Modelo de embeddings para el índice vectorial |
| — (obligatorio) | Acceso a Blob Storage |
| — (obligatorio) | Contenedor donde viven los documentos |
|
| Interfaz a la que se vincula el servidor MCP |
|
| Puerto al que se vincula el servidor MCP |
|
| URL a la que se conectan la aplicación/agente Streamlit — actualízala también si cambias el puerto |
Uso
Pestaña Biblioteca — sube archivos PDF/DOCX/TXT/MD (límite de 200MB, establecido por Streamlit). Cada subida se divide en fragmentos, se incrusta y se añade al índice de búsqueda; la lista de documentos muestra el estado indexed / failed / pending con recuentos de fragmentos. Eliminar quita un documento tanto de Blob Storage como del índice.
Pestaña Chat — haz una pregunta en inglés sencillo. El agente decide cuándo llamar a la herramienta de búsqueda, recupera los fragmentos relevantes y responde citando el documento fuente por nombre de archivo. Con una biblioteca vacía o irrelevante, lo dice en lugar de adivinar.
Pruebas
pytest server/ -v29 pruebas cubren la extracción/división de texto, el índice vectorial, el envoltorio de Azure Blob Storage (simulado) y las 4 herramientas MCP + prompts (a través de fastmcp.Client en proceso, usando fakes — sin llamadas reales a Azure/OpenAI). No hay cobertura automatizada para la interfaz de Streamlit ni para el cableado del agente/servidor en vivo; consulta scripts/smoke_test_server.py para una prueba de humo manual contra un servidor real en ejecución.
Limitaciones conocidas
Índice en memoria, sin persistencia. Cada reinicio del servidor vuelve a descargar, extraer e incrustar cada documento del contenedor. Aceptable para una biblioteca personal pequeña; cuesta llamadas reales a la API de OpenAI y tiempo de inicio a medida que la biblioteca crece.
Un solo usuario, solo local. Sin autenticación, sin seguridad de escritura concurrente, no desplegado en ningún sitio.
Ambos procesos (servidor MCP, aplicación Streamlit) deben estar en ejecución para que la aplicación funcione — consulta el documento completo del proyecto para más detalles.
Para la imagen completa — arquitectura, decisiones de diseño, errores conocidos y próximos pasos — consulta PROJECT.md (también disponible como 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