Search results carry the page number and the surrounding context, which is what makes an answer checkable rather than merely plausible. Because tool names and domain keywords live in the configuration, several instances can run side by side — one per collection — without colliding.
A server that converts a PDF collection to Markdown, builds a scored inverted index over it, and exposes search, listing and full-content tools against that index.
- A search tool returning ranked results with the surrounding context and the page each excerpt came from
- A listing tool covering every available document with its metadata and page count
- A content tool that returns a whole document, or one specific page, in full
- Proximity scoring, so multi-word queries rank higher when the terms appear close together
- Domain keywords you configure, given extra weight in ranking for your subject area
- Incremental processing — only new or changed PDFs are reprocessed, detected by content hash
- An index that persists between restarts and loads instantly, with the server accepting connections while it rebuilds
- A management CLI for creating the configuration, adding and removing PDFs, processing them and generating the client config
- Tool names taken from your configuration, so a legal collection and a technical one can expose differently named tools
A folder of PDFs and a configuration file naming it, plus the domain keywords you want weighted. Everything runs locally under Python — the server reads only the folders you point it at and makes no outbound calls.
