Web console & JSON API
GET / serves a self-contained dashboard (no build step, no external JS)
to browse, search, and facet the whole inventory — by type, tool, and scope —
preview hydration, and inspect any item down to its manifest and snapshot.
The dashboard is read-only plus previews: installs, updates, pinning, and other state changes always run through the MCP tools / JSON API, never through dashboard buttons. Artifact files are never written from the console.
JSON API
Section titled “JSON API”| Route | Returns |
|---|---|
GET /api/census | total vs unique counts, breakdowns by type/tool/scope |
GET /api/items | the collapsed inventory for the UI |
GET /api/item/:id | full body + canonical metadata for one item |
GET /api/devices · POST /api/devices | list / register device profiles |
POST /api/hydration/preview | a dry-run hydration plan |
POST /api/ingest | collector push — { device?, items: ScanItem[] }, ≤500 items / 8 MB per call |
POST /api/ingest/reconcile | { device, roots, seenPaths } — drop a device’s vanished items (roots-scoped) |
GET | PUT /api/config | runtime settings: network-updates toggle + optional GitHub token (persisted in config.json beside the DB) |
POST /api/upstream/refresh | on-demand update check + drift scan over all linked items |
POST /api/upstream/{find,check,pin,unpin} | per-item drawer actions mirroring the MCP tools — registry metadata only |
GET /api/drift | persisted drift reports (the Drift tab’s data) |
GET /health | {"status":"ok","indexed":N,"scanning":bool} |
If AUTH_TOKEN is set, /mcp and /api require
Authorization: Bearer <token>. Binding off loopback (HOST=0.0.0.0)
refuses to start without a token, and loopback binds are protected by a
DNS-rebinding guard (Host/Origin pinning).