127.0.0.1 only — never
the LAN — and writes the bound port plus a bearer token to a discovery
file on disk so MCP wrappers, benchmark scripts, and shell automation
can find it without configuration.
Discovery file
chmod 600, JSON shape:
Authentication
Every endpoint except/health requires:
Response envelope
Both shapes are returned with HTTP 200:ok:false with a machine-readable code.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /health | Server identity, provider health snapshot, local-model inventory. No auth. |
| GET | /models?kind=&installed_only= | Flat model catalog. |
| GET | /modes | List saved Modes. |
| POST | /modes | Create Mode. |
| GET | /modes/{id} | Fetch one Mode. |
| PATCH | /modes/{id} | Partial-field update. |
| DELETE | /modes/{id} | Delete Mode (refuses to delete the last one). |
| POST | /transcribe | File path or audio_base64. Drive by mode_id, by engine+model, or mix. |
| POST | /post-process | Rewrite text via preset or free-form prompt. |
| GET | /recordings/search?q=&since=&until=&limit= | Substring search across past transcripts. |
| GET | /recordings/{id} | Single transcript row. |
openapi.yaml.
