RAG MCP Server
by arbaz-builds
README.md
# RAG MCP Server
[](https://www.python.org/)
[](https://github.com/jlowin/fastmcp)
[](LICENSE)
A [FastMCP](https://github.com/jlowin/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:
```bash
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:
```bash
cp .env.example .env
```
3. Run the server:
```bash
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
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues