Skip to main content
Glama
nepseli

rag-blob-mcp

by nepseli

RAG Blob MCP

Azure Blob Storage に保存されたドキュメントライブラリへの検索アクセスを RAG エージェントに提供する Model Context Protocol (MCP) サーバーと、ドキュメントのアップロードおよびチャットを行うための Streamlit アプリです。

  • MCP サーバー — Streamable HTTP 上の FastMCP。Azure Blob Storage へのすべてのアクセスを所有し、4 つのツールと 3 つのプロンプトテンプレートを公開します。起動のたびに Blob Storage から再構築されるインメモリベクトルインデックス(OpenAI 埋め込み)を保持します。

  • Streamlit アプリ — ライブラリタブ(ドキュメントのアップロード / 一覧表示 / 削除)とチャットタブ(サーバーの検索ツールを呼び出す LangGraph ReAct エージェントが質問に回答)を提供します。

クイックスタート

1. 前提条件

  • Python 3.11 以上(3.13 で開発)

  • Blob コンテナーを持つ Azure ストレージアカウント(お持ちでない場合は、下の Azure のセットアップ を参照)

  • OpenAI API キー

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_MODELOPENAI_EMBEDDING_MODELMCP_SERVER_HOST/PORT/URL)には動作するデフォルト値があります — 設定 を参照してください。

4. 実行

2 つのプロセス、2 つのターミナル。どちらもリポジトリのルートから:

# 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 Portalリソースの作成 → ストレージアカウント。Standard パフォーマンス、LRS 冗長性で個人利用には十分です。

  2. 新しいアカウントで: データストレージ → コンテナー → + コンテナー。名前を付け(例: rag-documents)、アクセスレベルは Private にします。

  3. セキュリティとネットワーク → アクセスキー → キーの表示 で接続文字列をコピーします。

  4. それを .envAZURE_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

Streamlit アプリ / エージェントが接続する URL — ポートを変更した場合はこれも更新してください

使用方法

ライブラリタブ — PDF/DOCX/TXT/MD ファイルをアップロードします(200MB 制限、Streamlit による設定)。各アップロードはチャンク化され、埋め込まれ、検索インデックスに追加されます。ドキュメント一覧には indexed / failed / pending のステータスとチャンク数が表示されます。削除すると、Blob Storage とインデックスの両方からドキュメントが削除されます。

チャットタブ — 平易な英語で質問します。エージェントは検索ツールを呼び出すタイミングを決定し、関連するチャンクを取得し、ソースドキュメントをファイル名で引用して回答します。ライブラリが空または無関係な場合は、推測せずにその旨を伝えます。

テスト

pytest server/ -v

29 のテストが、テキスト抽出 / チャンク化、ベクトルインデックス、Azure Blob Storage ラッパー(モック)、および 4 つの MCP ツール + プロンプト(fastmcp.Client をプロセス内で使用し、フェイクを使用 — 実際の Azure / OpenAI 呼び出しなし)をカバーしています。Streamlit UI やライブのエージェント / サーバー配線の自動カバレッジはありません。実際の実行中サーバーに対する手動スモークテストについては、scripts/smoke_test_server.py を参照してください。

既知の制限事項

  • インメモリインデックス、永続化なし。 サーバーを再起動するたびに、コンテナー内のすべてのドキュメントを再ダウンロード、再抽出、再埋め込みします。小規模な個人ライブラリには問題ありませんが、ライブラリが大きくなるにつれて実際の OpenAI API 呼び出しと起動時間がかかります。

  • シングルユーザー、ローカルのみ。 認証なし、同時書き込みの安全性なし、どこにもデプロイされていません。

  • アプリを機能させるには、両方のプロセス(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