LabscoMCP early access ↗
ndjordjevicMCP SERVER

PinRAG

Index PDFs, GitHub repos, YouTube videos, documentation sites and Discord exports into one RAG store, then ask questions from your editor and get answers with page numbers and timestamps.

by ndjordjevic ↗Vector Stores & RAG RetrievalCommunity

LABSCO SUMMARY

Citations that land on a page number or a timestamp.

The useful part is not that it retrieves — it is that a YouTube answer comes back with the time in the video and a PDF answer with the page, which turns a plausible-sounding claim into one you can go check in ten seconds. Vision enrichment for YouTube is off by default and worth turning on only when the on-screen code and diagrams matter more than the narration; it changes what gets chunked, so re-index after switching it.

What it is

A retrieval server for material that is scattered across formats. It indexes documents into a shared Chroma store with local embeddings, then answers natural-language questions against them with citations pointing back to the PDF page, YouTube timestamp, document name, chunk index or source URL the passage came from.

What you get

  • Files, directories and URLs indexed from one call — PDFs, plain .txt, DiscordChatExporter exports, YouTube videos and playlists, GitHub repositories (with branch, include_patterns and exclude_patterns) and documentation sites — add_document_tool
  • Questions answered over the index with filters for document_id, tag, document_type, PDF page_min/page_max and a response_style of thorough or concise — query_tool
  • What is indexed, with chunk totals, document types, tags and page, message or segment counts — list_documents_tool
  • Documents removed by id, and tags set on a document after the fact for filtered search later — remove_document_tool, set_document_tag_tool, list_collections_tool
  • Two read-only resources for the client's MCP panel: the indexed-document list and the effective server configuration — pinrag://documents, pinrag://server-config
  • A prompt that routes a plain request to the right tool for querying, indexing, listing or removing — use_pinrag

Requirements

An OpenRouter key in OPENROUTER_API_KEY for the default chat model — PINRAG_LLM_PROVIDER also accepts openai, anthropic or cerebras with their own keys. Embeddings run locally with nomic-embed-text-v1.5, no key, though the first run downloads roughly 270 MB of weights. The package is pinrag on PyPI, launched with uvx --refresh pinrag; uv must be installed and uvx on your PATH. Set PINRAG_PERSIST_DIR to an absolute path so the vector store does not depend on the server's working directory. GITHUB_TOKEN is needed only for private repositories.

Setup effort

One command plus a key — uvx --refresh pinrag, then supply credentials