DocsForge v1.1.0

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.

Claude Code terminal

    

Run it yourself

01Install
pipx install docsforge
02Stdio, for a local client
claude mcp add docsforge -- docsforge-mcp
03HTTP, for a shared server
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

you:"How do I retry with exponential backoff in Effect?"
model→ learn_technology(name="effect")
model→ read_knowledge_base(name="effect", section="retry")

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 send
DOCSFORGE_DB / DATABASE_URLPostgres DSN; files otherwise
DOCSFORGE_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 lives
DOCSFORGE_ALLOW_DELETEenables forget_documentation (off)