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

Either add the server directly:

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

Or install the plugin, which also adds an interview skill, from this repo's marketplace. Run these inside Claude Code:

/plugin marketplace add tGhattas/sysdesign-board
/plugin install sysdesign-board@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: Excalidraw Architect MCP

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 Policy

The full policy is in PRIVACY.md. In short:

  • What it handles: your board, the interview chat and voice transcripts, your settings, and a local access token.

  • Where it's stored: only on your machine, in the browser's local storage for the board page and in ~/.sysdesign-board/. The author runs no server, and there are no accounts, analytics or telemetry.

  • What leaves your computer:

    • When the AI interviewer calls a tool, the AI app you connected receives the board description, a picture of the board, your messages and your transcripts, under that provider's privacy policy.

    • The mic uses your browser's speech recognition. Chrome sends the audio to Google; Safari uses Apple's speech service.

    • npx downloads the package from npm.

    • With the optional tunnel, /mcp requests pass through the tunnel provider.

  • Security:

    • 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 endpoint (/mcp) always requires the token.

  • Sharing and retention: nothing is sold or shared. Data stays until you clear the board or delete ~/.sysdesign-board/.

  • Contact: open an issue.

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

npm run lock:plugin

Refreshes the Claude plugin's package-lock.json (run after the new version is on npm)

Releasing a new version:

  1. Run npm version <x.y.z> --no-git-tag-version. This also updates server.json and the plugin's version and pinned dependency.

  2. Run npm publish.

  3. Run npm run lock:plugin. The lockfile needs the published package's checksum, so this comes after publishing.

  4. Commit, then tag and push.

  5. Make a GitHub release with npm run build:mcpb.

  6. Run 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 CLI

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

License

MIT

Available Tools

13 tools
annotatePin a comment on the boardA

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.

NameRequiredDescriptionDefault
xNo
yNo
textYes
targetNoElement id or label, e.g. "Redis" or "Load Balancer"

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered structurally. The description adds that the bubble is anchored either to a component or to a board position, which is useful, but it says nothing about persistence, whether annotations are additive, or who sees them during the interview.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the action and anchoring modes, with the use-case hint trailing. No filler, though the quoted probe example is more flavor than information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter, non-destructive create tool with no output schema, the description covers the core anchoring model an agent needs. Remaining gaps (return value, whether target is required alongside or instead of x/y) are minor but real.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 25% (only 'target' is documented), so the description must compensate. It does clarify the key semantic point that a comment points either at a component (by id or label) or at a position, implying target vs. x/y usage, but it leaves x/y coordinate semantics and the 1-400 char text constraint unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Pin an interviewer comment bubble on the board') with the anchoring modes spelled out. It implicitly distinguishes itself from highlight/draw_on_board by being a comment bubble, but never names those siblings to make the distinction explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The clause 'Great for "what if this fails?" style probes' gives a use-case flavor, but there is no explicit guidance on when to pin a comment versus using highlight or draw_on_board, and no stated preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

clear_annotationsRemove interviewer commentsB
DestructiveIdempotent

Remove your pinned comments (all, or specific ids).

NameRequiredDescriptionDefault
idsNo

TDQS

B3.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so the safety profile is covered. The description adds genuinely useful scope information — only *your* pinned comments are affected — but says nothing about irreversibility, confirmation, or what happens to ids that don't exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One short sentence with the operation and its two modes front-loaded; there is no filler and nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool with no output schema, the description plus annotations cover the basics. It still omits the source/format of ids and any warning about the bulk-delete case, which are the two things an agent is most likely to get wrong here.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single `ids` parameter has no schema description, so the description must compensate. It does convey the key semantic (omitting ids removes all comments, otherwise only the listed ones), but never explains the expected id format or where ids can be obtained (e.g., from a board or annotate response).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Remove") and a specific resource ("your pinned comments"), and the parenthetical confirms scope. It doesn't differentiate itself from the sibling `annotate`, and it silently switches terminology across name (annotations), title (interviewer comments) and description (pinned comments), which leaves minor ambiguity about whether these are the same objects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description only explains the two invocation modes (all vs. specific ids); it never says when to use this tool versus alternatives such as `annotate`, and gives no prerequisites or caution about clearing everything. Any routing decision is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

draw_on_boardDraw on the 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).

NameRequiredDescriptionDefault
notesNo
zonesNo
componentsNo
connectionsNo

TDQS

