Connect your MCP client.
Streamable HTTP. One URL, one bearer token. The same thirteen tools whichever client you use.
Pick your client. Paste your token. Copy.
One command or one config block per client, already pointed at this server. The token is spliced in on this page only — it is never sent anywhere.
Run it yourself
pipx install docsforge
claude mcp add docsforge -- docsforge-mcp
export DOCSFORGE_MCP_TOKEN=… export DOCSFORGE_DB=postgresql://… python main.py --http --host 0.0.0.0 --port 8765
Binding a public address without a token is refused. Set DOCSFORGE_MCP_INSECURE=1 only on a network you own.
First conversation
The model never sees a URL. It asks for a name, reads back the pages that match, and answers from the manual instead of from memory.
Where harvested docs live
Markdown files — the default.
knowledge_base/<tech>/<version>.md, one file per version plus an index. Zero setup, and the file is a deliverable you can hand to anyone.
PostgreSQL — set DOCSFORGE_DB.
A row per page with a GIN-indexed tsvector: ranked search across everything stored, snippets showing why a page matched, and pagination that never loads the whole store. Several DocsForge instances can share one store.
'retry with exponential backoff' → 6 pages, ranked, 0.11s over 703 stored pages — a recorded run.
Configuration
DOCSFORGE_MCP_TOKENbearer token clients must sendDOCSFORGE_DB / DATABASE_URLPostgres DSN; files otherwiseDOCSFORGE_MAX_CHARScap on what a tool hands back (60,000)DOCSFORGE_HARVEST_DEADLINEseconds before a harvest goes to the background (25)DOCSFORGE_KB_ROOTwhere the file store livesDOCSFORGE_ALLOW_DELETEenables forget_documentation (off)