Skip to main content
Glama
arbaz-builds

RAG MCP Server

by arbaz-builds

RAG MCP Server

Python FastMCP License: MIT

A FastMCP server that exposes a Retrieval-Augmented Generation (RAG) pipeline as MCP tools — so any MCP-compatible client (Claude, IDEs, agent frameworks) can index documents and answer questions over them through a standard protocol.

Stack

  • MCP framework: FastMCP

  • RAG orchestration: LlamaIndex

  • Vector store: Qdrant

  • Embeddings + LLM: NVIDIA NIM (nv-embedqa-e5-v5, llama-3.1-8b-instruct)

How it works

Document ──▶ chunk (SentenceSplitter) ──▶ embed (NVIDIA) ──▶ upsert ──▶ Qdrant
                                                                            │
User question ──▶ embed ──▶ similarity search ─────────────────────────────┘
                                       │
                                       ▼
                            top-k chunks ──▶ LLM synthesis ──▶ answer

The server keeps an in-memory reference to the last-built index so repeated queries don't require re-embedding, while still supporting a fresh load from Qdrant if the process restarts.

Tools

Tool

Description

index_document(file_path)

Loads a document, chunks it, embeds it, and upserts it into Qdrant.

query_documents(question)

Retrieves the most relevant chunks and synthesizes an answer via the LLM.

Setup

  1. Clone the repo and install dependencies:

    git clone https://github.com/arbaz-builds/rag-mcp-server.git
    cd rag-mcp-server
    pip install -r requirements.txt
  2. Copy .env.example to .env and fill in your credentials:

    cp .env.example .env
  3. Run the server:

    python main.py

The server starts over HTTP transport on 0.0.0.0:$PORT (default 8000) — ready to deploy on Render, Railway, or any container platform.

Example usage (via an MCP client)

> index_document("./handbook.pdf")
Indexed './handbook.pdf' successfully (42 chunks).

> query_documents("What is the refund policy?")
Refunds are processed within 5–7 business days for requests made within 30 days of purchase.

Environment Variables

Variable

Required

Description

NVIDIA_API_KEY

Yes

API key for NVIDIA embeddings + LLM

QDRANT_URL

Yes

Qdrant cluster URL

QDRANT_API_KEY

Yes

Qdrant API key

QDRANT_COLLECTION_NAME

Yes

Collection name in Qdrant — must match an existing collection, no default is applied

PORT

No (default: 8000)

HTTP server port

Deployment

Deployed with HTTP transport (host=0.0.0.0), making it compatible out of the box with Render, Railway, and other container-based hosts that inject a PORT environment variable.

License

MIT