B3.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare this is a non-read-only, non-destructive, closed-world mutation, so the description does not need to restate safety. It usefully adds that content is drawn in a sketchy style and attributed to the interviewer, and that layout is automatic, but it does not describe mutation side effects, validation, or return behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the core action and usage warning, then moves into necessary component-kind enumeration and layout/reference details. The long kind list earns its place because the schema has no enums, though the paragraph is dense.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a four-array mutation tool with no output schema, the description leaves important gaps. It does not explain notes and zones structures in enough detail, does not clarify return behavior or validation, and does not distinguish this tool from annotate/highlight.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry meaning for four nested array parameters. It does a good job listing component kinds and explaining that connections reference components by ref/label/id, and that positions are optional, but it barely explains notes fields, zone containment, or connection options like dashed and bidirectional.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action and resource: adding components, connections, sticky notes, and zones to the board. It distinguishes the output style as sketchy and interviewer-authored, though it does not explicitly differentiate this tool from siblings like annotate or highlight.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives one clear usage rule: use sparingly because the candidate should drive. However, it does not explain when to use draw_on_board versus annotate, highlight, or clear_annotations, nor does it provide explicit when-not guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

end_interviewEnd the interview with feedbackB

Close the session and show a feedback card on the board. Scores are 1-5.

NameRequiredDescriptionDefault
scoresYes1 = poor, 3 = meets bar, 5 = exceptional
signalNoe.g. "Lean hire (senior)"
summaryYes2-4 sentence overall assessment
strengthsYes
improvementsYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, destructiveHint=false, openWorldHint=false, so the agent knows this mutates local state non-destructively. The description adds that it closes the session and renders a feedback card, which is useful context, but it does not say whether closing is reversible, what happens to the session transcript, or what validation failures look like.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core action. The second sentence is largely redundant with the schema's min/max and could be cut, but there is no padding or bloat beyond that.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a nested-object, 5-parameter mutating tool with no output schema, so it needs more than two sentences. It conveys the user-visible outcome (a feedback card appears) but says nothing about the narrative fields the caller must supply (strengths, improvements, summary format) beyond the schema's own hints.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Coverage is 60%, and the only parameter-related sentence, 'Scores are 1-5,' merely restates the schema's minimum/maximum constraints. The description adds nothing about the required summary, strengths, or improvements arrays (both capped at 6 items with no schema descriptions), leaving real gaps for the caller.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: 'Close the session and show a feedback card on the board.' An agent can distinguish this terminal action from start_interview or say without opening the schema. It does not explicitly name a sibling or exclusions, so it stops short of 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied – 'Close the session' suggests it is the final step of an interview flow, but there is no explicit when/when-not guidance, no mention of prerequisites (e.g., an active interview must exist), and no reference to alternatives like set_phase.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_boardRead the boardA
Read-only

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.

NameRequiredDescriptionDefault
include_jsonNoAlso return raw element JSON (verbose)

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds real value beyond that: it discloses the returned field set (including dashed=async connection semantics) and the stateful delta behavior ('changed since you last looked'), neither of which appears in the annotations or schema. It does not mention verbosity trade-offs of include_json, which the schema covers separately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the deliverable and then a tight parenthetical enumeration of exactly what the structure contains. No filler, no repetition of the title.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must carry the return shape — and it does, enumerating the top-level sections and key fields. The remaining gap is that 'what changed since you last looked' is undefined (delta against which baseline, and what happens on the first call), which matters for a stateful read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single parameter include_json is documented in the schema as 'Also return raw element JSON (verbose)'. The description adds nothing about it, so this sits at the baseline 3 — the schema does all the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (the board) and specifies the shape of the returned structure — components with type/label/id/position/zone, connections with direction and dashed=async, zones, notes, strokes, plus a delta. That is far more specific than the title 'Read the board'. It stops short of explicitly contrasting with get_board_image, which is the obvious sibling, so it doesn't fully earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: 'what changed since you last looked' hints this is the tool to re-poll board state, but there is no explicit when-to-use, no exclusions, and get_board_image is never named as the alternative for a visual read. The agent must infer the routing from the sibling's name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_board_imageLook at the boardA
Read-only

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.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so safety is covered; the description adds the useful facts that the payload is an image in the candidate's own view. It does not say whether the image is a current snapshot, its size, or whether repeated calls re-render, which are minor remaining gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences: the first defines the artifact, the second defines when to reach for it. Nothing redundant, and the key scoping fact (whole board, candidate's perspective) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-argument tool with no output schema, the description adequately conveys the return medium and content. Only freshness/staleness of the snapshot is unaddressed, which is a small but real gap given the tool returns a visual state.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing the description needs to disambiguate; baseline applies. No parameter-related claims are made or needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States exactly what is returned: a PNG image of the whole board as the candidate sees it, including handwriting, sketches and layout. This clearly separates it from the text-oriented get_board sibling without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives two explicit triggers — get_board reports freehand strokes, or visual context is needed — and names the sibling it complements. An agent can decide between the text and image views from the description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_transcriptConversation transcriptA
Read-only

