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.
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.
- 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`
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.
One command plus a key — uvx --refresh pinrag, then supply credentials
