Local web UI for browsing and editing MARM memory. Separate from marm-mcp-server — reads and edits the same SQLite database (~/.marm/marm_memory.db) while MCP keeps running on port 8001.
MCP tools are built for agents (search, log, recall). This dashboard is for you: list memories, delete stale entries, inspect sessions and protocol logs, edit notebook keys.
cd marm-dashboard
pip install -e .
python -m marm_dashboard --openOpen http://127.0.0.1:8002/ (default). Use --open to launch your system browser.
Terminal 1:
cd marm-mcp-server
python -m marm_mcp_serverTerminal 2:
cd marm-dashboard
python -m marm_dashboard --opencd marm-dashboard
pip install -e .
python -m marm_dashboard --openpython -m venv marm-env
source marm-env/bin/activate
pip install -e .
python -m marm_dashboardBoth can run at once (SQLite WAL). The dashboard is a direct SQLite admin UI: edits made here bypass MCP tool events, but use the same tables and sanitization rules.
The status panel also checks the MCP server on 127.0.0.1:8001 every 15 seconds. When HTTP mode is running, it shows reachability, version, status, latency, and last checked time. If MCP is running through STDIO, the panel may show Not on :8001; that is expected because STDIO has no HTTP health endpoint.
| Situation | Dashboard behavior |
|---|---|
No MARM_API_KEY |
Local-only: requests must come from 127.0.0.1 / ::1 (same idea as MCP). |
MARM_API_KEY set (env or ~/.marm/.env) |
All /api/* routes need Authorization: Bearer <key>. Browser shows an unlock screen; key is kept in memory only until the page reloads. |
Docker/local process: use the same MARM_API_KEY as the MCP server. The dashboard reads ~/.marm/.env when the env var is not set.
$env:MARM_API_KEY = "your-key-from-docker-or-env-file"
python -m marm_dashboardBuild:
docker build -t marm-dashboard:local .Run with the same database volume and key as MCP:
$env:MARM_API_KEY = "your-marm-key"
docker run --rm -p 127.0.0.1:8002:8002 `
-e MARM_API_KEY=$env:MARM_API_KEY `
-v ${HOME}\.marm:/home/marm/.marm `
marm-dashboard:localThe image binds to 0.0.0.0 inside the container so Docker port mapping works. Keep the host mapping on 127.0.0.1 unless you intentionally want another machine to reach the dashboard.
| Variable | Default | Purpose |
|---|---|---|
MARM_API_KEY |
(from env, then ~/.marm/.env) |
Same key as marm-mcp-server |
MARM_DB_PATH |
~/.marm/marm_memory.db |
Database file (same as MCP) |
MARM_DASHBOARD_HOST |
127.0.0.1 |
Bind address |
MARM_DASHBOARD_PORT |
8002 |
HTTP port |
Optional embeddings when adding memories (matches MCP semantic search):
pip install -e ".[embeddings]"| Method | Path | Description |
|---|---|---|
| GET | /api/summary |
Counts and DB path |
| GET | /api/mcp-status |
MCP server reachability probe with status, version, latency, and last checked data |
| GET | /api/session-names |
All session names (sessions + memories + logs) |
| GET | /api/sessions |
List sessions (q) |
| POST | /api/sessions |
Create session |
| DELETE | /api/sessions |
Delete all sessions |
| DELETE | /api/sessions/{name} |
Delete single session |
| GET | /api/memories |
List memories (session, q, limit, offset) |
| POST | /api/memories |
Add memory |
| PUT | /api/memories/{id} |
Update memory content and context type |
| DELETE | /api/memories |
Delete all memories (optional session param) |
| DELETE | /api/memories/{id} |
Delete single memory |
| GET | /api/logs |
Protocol log entries (session, q, limit, offset) |
| DELETE | /api/logs |
Delete all log entries |
| DELETE | /api/logs/{id} |
Delete single log entry |
| GET | /api/notebook |
Notebook entries (q) |
| POST | /api/notebook |
Create/update entry |
| DELETE | /api/notebook |
Delete all notebook entries |
| DELETE | /api/notebook/{name} |
Delete single entry |
HTTP auth (MARM_API_KEY) protects the dashboard API. Anyone with direct read/write access to marm_memory.db (volume mount, backup, copy) can still open the database outside this app. Treat the DB file like a secret in Docker.
The UI has no external CDN/font dependency, sends security headers, and keeps the unlock key in browser memory only. Refreshing the page requires unlocking again.
MIT (same as MARM Systems)
