Skip to main content
Glama
nepseli

rag-blob-mcp

by nepseli

RAG Blob MCP

Сервер Model Context Protocol (MCP), который предоставляет RAG-агенту поисковый доступ к библиотеке документов, хранящейся в Azure Blob Storage, а также приложение Streamlit для загрузки документов и общения с ними.

  • MCP-сервер — FastMCP поверх Streamable HTTP, владеет всем доступом к Azure Blob Storage, предоставляет 4 инструмента и 3 шаблона подсказок, хранит векторный индекс в памяти (эмбеддинги OpenAI), пересобираемый из Blob Storage при каждом запуске.

  • Приложение Streamlit — вкладка «Библиотека» (загрузка / список / удаление документов) и вкладка «Чат» (задавайте вопросы, на которые отвечает агент LangGraph ReAct, вызывающий инструмент поиска сервера).

Быстрый старт

1. Предварительные требования

  • Python 3.11+ (разрабатывалось на 3.13)

  • Учетная запись Azure Storage с контейнером Blob (см. Настройка Azure ниже, если у вас её нет)

  • Ключ API OpenAI

2. Установка

Из корня репозитория:

python -m venv .venv
.venv\Scripts\activate          # Windows
pip install -r requirements.txt

3. Настройка

Скопируйте .env.example (в корне репозитория) в .env и заполните свои значения:

OPENAI_API_KEY=sk-...
AZURE_STORAGE_CONNECTION_STRING=DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net
AZURE_STORAGE_CONTAINER_NAME=rag-documents

Всё остальное (OPENAI_MODEL, OPENAI_EMBEDDING_MODEL, MCP_SERVER_HOST/PORT/URL) имеет рабочие значения по умолчанию — см. Конфигурация.

4. Запуск

Два процесса, два терминала, оба из корня репозитория:

# Terminal 1 — MCP server
python server/mcp_server.py
# Terminal 2 — Streamlit app
streamlit run app/streamlit_app.py

Откройте http://localhost:8501. Загрузите файл PDF/DOCX/TXT/MD на вкладке Библиотека, затем задайте вопрос о нём на вкладке Чат.

Related MCP server: Legal MCP Server

Настройка Azure

Если у вас ещё нет учетной записи хранения:

  1. Портал AzureСоздать ресурс → Учетная запись хранения. Стандартная производительность, избыточность LRS подойдёт для личного использования.

  2. В новой учетной записи: Хранилище данных → Контейнеры → + Контейнер, назовите его (например, rag-documents), уровень доступа — Private.

  3. Безопасность и сеть → Ключи доступа → Показать ключи, скопируйте строку подключения.

  4. Вставьте её в .env как AZURE_STORAGE_CONNECTION_STRING и установите AZURE_STORAGE_CONTAINER_NAME на имя выбранного контейнера.

Структура проекта

.
├── 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

Конфигурация

Все переменные находятся в файле .env в корне репозитория:

Переменная

По умолчанию

Назначение

OPENAI_API_KEY

— (обязательно)

Чат-модель + эмбеддинги

OPENAI_MODEL

gpt-4.1

Чат-модель для RAG-агента

OPENAI_EMBEDDING_MODEL

text-embedding-3-small

Модель эмбеддингов для векторного индекса

AZURE_STORAGE_CONNECTION_STRING

— (обязательно)

Доступ к Blob Storage

AZURE_STORAGE_CONTAINER_NAME

— (обязательно)

Контейнер, в котором хранятся документы

MCP_SERVER_HOST

127.0.0.1

Интерфейс, к которому привязывается MCP-сервер

MCP_SERVER_PORT

8000

Порт, к которому привязывается MCP-сервер

MCP_SERVER_URL

http://127.0.0.1:8000/mcp

URL, к которому подключаются приложение/агент Streamlit — обновите его, если меняете порт

Использование

Вкладка «Библиотека» — загружайте файлы PDF/DOCX/TXT/MD (лимит 200 МБ, задаётся Streamlit). Каждая загрузка разбивается на фрагменты, эмбеддится и добавляется в поисковый индекс; список документов показывает статус indexed / failed / pending с количеством фрагментов. Удаление убирает документ и из Blob Storage, и из индекса.

Вкладка «Чат» — задайте вопрос на простом английском. Агент решает, когда вызывать инструмент поиска, извлекает релевантные фрагменты и отвечает, ссылаясь на исходный документ по имени файла. При пустой или нерелевантной библиотеке он сообщает об этом, а не угадывает.

Тестирование

pytest server/ -v

29 тестов покрывают извлечение текста/разбиение на фрагменты, векторный индекс, обёртку Azure Blob Storage (мок) и все 4 инструмента MCP + подсказки (через fastmcp.Client в процессе, с использованием заглушек — без реальных вызовов Azure/OpenAI). Автоматического покрытия для UI Streamlit или живой связки агент/сервер нет; см. scripts/smoke_test_server.py для ручного смоук-теста против реально запущенного сервера.

Известные ограничения

  • Индекс в памяти, без персистентности. Каждый перезапуск сервера заново скачивает, извлекает и эмбеддит каждый документ в контейнере. Подходит для небольшой личной библиотеки; требует реальных вызовов API OpenAI и времени на запуск по мере роста библиотеки.

  • Однопользовательский, только локально. Нет аутентификации, нет защиты от одновременных записей, нигде не развёрнут.

  • Оба процесса (MCP-сервер, приложение Streamlit) должны быть запущены для работы приложения — см. полную документацию проекта для подробностей.

Полную картину — архитектуру, проектные решения, известные ошибки и следующие шаги — см. в PROJECT.md (также доступен как 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