All configuration is via environment variables.
| Var | Default | Meaning |
|---|
PORT | 8765 | MCP + health + dashboard port |
HOST | 127.0.0.1 | Bind address; Docker compose overrides this inside the container |
AUTH_TOKEN | empty | Bearer token for /mcp and /api; required when binding off loopback |
DB_PATH | /data/registry.db | SQLite file (on the writable volume) |
| Var | Default | Meaning |
|---|
SCAN_ROOTS (SCAN_DIRS) | /skills | Comma-separated scan roots; auto discovers all local volumes |
MAX_DEPTH | 20 | Max crawl recursion depth |
SCAN_ON_BOOT | true | false serves the persisted index instantly without re-crawling |
| Var | Default | Meaning |
|---|
MODEL_ID | Xenova/all-MiniLM-L6-v2 | Embedding model (must match EMBED_DIM) |
EMBED_DIM | 384 | Vector dimension (must match the model) |
ALLOW_REMOTE_MODELS | 0 | 1 lets the model download at runtime |
These default to off/empty — Quartermaster refuses the corresponding
operation until you opt in. See the
security model for the full picture.
| Var | Default | Meaning |
|---|
HYDRATION_ROOTS | empty | Allow-list of roots apply_hydration may write under |
PACK_OUTPUT_ROOTS | empty | Allow-list of roots materialize_pack may write under (empty = refused) |
ALLOW_NETWORK_UPDATES | unset (off) | Master gate for any network resolver call |
UPSTREAM_FETCH_TIMEOUT_MS | 5000 | Timeout for a single upstream request |
MAX_UPSTREAM_FILES | 200 | Cap on files in a fetched upstream snapshot |
MAX_UPSTREAM_BYTES | 2097152 | Cap on total bytes in a fetched upstream snapshot |
Something not behaving? See
Troubleshooting.