sysdesign-board
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SYSDESIGN_PORT | No | Port for the board and HTTP MCP endpoint. Can also be set with --port=5000. | 4321 |
| SYSDESIGN_TOKEN | No | Private token for the HTTP MCP endpoint (/mcp). If not set, a token is generated and stored at ~/.sysdesign-board/token. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| open_boardA | Open the sketch board in the user’s browser and return its URL. |
| start_interviewA | 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). |
| wait_for_candidateA | 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. |
| sayA | Send a message to the candidate. It appears in the board chat and is read aloud. Keep it short and conversational (no markdown). |
| get_boardA | 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. |
| get_board_imageA | 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. |
| annotateA | 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. |
| highlightA | Make components glow on the candidate’s board (e.g. while asking about them). Optionally scroll/zoom their view to them. |
| draw_on_boardB | 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). |
| clear_annotationsB | Remove your pinned comments (all, or specific ids). |
| set_phaseA | 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). |
| end_interviewB | Close the session and show a feedback card on the board. Scores are 1-5. |
| get_transcriptA | Full chat/voice transcript of the current session. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| interview | Run a live system design mock interview on the sketch board. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
Most tools map to clearly distinct actions: say (chat), annotate (pinned comment), highlight (glow), draw_on_board (add shapes), get_board (structured data), and get_board_image (visual) are well separated by their descriptions. Minor overlap exists between open_board and start_interview (which also opens the board), and between the two board-reading tools, but the descriptions resolve these.
The dominant pattern is snake_case verb_noun (open_board, start_interview, get_board_image, clear_annotations, set_phase, end_interview, get_transcript), which is predictable. The bare-verb exceptions (say, annotate, highlight) are simple single-target actions and remain readable, so the deviation is minor.
13 tools sits comfortably in the well-scoped range, and each one covers a distinct facet of a live interview session (conversation, observation, intervention, lifecycle). No tool looks redundant or like filler.
The lifecycle is well covered: start_interview, the wait_for_candidate loop, say, board inspection, annotation, phase tracking, end_interview, and get_transcript. Gaps are minor but real: there is no way to undo or delete interviewer-drawn components (only clear_annotations for pinned comments) and no explicit pause/reset of the timer or session state.