Skip to main content
Glama

RAG System

Local Retrieval-Augmented Generation system for PDF documentation. Provides offline document ingestion with hybrid vector search and an MCP server for LLM agents to query indexed documentation.

Architecture

                 Offline / manual
PDFs and docs -> Ingestion CLI -> Local Qdrant (Docker)
                                      |
                 During questions     |
LLM agent -> MCP retrieval tools -----+
          -> grounded answer with citations

Two executables share a common codebase:

  • rag - Ingestion CLI for parsing, chunking, embedding, and storing PDFs

  • rag-mcp - Read-only MCP stdio server exposing search and retrieval tools

Related MCP server: okfy

Prerequisites

  • Python 3.11+

  • uv package manager

  • Docker (for Qdrant)

Setup

1. Start Qdrant

cd rag-system
docker compose up -d

Qdrant will be available at http://localhost:6333.

2. Install Python dependencies

uv sync

This creates a virtual environment and installs all dependencies including local embedding models.

3. Copy environment configuration

cp .env.example .env

Edit .env if you need to change Qdrant URL, collection name, or model settings.

Ingesting Documents

Place PDF files in the documents/ directory (or reference them by path).

# Ingest a single file
uv run rag ingest ./documents/manual.pdf

# Ingest with a custom document ID
uv run rag ingest ./documents/manual.pdf --id product-manual

# Force re-ingestion (replaces existing version)
uv run rag ingest ./documents/manual.pdf --force

# Ingest all PDFs in a directory
uv run rag ingest-directory ./documents

# List indexed documents
uv run rag list

# Inspect a document's metadata and sample chunks
uv run rag inspect product-manual

# Delete a document
uv run rag delete product-manual

Embedding models (BAAI/bge-small-en-v1.5 for dense, Qdrant/bm25 for sparse) are downloaded on first use and cached locally.

MCP Server Configuration

Add the RAG MCP server to your agent's MCP configuration:

opencode (opencode.json or ~/.config/opencode/opencode.json)

{
  "mcp": {
    "servers": {
      "rag-documentation": {
        "type": "local",
        "command": ["uv", "run", "--directory", "/absolute/path/to/rag-system", "rag-mcp"],
        "enabled": true
      }
    }
  }
}

Claude Desktop (claude_desktop_config.json)

{
  "mcpServers": {
    "rag-documentation": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/rag-system", "rag-mcp"]
    }
  }
}

MCP Tools

The server exposes four read-only tools:

Tool

Description

search_documentation

Hybrid semantic + keyword search with page citations

get_document_context

Retrieve surrounding chunks for more context

list_documents

List all indexed documents

get_document_metadata

Get metadata for a specific document

Configuration

All settings are read from environment variables (or .env file):

Variable

Default

Description

QDRANT_URL

http://localhost:6333

Qdrant REST API URL

QDRANT_COLLECTION

documentation

Qdrant collection name

DENSE_EMBEDDING_MODEL

BAAI/bge-small-en-v1.5

Dense embedding model

SPARSE_EMBEDDING_MODEL

Qdrant/bm25

Sparse/BM25 embedding model

CHUNK_TARGET_TOKENS

700

Target tokens per chunk

CHUNK_OVERLAP_TOKENS

100

Token overlap between chunks

DEFAULT_SEARCH_LIMIT

8

Default results per search

MAX_SEARCH_LIMIT

20

Maximum results per search

Development

# Run tests (unit tests run without Qdrant)
uv run pytest tests/unit

# Run all tests (requires Qdrant running)
docker compose up -d
uv run pytest

# Lint
uv run ruff check src tests

# Type check
uv run mypy src

How Retrieval Works

  1. Hybrid search: Dense vector search (semantic similarity) and sparse BM25 search (keyword matching) run in parallel against Qdrant.

  2. Reciprocal Rank Fusion (RRF): Qdrant fuses dense and sparse results using RRF.

  3. Citations: Every result includes the document title, section path, and page range.

  4. Context expansion: The get_document_context tool retrieves neighboring chunks when a search result needs more surrounding text.

All processing is local. No document content is sent to external services.

F
license - not found
-
quality - not tested
C
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

  • F
    license
    -
    quality
    B
    maintenance
    Enables any MCP-compatible AI assistant to search, filter, and retrieve information from a local document collection using a hybrid search pipeline with vector, BM25, reranking, and LLM enrichment.
    4
  • A
    license
    -
    quality
    B
    maintenance
    Enables AI agents to search, read, and traverse documentation bundles in Open Knowledge Format via MCP tools.
    740
    64
    MIT
  • F
    license
    -
    quality
    D
    maintenance
    Provides tools for ingesting documents into a local vector database and retrieving relevant information via semantic search, enabling retrieval-augmented generation for MCP clients.
    6

View all related MCP servers

Related MCP Connectors

  • Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.

  • Agentic search over your Dewey document collections from any MCP-compatible client.

  • Query any docs site via MCP. Submit a URL, ask questions, get cited answers.

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/Swabhimanc/PDF-Rag'

If you have feedback or need assistance with the MCP directory API, please join our Discord server