Automated screenshots of the McpMux desktop app for docs and marketing.
# 1. Build the desktop app (required — E2E runs against the release binary)
pnpm build
# 2. (Optional) Start the discover web UI for web screenshots
cd ../mcpmux.discover.ui && pnpm dev &
# 3. Run the screenshot capture spec
pnpm exec wdio run tests/e2e/wdio.conf.ts --spec tests/e2e/specs/capture-screenshots.manual.ts| Screenshot | Page | Type | Content |
|---|---|---|---|
dashboard.png |
Dashboard | content area | Gateway status, stats cards, client config snippet |
servers.png |
My Servers | content area | Installed servers with connection states |
discover.png |
Discover | content area | Server registry (mock bundle with 14 servers) |
spaces.png |
Spaces | content area | Workspace cards (default + 5 additional) |
featuresets.png |
FeatureSets | content area | Permission bundles |
clients.png |
Clients | full window | OAuth consent modal over connected clients (Cursor, VS Code, Windsurf, Claude Code) |
settings.png |
Settings | content area | App settings page |
| Screenshot | Content |
|---|---|
featureset-detail.png |
Feature set panel with permission checkboxes |
client-detail.png |
Client detail panel with Permissions section (Quick Settings collapsed) |
client-permissions.png |
Client panel with Effective Features section expanded (resolved tools/prompts/resources) |
server-expanded.png |
Server card expanded showing tools, prompts, resources |
space-switcher.png |
Sidebar with space switcher dropdown open (full window) |
install-modal.png |
Server install modal from registry |
| Screenshot | Content |
|---|---|
discover-web.png |
Discover web UI (Next.js site — requires dev server on port 3000) |
Screenshots are saved to two locations:
mcp-mux/docs/screenshots/— Used by the project READMEmcpmux.discover.ui/public/screenshots/— Used by the discover website
- Page screenshots capture the
<main>content area only (excluding sidebar and titlebar) for maximum readability when displayed on the website - Detail screenshots capture specific elements (modals, panels) for feature-focused views
- Full-window screenshots are used only when sidebar context is valuable (e.g., space switcher)
- Window size is 1600×1000 — content area is ~1360×964
All screenshot mock data lives in a single file:
tests/e2e/mocks/screenshot-preseed.ts
This controls:
- Spaces created (name, icon)
- Servers installed and enabled (by ID from
fixtures.ts) - FeatureSets created (name, description)
OAuth client registrations are defined in capture-screenshots.manual.ts itself (the OAUTH_CLIENTS constant).
Server icons use real GitHub avatar URLs matching the production server definitions in mcp-servers/servers/*.json.
After editing, re-run the capture command above.
- The E2E framework launches the Tauri app with a mock bundle API (port 8787)
- The
before()hook seeds data viawindow.__TAURI_TEST_API__(spaces, servers, feature sets) - OAuth clients are registered via DCR POST to the gateway and then approved
- Each
it()block navigates to a page, optionally opens a panel/modal, and saves a focused screenshot - The discover-web screenshot navigates to
localhost:3000(Next.js dev server)
- This spec uses
.manual.ts(not.wdio.ts) so it is excluded frompnpm test:e2e— it only runs when invoked explicitly - Server definitions come from
tests/e2e/mocks/mock-bundle-api/fixtures.ts - The app must be built before running (
pnpm build) — the signing error is non-blocking - For discover-web screenshots, start the discover UI dev server first:
cd ../mcpmux.discover.ui && pnpm dev