Skip to content

Architecture

Svwergio_mel edited this page Nov 12, 2026 · 1 revision

Architecture

How the three Chat Export repos connect on your machine: Chrome extension (logged-in provider tabs), local MCP server on 127.0.0.1, and optional operator dashboard. All automation uses the MV3 extension bridge in your browser profile — not Chrome DevTools MCP and not cloud vendor APIs for chat ops.

Related: Installation and Quickstart · Native, Docker, and Kubernetes Deployment · Dashboard and security · Use cases · RU

Product stack (extension + server + agent)

The extension injects export UI and talks WebSocket to the server when the bridge is enabled. MCP clients (Cursor, Claude Desktop, Open WebUI, local LLMs, etc.) call HTTP MCP on the same host. Dashboard static UI is served by the server at /dashboard/ when embedded.

flowchart LR
  subgraph browser [Your Chrome]
    EXT[Chat Export extension]
    TABS[Provider web tabs]
    TABS <--> EXT
  end
  subgraph local [127.0.0.1]
    SRV[chat-export-server]
    DASH[Dashboard /dashboard]
    SRV --- DASH
  end
  subgraph agent [Your IDE]
    MCP[Cursor / MCP client]
  end
  EXT <-->|WebSocket ceb_| SRV
  MCP <-->|HTTP MCP cem_/cek_| SRV
Loading

Tokens: ceb_ — extension WebSocket (/ws); cem_ / cek_ — MCP (/mcp). Plaintext keys are shown once; only hashes are stored server-side for MCP keys.

Server hub (jobs, cache, MCP, dashboard API)

The browser hub accepts one or two Chrome profiles (ceb_ connections), enqueues long work per browser lane, persists a SQLite chat cache, exposes MCP tools, and serves dashboard APIs.

flowchart TB
  EXT[Chrome extension] <-->|WS /ws ceb_| HUB[Browser hub]
  HUB --> Q[Job lanes per browser]
  Q --> MCP[MCP /mcp]
  MCP --> AGENT[Cursor etc. cem_/cek_]
  HUB --> API[Dashboard /dashboard/api]
  API --> UI[Dashboard static UI]
  Q --> DB[(SQLite cache + WAL)]
Loading

Endpoints (typical): /ws and /ext — extension; /mcp — MCP; /health — probe; /dashboard/ — operator UI; /dashboard/api — authenticated dashboard RPC.

Operator dashboard (control plane)

The dashboard is static React built into the server tree. The operator's browser loads UI assets; session cookie ce_dash_sid gates API calls to the same origin.

flowchart LR
  USER[Operator browser]
  USER --> DASH[/dashboard UI/]
  DASH --> API[/dashboard/api/]
  API --> SRV[chat-export-server core]
  SRV --> EXT[Extension WS]
Loading

Wire path (prose)

  1. Manual export — content scripts read the live DOM in provider tabs; downloads use chrome.downloads only. No server required.
  2. MCP automation — MCP client → POST Streamable HTTP on /mcp → server enqueues jobs → WebSocket RPC to extension → in-tab actions (list, get, export, create, ask, delete with gates).
  3. Dashboard — browser session to /dashboard/ → API on /dashboard/api → same process as MCP (read-only monitoring + token/browser management).

Protocol schemas: packages/protocol/ in chat-export-server.

Deploy surfaces

Surface Where documented
Native CLI (chat-export-server start) Installation and Quickstart, server README
Docker / Colima Native and Kubernetes Deployment
Kubernetes (deploy/k8s) Native and Kubernetes Deployment, server deploy/k8s/README.md
Split nginx front (optional) Dashboard and security, dashboard README

Legal and ToS

Two-tier consent in the extension (LEGAL.md): general export disclaimer and advanced MCP / automation opt-in. See Home — Legal & Two-Tier ToS.

Clone this wiki locally