Skip to main content
Glama

sketch/design — the system design interview board

A hand-drawn whiteboard for system design mock interviews, plus an MCP server that turns Claude or ChatGPT into your interviewer. It sees your board, listens to you, talks back, pins questions on your components, and ends with scored feedback.

A mock interview in progress: a URL shortener diagram, an interviewer question pinned on Redis, and the voice/text chat

  • Pencil-style canvas: a paper or chalkboard theme, with shapes that look drawn by hand (rough.js + perfect-freehand)

  • 27 system design components: load balancer, API gateway, CDN, cache, SQL and NoSQL databases, object store, queue, Kafka-style stream, pub/sub, workers, serverless functions, auth, monitoring, ML and more

  • Arrows that stay attached to components, with labels, curved or elbow routes, and dashed lines for async flows. Hover a component and drag its blue dot to connect it.

  • Interview panel: the problem, a timer, a phase tracker, chat, voice in (speech-to-text) and voice out (the interviewer's replies are read aloud)

  • The interviewer can read your diagram as structured data, look at a picture of it, pin comments on components, highlight things, sketch reference designs, and grade you at the end

  • Runs entirely on your machine. The AI runs in your own Claude or ChatGPT app, on your existing subscription, with no API keys.

Install

Requires Node.js 18+.

Your AI app

How to connect

Billed to

Claude Desktop

Double-click sysdesign-board-x.y.z.mcpb from Releases, or run npx -y sysdesign-board install

Claude Pro / Max

Claude Code

claude mcp add sysdesign-board -- npx -y sysdesign-board

Claude Pro / Max

Codex CLI

Add it to ~/.codex/config.toml (below)

ChatGPT Plus / Pro

ChatGPT (desktop / web)

Developer Mode connector through a tunnel (below)

ChatGPT Plus / Pro

Cursor, Windsurf, VS Code, others

The standard MCP JSON (below)

Your plan there

The .mcpb one-click file is Claude Desktop only. Every other app runs the same npm package.

Claude Desktop

Option A: one-click. Download the .mcpb file from Releases and double-click it. Claude Desktop shows an install dialog.

Option B: command line. First quit Claude Desktop completely (macOS: ⌘Q; Windows: tray icon → Quit). Claude rewrites its config file from memory when it quits, which would drop the new entry. Then run:

npx -y sysdesign-board install

Reopen Claude Desktop.

Option C: edit the config yourself (again, with Claude Desktop quit). The file is at:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux (unofficial builds): ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "sysdesign-board": { "command": "npx", "args": ["-y", "sysdesign-board"] }
  }
}

On Windows, use "command": "cmd", "args": ["/c", "npx", "-y", "sysdesign-board"]. If Claude can't find npx (common with nvm, Volta or asdf), use the absolute path from which npx (macOS/Linux) or where npx (Windows).

Claude Code

claude mcp add sysdesign-board -- npx -y sysdesign-board

Codex CLI

Add this to ~/.codex/config.toml (Windows: %USERPROFILE%\.codex\config.toml):

[mcp_servers.sysdesign-board]
command = "npx"
args = ["-y", "sysdesign-board"]
tool_timeout_sec = 120

ChatGPT app

ChatGPT connects to MCP servers over public HTTPS, so you run the board locally and expose only its /mcp endpoint through a tunnel. The board itself, its API and its WebSocket refuse any request that doesn't come from localhost.

  1. Start the board, and keep this running:

    npx -y sysdesign-board serve
  2. In another terminal, open a tunnel (here with cloudflared):

    cloudflared tunnel --url http://localhost:4321
  3. Get your private connector token:

    npx -y sysdesign-board token
  4. In ChatGPT, go to Settings → Apps & Connectors → Advanced, enable Developer Mode, then Create a connector with the URL https://<your-tunnel>.trycloudflare.com/mcp?token=<token> and no authentication.

Treat that URL like a password. To change the token, delete ~/.sysdesign-board/token, or set SYSDESIGN_TOKEN yourself.

Any other MCP client

{ "command": "npx", "args": ["-y", "sysdesign-board"] }

Related MCP server: meetey

Use it

Start a new chat and say:

Start a system design interview with me on my sketch board.

Or use the interview prompt from your app's prompt or slash menu. The board opens at http://localhost:4321.

  • Draw your design. Talk with the 🎤 mic (your message is sent when you pause) or type in the panel.

  • The interviewer keeps listening between replies. It is woken by what you say, and when you stop drawing for a few seconds.

  • Click I'm done when you're finished to get a feedback card with scores.

