The dashboard at http://localhost:3444/ is where everything is managed. It is a plain web page — no build step, and it polls so you can watch indexing happen. It asks you to sign in first, and what you see afterwards depends on your account.
Signing in
Opening / sends you to /login unless you already have a session in that browser. Sign in with the
account the operator gave you; on a brand-new instance there is no account yet and you are sent to
/setup instead, to create the first one with the code from the server log. Both are covered in
Accounts and Permissions.
If your password is a temporary one, the dashboard sends you to /change-password and nothing else
works until you replace it.
What you see once you are in follows your role: a root or admin account sees every project and the
Users page, a member account sees only the projects it was added to, and buttons it may not press
are not drawn at all.
Account menu
Top right, showing your name and a pill with your role:
| Item | What it does |
|---|---|
| Change password | Asks for your current password, then the new one twice. Saving it signs out your other sessions |
| Users | The account list — root and admin only. See The Users page |
| Sign out | Ends this session on the server, not just in this browser |
Top bar
The status pills tell you whether the server is healthy before you look at anything else:
| Pill | Meaning |
|---|---|
| Database up / down | The embedded PostgreSQL is reachable |
| Model ready / loading | The embedding model is loaded. On a first start this says loading while it downloads — indexing and search do not work until it is ready |
local · Xenova/paraphrase-… · 384d |
The embedding provider, model and vector dimensions currently in use |
n open sessions |
MCP clients connected right now |
v0.2.0 |
The running version |
Project list (left)
Every project with its live status: idle, indexing, queued or error. Each row shows the number
of sources, the document and chunk counts and when it was last indexed. While a project indexes, the
row grows a progress bar with the current phase, files done and chunks embedded. A queued project tells
you which project it is waiting for.
- Filter projects — type to narrow the list.
- New project (or press
n) — opens the creation dialog.
Project detail (right)
Header
The project name, its status, and the MCP URL with a copy button — this is the string you paste into your agent’s configuration. Next to it, the names of the project’s sources.
Three actions:
| Button | What it does |
|---|---|
| Re-index | Queues an incremental run: sync every source, re-embed only what changed |
| Force re-index | Drops every chunk of the project and rebuilds from scratch |
| Delete | Removes the project, its documents, chunks and files. Click twice to confirm |
While a run is in progress a callout shows the phase, the progress bar, how many files were unchanged and how many chunks were embedded. If the last run failed, a red callout shows the error verbatim.
Statistics
Documents (and across how many sources), chunks, when it was last indexed (with what that run changed), and the embedding model. If the project was indexed with a different model than the server now runs, a warning appears here and search is refused until you re-index.
Document sources
One row per source: its mount name, where it comes from, its content type, document count, when it last synced, and its own status. Each row carries:
| Action | Available for | What it does |
|---|---|---|
| Test | git, Notion | Checks the connection without indexing anything |
| Sync | all | Queues an index run (every source syncs at the start of one) |
| Edit / Files | all | Opens the source dialog; for uploads, lists and manages the stored files |
| Delete | all | Removes the source, its documents and its files. Click twice to confirm |
Add source opens a dialog with one tab per kind — Local directory, Git repository, Upload files, Obsidian vault, Notion. See Document Sources.
Members
Who reaches this project, beyond the root and admin accounts that reach every project and are
therefore not listed. Each row is a member account with a dropdown holding its project role —
viewer reads, editor changes sources, uploads files and re-indexes — and a Remove button.
Add member offers the active member accounts that are not on the project yet; if there are none
it points you at the Users page. Only root and admin can change any of it; everyone else sees the
list read-only. A note at the foot of the panel repeats that membership governs the dashboard, not the
MCP endpoint. See Accounts and Permissions.
MCP access
A pill says which of the three modes this project’s endpoint is in — open, readable by anyone who
can reach the URL; token required, the default for a newly created project; or account required,
where only an account that is a member of the project is answered, over OAuth 2.1 and re-checked on
every request. The panel flips
between them; New token mints one and shows its secret once, and Revoke cuts its client off
mid-session. Each row shows a token’s
name, its leading characters, and when it was last used. Buttons you are not allowed to press are not
drawn: flipping the mode needs manager rights over the project, minting and revoking an editor’s. See
Projects.
Connect an agent
Copy-paste snippets for Claude Code, Cursor, Claude Desktop and legacy SSE clients, filled in with this
project’s real URL — and with the Authorization header already in place when the project requires a
token. See Connecting AI Clients.
Tools exposed to the agent
A reminder of the three tools every project publishes: search_docs, list_topics, read_document.
See MCP Tools.
Index runs
The recent run history, newest first: when, incremental or force, what changed
(12 unchanged · 3 updated · 1 removed), and how long it took. Failed runs show their error. This
survives restarts, unlike the live progress view.
Keyboard and small conveniences
nopens New project (when no dialog is open).Esccloses a dialog.- The selected project is in the URL hash (
#/my-project), so you can bookmark or share a link to it. - Destructive buttons require a second click, and the confirmation expires after a few seconds.
- Copy buttons fall back to a manual selection if the browser blocks the clipboard on a plain-HTTP LAN address.
Footer
Every page of the dashboard ends with the same two-part footer. On the left, the copyright line with the running version: Copyright © 2026 Contextator v0.2.0 is a Tunedness production. On the right, five pages that open as ordinary URLs and need no account:
| Page | What it is |
|---|---|
/about |
What Contextator is, how it works, and who builds it |
/privacy |
What your installation stores, and the outbound calls the software can make |
/cookies |
The one cookie there is — the session that keeps you signed in — and what it is not |
/terms |
Warranty disclaimer and what running an instance makes you responsible for |
/license |
The AGPL in short, the full text at /license.txt, and the third-party components |
They are public on purpose: a legal notice only the operator can read is not a notice. They expose no project data and reach neither the database nor the API.
The Users page
Account menu → Users (#/~users), for root and admin accounts only. One row per account: its
username and display name, its role, whether it is active, disabled or has a password change
pending, how many projects it reaches, and when it last signed in.
| Button | What it does |
|---|---|
| New user | Opens the creation dialog |
| Edit | Display name, e-mail, role, and the active switch |
| Reset password | Hands out a new temporary password, shown once, and signs that account out everywhere |
| Disable / Enable | A disabled account cannot sign in, and its open sessions end at once |
| Delete | Removes the account, its sessions and its memberships. Click twice to confirm |
New user asks for a username (lowercase, permanent), an optional display name and e-mail, a role —
member or admin, with root offered only to a root account — and a password. Leave the password
empty, or press Generate, and the server makes one. Either way it is shown once, in a dialog
with a copy button, and Must change password at first sign-in is ticked by default.
There is no separate button for ending someone’s sessions: Reset password, Disable and Delete each do it as part of what they are.
A button you may not press is greyed out and says why when you hover it — the last active root account, your own row, or a root account when you are an admin. The full set of rules is on Accounts and Permissions.