open_board
Open the board
Open the sketch board in the user’s browser and return its URL.
Takes no parameters.
io.github.tGhattasPublished by GitHub account tGhattasv0.1.2Updated Oct 30, 2026
Hand-drawn whiteboard for system design mock interviews; your AI watches, asks and gives feedback.
A local hand-drawn whiteboard where an AI acts as a system design interviewer: it watches your diagram, asks questions aloud and scores you.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Follow the launch instructions in the repository.
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.
Requires Node.js 18+.
The .mcpb one-click file is Claude Desktop only. Every other app runs the same npm package.
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:
Reopen Claude Desktop.
Option C: edit the config yourself (again, with Claude Desktop quit). The file is at:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.jsonOn 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).
Either add the server directly:
Or install the plugin, which also adds an interview skill, from this repo's marketplace. Run these inside Claude Code:
Add this to ~/.codex/config.toml (Windows: %USERPROFILE%\.codex\config.toml):
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.
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.
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.
The board also works without any AI: run npx -y sysdesign-board serve and open http://localhost:4321.
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
The full policy is in PRIVACY.md. In short:
~/.sysdesign-board/. The author runs no server, and there are no accounts, analytics or telemetry.npx downloads the package from npm./mcp requests pass through the tunnel provider.localhost requests from localhost pages. Other websites and tunnels are refused, which also blocks DNS-rebinding attacks./mcp) always requires the token.~/.sysdesign-board/.npx -y sysdesign-board install, then reopen.npx (see Option C), or run npx -y sysdesign-board install, which writes absolute paths for you.SYSDESIGN_PORT (or --port=5000). In the .mcpb extension it's a setting.npm run dev starts the hub on :4321 with reload, and Vite on :5173. Other scripts:
Releasing a new version:
npm version <x.y.z> --no-git-tag-version. This also updates server.json and the plugin's version and pinned dependency.npm publish.npm run lock:plugin. The lockfile needs the published package's checksum, so this comes after publishing.npm run build:mcpb.mcp-publisher publish for the MCP Registry.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 CLIshared/: the data model, component catalog and geometrySource: README.md at commit 2b61d36
Open the board
Open the sketch board in the user’s browser and return its URL.
Takes no parameters.
Start a system design interview
Start a new interview session on the board: sets the problem statement, timer and phase, opens the board, and posts your opening message (spoken aloud to the candidate).
leveltitlerequiredproblemrequiredclear_boardopening_messageduration_minutesListen to the candidate
Block until the candidate says something (typed or by voice), the board changes and then settles, or the timeout passes. Returns what they said, what changed on the board, and interview timing. Call this in a loop between your replies.
timeout_secondsSpeak to the candidate
Send a message to the candidate. It appears in the board chat and is read aloud. Keep it short and conversational (no markdown).
textrequiredspeakRead the board
Structured description of the board: components (type, label, id, position, zone), connections (from -> to, label, dashed=async), zones, notes and text, freehand strokes, plus what changed since you last looked.
include_jsonLook at the board
A PNG picture of the whole board as the candidate sees it (handwriting, sketches, layout). Use when get_board mentions freehand strokes or you need visual context.
Takes no parameters.
Pin a comment on the board
Pin an interviewer comment bubble on the board, pointing at a component (by id or label) or at a position. Great for "what if this fails?" style probes.
xytextrequiredtargetPoint at components
Make components glow on the candidate’s board (e.g. while asking about them). Optionally scroll/zoom their view to them.
focussecondstargetsrequiredDraw on the board
Add components, connections, sticky notes and zones in the same sketchy style (marked as drawn by the interviewer). Use sparingly — the candidate should drive. Component kinds: user (User), browser (Web App), mobile (Mobile App), dns (DNS), cdn (CDN), lb (Load Balancer), gateway (API Gateway), firewall (Rate Limiter), server (App Server), service (Service), worker (Worker), lambda (Function), cron (Scheduler), sql (SQL DB), nosql (NoSQL DB), cache (Cache), storage (Object Store), search (Search Index), warehouse (Data Warehouse), queue (Queue), stream (Event Stream), pubsub (Pub/Sub), notify (Notifications), auth (Auth), monitor (Monitoring), ml (ML Model), external (External API). Connections reference a component by its ref/label (new or existing) or id. Positions are optional (auto-laid out to the right of existing content).
noteszonescomponentsconnectionsRemove interviewer comments
Remove your pinned comments (all, or specific ids).
idsMove to an interview phase
Update the phase tracker the candidate sees: requirements (Requirements), estimation (Estimation), api (API & Data), high-level (High-level), deep-dive (Deep dive), wrap-up (Wrap-up).
phaserequiredEnd the interview with feedback
Close the session and show a feedback card on the board. Scores are 1-5.
scoresrequiredsignalsummaryrequiredstrengthsrequiredimprovementsrequiredConversation transcript
Full chat/voice transcript of the current session.
Takes no parameters.
90% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
npx -y sysdesign-board install{ "mcpServers": { "sysdesign-board": { "command": "npx", "args": ["-y", "sysdesign-board"] } }}claude mcp add sysdesign-board -- npx -y sysdesign-board/plugin marketplace add tGhattas/sysdesign-board/plugin install sysdesign-board@sysdesign-board[mcp_servers.sysdesign-board]command = "npx"args = ["-y", "sysdesign-board"]tool_timeout_sec = 120npx -y sysdesign-board servecloudflared tunnel --url http://localhost:4321npx -y sysdesign-board token{ "command": "npx", "args": ["-y", "sysdesign-board"] }sysdesign-board MCP server over stdio (what AI apps launch)sysdesign-board serve Board + HTTP MCP endpoint onlysysdesign-board install Add to Claude Desktop (quit it first) [--npx | --local]sysdesign-board token Print the HTTP MCP token / URLgit clone <this repo> && cd sysdesign-boardnpm installnpm run dev