The board also works without any AI: run npx -y sysdesign-board serve and open http://localhost:4321.

Tools the interviewer gets

Tool

What it does

start_interview

Sets the problem, level and duration, opens the board, and speaks the opening line

wait_for_candidate

Waits for your speech or messages, or for board changes once you stop drawing

say

Sends a chat message, read aloud

get_board

Structured diagram: components, connections (with labels; dashed means async), zones, notes, and what changed

get_board_image

A PNG of the whole board (for handwriting and sketches)

annotate / clear_annotations

Pin or remove "INTERVIEWER" comment bubbles on components

highlight

Makes components glow, optionally zooming to them

draw_on_board

Adds components, connections, notes and zones in the same sketchy style

set_phase

Requirements → Estimation → API & Data → High-level → Deep dive → Wrap-up

end_interview

Feedback card with 1–5 scores, strengths and improvements

get_transcript, open_board

Housekeeping

Voice

  • Speech-to-text uses the browser's Web Speech API. Use Chrome, Edge or Safari; Firefox doesn't support it.

  • Text-to-speech uses your system voices. Toggle it with "Voice replies" in the panel. The mic pauses while the interviewer speaks, so it doesn't transcribe itself.

  • The native voice modes inside the ChatGPT and Claude apps can't be piped into another page. Those voice models are only available through paid APIs.

Keyboard

V select · H hand / hold Space · R rect · D diamond · O ellipse · A arrow · L line · P pen · T text · N sticky note · F zone · E eraser · K laser · C components · I interview panel · Q tool lock · G grid snap · ⌘/Ctrl Z undo · ⌘/Ctrl D duplicate · ⇧1 fit · ? all shortcuts

Privacy & security

  • Everything stays on your machine. The board state is saved in your browser and in ~/.sysdesign-board/.

  • The board, its API and its WebSocket only answer localhost requests from localhost pages. Other websites and tunnels are refused, which also blocks DNS-rebinding attacks.

  • The HTTP MCP endpoint (/mcp) always requires the token. stdio clients (Claude Desktop, Claude Code, Codex) don't use it.

  • What you draw and say goes to the AI app you connected, under that app's own terms.

Troubleshooting

  • The server doesn't appear in Claude Desktop. Claude was probably running when the config was edited and saved over it. Quit it fully, run npx -y sysdesign-board install, then reopen.

  • "npx: command not found" in Claude's logs. Use an absolute path to npx (see Option C), or run npx -y sysdesign-board install, which writes absolute paths for you.

  • Port 4321 is taken. Set SYSDESIGN_PORT (or --port=5000). In the .mcpb extension it's a setting.

  • The mic does nothing. Open the board in Chrome, Edge or Safari and allow microphone access.

  • Several apps connected at once? That's fine. The first one hosts the board and the others share it.

CLI

sysdesign-board            MCP server over stdio (what AI apps launch)
sysdesign-board serve      Board + HTTP MCP endpoint only
sysdesign-board install    Add to Claude Desktop (quit it first)  [--npx | --local]
sysdesign-board token      Print the HTTP MCP token / URL

Development

git clone <this repo> && cd sysdesign-board
npm install
npm run dev

npm run dev starts the hub on :4321 with reload, and Vite on :5173. Other scripts:

Command

What it does

npm run build

Builds the board UI and bundles the server into one file

npm run build:mcpb

Packs build/sysdesign-board-<version>.mcpb

npm run typecheck

Type-checks the web and server code

node scripts/mcp-smoke.mjs

Drives every MCP tool against a running board

The code lives in three folders:

  • web/: the board (React UI plus the canvas engine in web/src/engine.ts; renderer and component glyphs in web/src/render/)

  • server/: the hub (HTTP, WebSocket and persistence), the MCP tools and the CLI

  • shared/: the data model, component catalog and geometry

License

MIT

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first meeting capture and transcription for Claude Code. Records audio from meeting apps, transcribes locally with whisper.cpp, and produces structured notes via Claude.
    1
    Apache 2.0
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding assistants to turn architecture and engineering concepts into auto-laid-out, hand-drawn Excalidraw diagrams across 25 types, with natural-language revision and SVG/PNG export. Optionally persists systems as a queryable, version-controlled architecture knowledge graph while running fully offline without API keys.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to turn natural-language descriptions of systems, flows, and data into 25 types of hand-drawn Excalidraw diagrams with automatic layout and architecture-aware styling, then revise them conversationally and export to SVG or PNG. It can also persist a system as a version-controlled, queryable architecture knowledge graph, running fully offline without API keys.
    -