Pinax

Local MCP server for docs

Any docs site.
A local MCP server.
Under a minute.

Pinax crawls a public documentation site, indexes its structure, and exposes it to any MCP client as four focused tools. Pages are fetched live — what your agent reads is what the docs site serves today.

$ brew install desmondsanctity/tap/pinax
Read the docs →

15

curated docs sites

one-word names → indexed

4

MCP tools

list · search · sections · get

0

cloud

stays on your machine

How it works

Three commands. Zero servers to manage.

  1. 01

    Add

    $ pinax add stripe

    Pick a name from the catalog or paste any docs URL. Pinax discovers structure via llms.txt or sitemap.xml and writes a local manifest.

  2. 02

    Serve

    $ pinax serve

    A local MCP server speaks stdio to your client and HTTP to the log UI. Pages are fetched live, so what your agent reads is what the docs site serves today.

  3. 03

    Use

    $ mcp tools/call search_pages

    Your client gets four focused tools: list manifests, list sections, full-text search a page, and fetch the page. No vectors, no retraining.

Install

Pick one. Run it.

01

Homebrew

$ brew install desmondsanctity/tap/pinax

Recommended on macOS · auto-updates with brew upgrade.

02

Go install

$ go install github.com/desmondsanctity/pinax/cmd/pinax@latest

Requires Go 1.22+. Binary lands in $GOBIN.

03

Prebuilt binary

$ curl -L https://github.com/desmondsanctity/pinax/releases/latest -o pinax

Linux/macOS/Windows builds on the releases page.

MCP clients

Wire it into the agent you already use.

Each client gets a copy-pasteable JSON snippet and a config-path reminder.

FAQ

Honest answers, in advance.

What is Pinax? +

A small Go CLI that turns any public documentation site into a local Model Context Protocol server. Run it once, point your MCP client at it, and the docs become live tools your agent can call — no copy-pasting pages into chat.

Why MCP and not just RAG or a vector database? +

Docs already have structure (headings, sitemaps, llms.txt). Pinax keeps that structure intact and serves pages live, so answers come from the version of the docs that exists today, not a stale embedding from last month. No embeddings, no re-indexing, no drift.

Does Pinax send anything off my machine? +

Only the requests you'd make anyway — fetching pages from the docs site itself. No telemetry, no analytics, no third-party APIs. The MCP transport is stdio between Pinax and your client; the log UI is a localhost-only HTTP server.

Which docs sites work? Which don't? +

Anything with a sitemap.xml or llms.txt works out of the box. Pages need to render on the server (HTML, not pure SPA shells) — most popular dev docs do. The catalog page lists the 15 we know index cleanly today; any URL with /, . or :// is a valid add target.

How do I add a docs site that isn't in the catalog? +

Run pinax add <url> with any HTTPS URL. Pinax discovers structure on the fly. If you want it shipped in the curated catalog, open an issue or PR against internal/catalog/catalog.json and add the three required fields: displayName, url, tags.

Can I run it against private or auth-gated docs? +

Not in v0.3. Auth headers and cookie-based crawling are planned for v0.4. Today Pinax fetches as an anonymous client, so anything behind a login screen is invisible to it.

How is it different from gitingest, repomix, or just downloading llms.txt? +

Those tools concatenate or summarise content into one large blob. Pinax exposes structured tools — list_sections, search_pages, get_page — so the agent fetches only the page it needs, when it needs it. No prompt-bloat, no out-of-date copies.

One last thing

Index your first docs site now.

$ pinax add stripe && pinax serve
Or read the quick start →
Pinax