Full chat/voice transcript of the current session.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds scope detail (chat and voice, current session, 'Full' implying completeness) but says nothing about return shape, ordering, or truncation behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single short sentence, front-loaded, with no redundant wording. Every word carries information about content type, modality, and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-parameter read tool with no output schema, the description is nearly sufficient: it states what is returned and its scope. It could say a bit more about the return structure (e.g., message list vs. flat text), which is the only remaining gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline is 4. There is no parameter meaning the description could add or omit.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource and its scope precisely: a full chat/voice transcript of the current session. It lacks a verb and does not explicitly differentiate itself from siblings like get_board or say, but the resource is distinct enough that an agent can pick it out.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to call this versus alternatives such as get_board or the conversation tools. The only implied cue is the word 'current session', which mildly bounds usage but does not state conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

highlightPoint at componentsA
Idempotent

Make components glow on the candidate’s board (e.g. while asking about them). Optionally scroll/zoom their view to them.

NameRequiredDescriptionDefault
focusNo
secondsNo
targetsYesElement ids or labels

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover idempotency, non-destructiveness, and that this is not a plain read. The description adds genuine behavioral context: the effect lands on the candidate's board (a side effect on another user's view) and can optionally move their viewport. However, it says nothing about persistence — whether the glow is momentary, tied to 'seconds', or how to remove it — which matters for a tool that mutates a shared surface.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the core effect and followed by the optional viewport behavior. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and only three parameters, but the description leaves out the duration semantics of 'seconds' and whether the glow persists after the call, so an agent cannot fully predict the tool's effect on the candidate's board.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 33%: only 'targets' is documented ('Element ids or labels'). The description explains 'focus' implicitly via 'scroll/zoom their view to them', but 'seconds' (1-20) is never mentioned in either the schema or the description, so its meaning — presumably highlight duration — is left entirely to inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource — making components glow on the candidate's board — with a concrete example use case. An agent can tell this is a presentational 'point at' action, distinct from siblings like annotate or draw_on_board, though it never names those alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '(e.g. while asking about them)' implies when to use it, but no explicit when-not, no prerequisites, and no comparison to draw_on_board / annotate / open_board. The agent must infer the boundary between highlighting and drawing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_boardOpen the boardA
Idempotent

Open the sketch board in the user’s browser and return its URL.

NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=true, destructiveHint=false, and the description adds the key real-world effect: a browser window is opened on the user's machine (a side effect on the user's environment, consistent with readOnlyHint=false) and a URL is returned. Auth requirements and failure modes are unstated, but the core behavior is disclosed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence, front-loaded with the action and ending with the return value. No filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description covers the action, the side effect, and the return value (URL). Missing only marginal detail such as behavior when no board exists or whether the browser must be available, which slightly limits completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, which is the correct baseline of 4; there is nothing to disambiguate and the description doesn't waste words on inputs.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

A specific verb (open) and resource (sketch board) with a clear effect: launch it in the user's browser and return the URL. That implicitly separates it from get_board/get_board_image, which fetch board data rather than opening a UI, though no sibling is named explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description never states when to use this instead of get_board or get_board_image, nor any precondition (e.g., board must exist, user must have a session). The choice among the three board-related siblings is left entirely to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

saySpeak to the candidateA

Send a message to the candidate. It appears in the board chat and is read aloud. Keep it short and conversational (no markdown).

NameRequiredDescriptionDefault
textYes
speakNoRead aloud (default true)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only tell the agent this is a non-read-only, non-destructive, closed-world call. The description adds genuinely useful behavior: the message is both displayed and read aloud, and it must be short and markdown-free. It does not mention the optional `speak` toggle or delivery failure modes, keeping it just short of a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences: purpose first, then effect, then authoring constraint. Every sentence carries actionable information; nothing to trim.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

No output schema and a simple two-parameter tool, so the description covers most of what is needed. The one gap is the `speak` flag, which silently alters the spoken side effect described as unconditional.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

`text` has no schema description and the description only indirectly constrains it ('short and conversational (no markdown)'), which is real guidance. However, the `speak` parameter is never referenced in the description despite shaping the primary side effect, so half the parameters remain under-explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Send a message to the candidate') plus the two observable effects: it lands in the board chat and is spoken aloud. No sibling tool does anything similar, so an agent can route to it immediately.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied by 'candidate' and 'board chat' — this is an in-interview communication tool — but there is no explicit when-to-use or when-not (e.g., don't use it to answer board-level questions, or whether it can be called outside an active interview). Adequate but leaves routing to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_phaseMove to an interview phaseA
Idempotent

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).

NameRequiredDescriptionDefault
phaseYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact not in the annotations: the change is candidate-visible on a tracker, i.e. it has a UI side effect. It omits ordering prerequisites and whether advancing a phase affects scoring or the transcript.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence naming the effect first, then the allowed values. The inline label repetition ('wrap-up (Wrap-up)') is slightly redundant but costs little.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-required-param mutation on a well-annotated tool with no output schema, the description covers purpose, target state and allowed values. Nothing an agent needs in order to invoke it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must carry the load, and it does partially by expanding enum tokens into human labels ('api' -> 'API & Data', 'high-level' -> 'High-level'). However, the mapping is terse and adds little beyond the enum values themselves, and nothing is said about whether the phase must progress in order or can jump backward.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Update') and resource ('the phase tracker the candidate sees'), and enumerates the six phase values, so the effect is unmistakable. It does not explicitly contrast itself with start_interview or end_interview, which are the obvious adjacent lifecycle siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is only implied: an agent can infer this is called mid-interview to advance the candidate-visible phase, but the description never says when to call it, whether it must follow start_interview, or what to do instead if the interview has not started.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_interviewStart a system design interviewA
Destructive

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).

NameRequiredDescriptionDefault
levelNo
titleYesShort problem title, e.g. "Design a URL shortener"
problemYesThe prompt as you would say it to the candidate, plus any constraints you want to reveal up front
clear_boardNoWipe the board first (default false)
opening_messageNoYour first spoken line, e.g. a greeting and the problem
duration_minutesNoDefault 45

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds real side-effect disclosure the annotations cannot convey: the board is opened and the opening message is spoken aloud to the candidate, so the agent knows an audio/observable action occurs. The destructiveHint=true flag is not explained though — the description never says what starting a session destroys or overwrites (e.g. an in-progress session).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single sentence, front-loaded with the action and then the concrete effects, with zero filler. The parenthetical about audio delivery earns its place by flagging a non-obvious side effect.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter setup tool with an output-schema-free contract and annotations covering safety, the description covers the composite actions well. It omits what happens if a session is already running and whether the tool returns a session identifier or blocks awaiting the candidate, which are gaps but not crippling ones.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the schema already documents nearly every parameter, including examples for title, problem, and opening_message. The description only loosely maps its phrases to parameters ("problem statement", "timer") and adds no format or default detail beyond the schema; baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb + resource ("Start a new interview session on the board") followed by an enumeration of exactly what it creates: problem statement, timer, phase, opened board, and opening message. This clearly separates it from siblings like open_board, set_phase, and say, which each do only one of these steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The framing "Start a new interview session" plus the fact that it rolls board-open + phase/timer setup + opening line into one call implicitly tells the agent to use this instead of chaining those siblings individually. However, it never states when-not to use it (e.g. resuming an existing session) or names an alternative explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

wait_for_candidateListen to the candidateA
Read-only

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.

NameRequiredDescriptionDefault
timeout_secondsNoDefault 45. Keep under your client’s tool timeout.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark it readOnly and closed-world, and the description adds important behavioral context: it blocks, waits for speech or board settling, and returns conversation, board changes, and timing. It does not describe cancellation, failure modes, or rate-limit behavior, so a 4 is appropriate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the blocking condition and return values, then the loop instruction. Every sentence contributes directly to correct invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description usefully explains what is returned and how to use the tool in a loop. It is nearly complete for a blocking wait tool, though it could say more about what happens on timeout or errors.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the single timeout_seconds parameter already documents its default and maximum. The description only references the timeout conceptually and does not add parameter-specific meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific blocking-wait behavior and enumerates the three conditions it waits on: candidate speech, board change settling, or timeout. It also states what is returned, making it clearly distinct from sibling tools like get_board, get_transcript, and say.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs the agent to call this in a loop between replies, which is strong usage context. It does not name alternatives or exclusions, such as when to prefer get_transcript or get_board instead, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updatesv0.1.2
    • First observedannotate
    • First observedclear_annotations
    • First observeddraw_on_board
    • First observedend_interview
    • First observedget_board
    • First observedget_board_image
    • First observedget_transcript
    • First observedhighlight
    • First observedopen_board
    • First observedsay
    • First observedset_phase
    • First observedstart_interview
    • First observedwait_for_candidate

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • 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.
    -
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI coding assistants to turn architectural and conceptual descriptions into fully laid-out, hand-drawn Excalidraw diagrams across 25 diagram types, with automatic technology-aware styling, natural-language revisions, and SVG/PNG export. It can also persist systems as a queryable, version-controlled architecture knowledge graph while running entirely offline without API keys.
    -