Skip to main content
Glama

whiteboard-mcp

A live whiteboard your coding agent draws on while it explains things to you.

Ask "how does login work here?" and instead of a wall of text, your agent sketches it on a whiteboard next to the chat, step by step, pointing at the parts it's talking about. You can draw back or leave a note, and the agent sees it on its next turn.

The agent draws a login flow step by step, highlights the parts it explains, then answers a note left by the human

Works with Claude Code, Codex, Cursor, Gemini CLI, OpenCode, Devin, VS Code, and any other MCP client. Agents without MCP can use the plain CLI.

What it can do

Explain step by step

The agent opens a board for the topic, draws one idea at a time (components, then the flow between them, then notes) and highlights what it's talking about. Arrows stay attached to boxes, so the agent can move and restyle things without redrawing. It can also take a screenshot of the board to check its own layout.

Listen when you draw back

It's your board too. Circle something, scribble a question, move a box, or press Note to send a message. On its next look the agent gets a short list of exactly what you changed:

Human changes since your last read:
Added (2):
  freedraw "RSPj…" hand sketch (1345,193) 254×140 stroke #e03131
  text "2CLo…" "single point of failure?" (1090,92) stroke #e03131

MCP can't interrupt the agent mid-turn, so after you draw, just tell it to "look at the board".

Quick diagrams from Mermaid

For sequence diagrams and quick flowcharts the agent can write Mermaid and get an editable hand-drawn diagram:

Keep and share boards

  • One board per chat, named after the topic and saved on disk, so it's still there after a restart.

  • Any later chat can open another chat's board by name: "open the auth architecture board". It looks in this project first, then everywhere, so it also works in apps that start every task in a new folder (like Codex desktop).

  • Save a frozen copy to your library from the board's menu, with Cmd/Ctrl+S, or by asking the agent. Any later chat, in any project, can search your boards by the text on them and load a copy.

  • Export any board as .excalidraw (open it at excalidraw.com) or .png.

More in docs/boards.md.

Light and local

  • One runtime dependency (ws), no native addons, nothing to compile.

  • A small shared background process serves every agent session and exits when idle.

  • Everything stays on your machine: local-only server, token-protected, fonts bundled. Details in docs/security.md.

  • Eleven compact tools, about 7 KB of schema per turn, so it barely touches your context window.

Related MCP server: Napkin

Quick start

Requires Node.js 20+.

1. Install

git clone https://github.com/ansuman-shukla/whiteboard-mcp && cd whiteboard-mcp
npm install && npm run build

2. Add it to your agent (Claude Code shown; replace /abs/path with your clone's path)

claude mcp add whiteboard --scope user -- node /abs/path/dist/cli.js

Codex, Cursor, Gemini CLI, OpenCode, Devin, VS Code, Claude Desktop and agents without MCP: see docs/clients.md.

3. Ask for a drawing

The board opens in your browser, or in a tab beside the chat in VS Code, Cursor, Windsurf and Devin Desktop (details). A few things to try:

  • "Explain how a request flows through this repo, on the whiteboard."

  • "Sketch the state machine in src/checkout.ts."

  • "Compare option A and option B side by side on the board."

  • "I drew something on the board, take a look."

Optional:

  • Using VS Code, Cursor or Windsurf? Install the IDE panel extension to get boards in an editor tab beside the chat instead of the browser.

  • Install the bundled skill (skills/whiteboard-explainer/) so the agent knows when a drawing helps and how to explain well. See docs/clients.md.

Tools

Tool

What it does

canvas_open

Show this chat's board, give it a title, open another chat's board (this project first, then any folder), or load a saved copy

canvas_draw

Create or update shapes, text, labelled arrows bound to shapes, frames

canvas_read

Describe the board, plus what you changed and noted since the agent last looked

canvas_focus

Scroll your view to some elements and pulse a highlight around them

canvas_screenshot

PNG of the board so the agent can check its layout

canvas_mermaid

Turn a Mermaid diagram into hand-drawn elements

canvas_delete

Delete elements, or clear the board

canvas_export

Save the board as .excalidraw or .png in your project

canvas_save

Save a frozen copy of the board to your library, so later chats can find it

canvas_search

Find other chats' boards and saved copies, in every folder, by name or the text on them

canvas_guide

Short guide for the agent on explaining well (layout, colours, sizes)

Every tool result also tells the agent when you've changed something since its last canvas_read.

How it works

 you ◀──── chat ────▶ coding agent
  │                        │ MCP (stdio) or CLI
  │                        ▼
  │                whiteboard-mcp ── HTTP + token ──▶ canvas daemon (127.0.0.1)
  │                                                     │  JSON files on disk
  └──── draws / watches ◀──── WebSocket ──── Excalidraw viewer

Each agent session runs its own small MCP server. They all talk to one shared daemon on 127.0.0.1, which stores boards as JSON and syncs them live with the Excalidraw viewer in your browser or editor.

Docs

  • Client setup: every supported agent, the CLI, and the skill

  • Boards: which board a chat gets, finding and saving boards, and which window it shows up in

  • IDE panel: boards in a tab beside the chat in VS Code, Cursor and Windsurf

  • Configuration: environment variables and CLI commands

  • Security

  • AGENTS.md: architecture notes for contributors

Development

npm install
npm run typecheck   # server + viewer
npm test            # unit + integration (builds dist/ first)
npm run build       # viewer (Vite) + server (tsc)
npm run test:e2e    # Playwright: real daemon + viewer in Chromium
npm run check       # everything
npm run build:vscode  # IDE panel extension (.vsix), see docs/ide-panel.md

License

MIT. The canvas is built on Excalidraw (MIT).

Available Tools

11 tools
canvas_deleteA

Delete elements by id (arrows bound to them are detached), or everything with all:true.

ParametersJSON Schema
NameRequiredDescriptionDefault
allNoClear the whole board
idsNoElement ids

TDQS

A3.5/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It does add real behavioral value by disclosing a side effect — 'arrows bound to them are detached' — but it omits whether deletion is permanent/undoable, what happens to ids that don't exist, and what the response contains.

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 that front-loads the primary mode and appends the alternative, with zero wasted words.

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 destructive, annotation-free tool with no output schema, the description is only partially adequate: it covers the two modes and one side effect but leaves the safety profile (permanence, recovery, required permissions) unaddressed.

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%, so both parameters are already documented in the schema. The description only restates them ('by id', 'all:true') without adding format, ordering, or edge-case semantics beyond what the schema provides, so baseline 3 applies.

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 (delete) and resource (canvas elements/board) with both operating modes spelled out ('by id' vs 'all:true'). It is clearly distinguishable from read/draw/search siblings by the verb alone, though it never names a sibling boundary explicitly.

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 two modes are described ('Delete elements by id ... or everything with all:true'), which implies when each parameter applies, but there is no guidance on when to prefer targeted deletion over clearing the board, and no warning about irreversibility or confirmation before use.

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

canvas_drawA

Create or update elements. Re-using an id updates only the given fields. Arrows bind with from/to element ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
elementsYesElement specs

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the whole burden. It correctly discloses that updates are partial merges keyed on id and that arrows bind by from/to ids, but says nothing about return values (notably the auto-generated ids an agent needs in order to link arrows), batch limits, or failure behavior when an id is unknown.

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, each carrying a distinct rule, with the primary create-or-update purpose front-loaded. Nothing is padded or redundant.

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 single batch parameter with a rich 200-item element spec, the description covers the two most important semantics. The key omission is what the call returns — particularly generated ids — which an agent needs to wire up arrows in a follow-up call, and no mention of whether the whole batch applies atomically.

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% — every nested property, including id, from, to, frame, and points, is documented inline. The description reinforces the two cross-field behaviors (id reuse and arrow binding) but adds little beyond the schema, so the baseline 3 applies.

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?

"Create or update elements" gives a specific verb pair and resource, and the two follow-up sentences clarify the create-vs-update distinction. It does not, however, differentiate from siblings such as canvas_mermaid or canvas_delete, so an agent must infer that this is the low-level shape/arrow authoring tool.

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?

"Re-using an id updates only the given fields" is a genuine usage rule that tells the agent how to choose between create and partial-update paths. But there is no explicit guidance on when to pick this over canvas_mermaid, canvas_save, or canvas_delete, and no stated preconditions for the canvas being open.

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

canvas_exportB

Save the board to a file: .excalidraw JSON (default) or PNG. Relative paths resolve against the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesFile path inside the workspace or temp dir
formatNoDefault from extension, else excalidraw

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the full burden; it does disclose the format default and that relative paths resolve against the workspace, which is genuinely useful. It says nothing about overwrite behavior, required permissions, or what is returned on success, which matters for a tool that writes to disk.

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 action and with zero filler. The format default and path resolution are packed into the same compact statement.

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 simple two-parameter export tool with no output schema, the description covers the essentials of what and where. It leaves the write-side behaviors (overwrite, result path, failure modes) undeclared, which is a moderate gap given the absence of annotations.

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 100%, so both parameters are already documented, and the format enum is fully specified. The description only adds the workspace-relative resolution rule and the default format, which the schema largely covers.

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 ('Save the board to a file') plus the two supported formats, which is concrete. It does not distinguish itself from the sibling canvas_save, so an agent cannot tell from the description alone which one writes a file versus which one persists state.

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 when-to-use guidance and no mention of alternatives such as canvas_save or canvas_screenshot, even though the sibling list contains tools that plausibly overlap. Usage is only implied by the word 'Save'.

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

canvas_focusA

Scroll/zoom the human's view to elements (whole scene if no ids); highlight pulses them. Use it to point while explaining.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoElement ids
zoomNoZoom level, e.g. 1
highlightNoPulse a highlight around them

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description does disclose the key non-obvious behavior: this moves the human's viewport (a shared-state side effect) and that highlight triggers a pulsing animation. It does not say whether the call is blocking, what happens with invalid ids, or whether anything is returned.

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 compact sentences with the core action and default-up front and the intent hint last. No filler; every clause carries information.

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 three-optional-parameter viewport tool with no output schema and no annotations, the essential calling information is present. Gaps remain around error behavior with unknown ids and whether the operation completes synchronously, which matter for an agent sequencing calls.

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?

Schema coverage is 100%, so the baseline is 3; the description earns above baseline by documenting the default when `ids` is omitted (whole scene) and clarifying that `highlight` causes a pulse. It adds no format detail for `zoom` beyond the schema's example, which is acceptable since the schema covers it.

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?

Specific verb pair (scroll/zoom) applied to a named resource (the human's view of elements), with the default scope stated in parentheses. It is clearly distinguished from read/draw/export siblings by being a viewport-control action, though it doesn't name a sibling to route away from.

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?

"Use it to point while explaining" gives one positive usage context, which is genuinely helpful for an agent narrating to a human. There is no guidance on when not to use it versus canvas_open or canvas_screenshot, nor on sequencing with other canvas calls.

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

canvas_guideA

How to explain well on this canvas: layout, sizes, colours, the live explain loop. Read once before your first drawing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description must carry the burden, and it does signal that this is instructional content to be consumed once before drawing, implying a static read with no side effects. It doesn't explicitly state read-only behavior or the nature of the returned text, but the framing as guidance-to-read is transparent enough for a zero-parameter tool.

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 delivers the topic list first and the usage condition second, with no filler. Every clause earns its place.

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 zero-parameter, no-output-schema documentation tool, the description covers what it contains, when to read it, and its one-time nature. There are no parameters or return values to explain further, so nothing an agent needs is missing.

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 no parameters, so the baseline of 4 applies. Nothing in the description conflicts with the empty schema and no input semantics are needed.

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 (a canvas guide) and enumerates its content — layout, sizes, colours, and the live explain loop — which clearly separates it from the action-oriented siblings like canvas_draw or canvas_export. It lacks a crisp verb, but 'How to explain well on this canvas' leaves no ambiguity about what the tool provides.

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 clause 'Read once before your first drawing' gives an explicit trigger condition for when to invoke it, which is unusually actionable for a documentation tool. It doesn't name alternatives or say when not to call it, but the precedents it establishes are clear enough for an agent.

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

canvas_mermaidB

Convert a Mermaid definition (flowchart, sequence, class…) into editable elements on the board.

ParametersJSON Schema
NameRequiredDescriptionDefault
xNoLeft edge
yNoTop edge
definitionYesMermaid source

TDQS

B3.1/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full disclosure burden. It reveals that existing Mermaid text becomes editable board elements, but says nothing about whether elements are added or replaced, what happens on invalid Mermaid syntax, or whether a board/workspace context is required.

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 front-loaded sentence with no filler; the verb and resource appear immediately, followed by the output form and diagram examples.

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 three-parameter transformation tool with no output schema and no annotations, the description covers the core action but leaves out return value (element IDs/handles), positioning defaults, and failure behavior — details an agent would want before calling it.

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%, with x, y, and definition each documented in the schema, so the baseline of 3 applies. The description adds only the loose notion of placement 'on the board' and does not explain coordinate behavior or units beyond the schema's 'Left edge'/'Top edge'.

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 (convert) and resource (Mermaid definition) with example diagram types, and names the output (editable elements on the board). It is clearly distinguishable from siblings like canvas_draw or canvas_export, though it does not explicitly name an alternative.

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 says when to prefer this over canvas_draw (hand-drawing elements) or what preconditions apply, such as needing an open board. Usage is only inferable from the tool name.

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

canvas_openB

Show this chat's own whiteboard to the human beside the chat. Name it with title. To reuse another chat's drawing (any folder), pass board.

ParametersJSON Schema
NameRequiredDescriptionDefault
openNoShow it to the human if nobody is watching (default true)
boardNoOpen another chat's board by id or title (this folder first, then any); "own" returns to this chat's
freshNoClear the board first (needed to load saved over a non-empty board)
savedNoLoad a copy of a saved board (id or name, see canvas_search) into this chat's board
titleNoName this chat's board after the topic, e.g. "How MCP works"

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It does disclose that the effect is to display the board to a human observer ('beside the chat'), which is genuine behavioral context. It says nothing about whether opening replaces or preserves existing board content, whether a board is created if none exists, or what happens when no human is present (that detail lives only in the schema for 'open').

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?

Three short sentences, front-loaded with the primary action, with nothing wasted. The telegraphic phrasing ('Name it with title') is efficient but slightly clipped, which keeps it from a 5.

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 five-parameter, zero-annotation, no-output-schema tool, the description covers the core action but omits the side-effect profile: whether existing drawings are overwritten, whether a missing board is created, and what the caller gets back. The rich schema compensates partially, but the behavioral picture remains incomplete.

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 100%, so all five parameters including defaults are documented in structured data; baseline is 3. The description reinforces title (naming) and board (reuse another chat's drawing) but adds no syntax, format, or interaction detail beyond the schema.

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: showing this chat's own whiteboard to the human beside the chat. It also hints at the reuse case via the board parameter. It does not, however, distinguish itself from siblings like canvas_focus or canvas_read, which plausibly also surface the board to a viewer.

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 phrase 'To reuse another chat's drawing (any folder), pass board' gives a condition for one parameter, and 'Name it with title' gives a light instruction. There is no explicit when-to-use-this-vs-an-alternative guidance despite ten canvas siblings, and no statement of when not to call it.

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

canvas_readA

Read the board: scene description (or JSON), then what the human changed and noted since your last read.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoOnly describe these elements
formatNosummary (default) or json

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool returns a scene description or JSON and that the result includes human changes/notes since the previous read, implying incremental stateful behavior, but it omits read-only confirmation, first-read behavior, and error/rate-limit context.

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?

The description is a single front-loaded sentence with no wasted wording. It puts the core operation first and then specifies the return content.

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 two-optional-parameter read tool with no output schema, the description gives enough information to understand the main return content. It is slightly incomplete about first-read behavior and the exact meaning of "since your last read," but the schema covers parameter details.

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 100%, so the schema already documents both optional parameters. The description maps loosely to the format parameter via "or JSON" but does not explain the ids filtering parameter or add details beyond the schema.

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 uses a specific verb/resource pair ("Read the board") and explains the returned content: scene description or JSON plus changes/notes since the last read. It is clear, but it does not explicitly differentiate from siblings such as canvas_screenshot, canvas_search, or canvas_export.

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 "Read the board" and by the mention of changes since the last read, which suggests incremental inspection. However, the description does not explicitly state when to use this instead of canvas_screenshot, canvas_search, or canvas_export, nor does it give exclusions.

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

canvas_saveA

Save a frozen copy of this board to the user's library so any later chat can find it with canvas_search. The same name again overwrites it.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName to save under (default: the board title)

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does disclose the key mutation trait: reusing the same name overwrites the existing saved copy. 'Frozen copy' also signals the snapshot is immutable with respect to later board edits. Missing are permission requirements, what is returned on success, and whether overwriting is silent.

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 action and purpose, with the overwrite caveat second. 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 one-optional-parameter, no-output-schema tool this covers what an agent needs to call it correctly. It could still say what the save returns or whether the live board is unaffected, but nothing essential is absent.

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 100% and the single parameter already documents the default (board title). The description adds only the name-as-identity detail via the overwrite sentence — useful but thin 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?

States a specific verb (save a frozen copy) and resource (this board) plus where it lands (the user's library), which cleanly separates it from write-alike siblings such as canvas_export or canvas_delete. It even names the retrieval counterpart, canvas_search.

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?

Implies the usage scenario clearly ('so any later chat can find it with canvas_search'), which tells the agent when this tool is appropriate rather than canvas_export. It does not state explicit when-not conditions or prerequisites (e.g., whether a board must be open first).

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

canvas_screenshotA

PNG of the board as the human sees it, to check your layout.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoOnly these elements
darkNoDark theme

TDQS

A3.5/5.0
Behavior3/5

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

No annotations exist, so the description carries the full burden. It does convey a meaningful behavioral trait — that output is a rendered visual rather than structured data — but never states that the call is non-mutating, has no side effects, or how large/expensive the render is.

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 with the output format and purpose front-loaded; no filler to remove.

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 two-parameter, zero-required, no-annotation read tool this is minimally adequate — format and intent are covered and the schema covers parameters. Missing is any indication of return size, whether ids filter or crop, and how it relates to the export sibling.

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 100%, so 'ids' (only these elements) and 'dark' (dark theme) are already documented in the schema. The description adds no further meaning about scoping or theme behavior, which is acceptable at the baseline when the schema is complete.

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 the output format (PNG), the resource (the board) and the perspective ('as the human sees it'), which distinguishes it from a data-level read. It does not explicitly differentiate itself from the nearby canvas_export or canvas_read siblings, so an agent must infer the split.

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?

'To check your layout' implies the workflow (verify visual arrangement after drawing), but there is no explicit when-to-use versus canvas_export/canvas_read, and no statement of exclusions or preconditions.

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. 11 tool updatesv0.1.0
    • First observedcanvas_delete
    • First observedcanvas_draw
    • First observedcanvas_export
    • First observedcanvas_focus
    • First observedcanvas_guide
    • First observedcanvas_mermaid
    • First observedcanvas_open
    • First observedcanvas_read
    • First observedcanvas_save
    • First observedcanvas_screenshot
    • First observedcanvas_search

TDQS

A3.9/5.0

Scored across 11 tools

Disambiguation5/5

Each tool has a clearly distinct role in the whiteboard workflow: opening, reading, drawing, deleting, focusing, screenshotting, Mermaid import, exporting, saving, searching, and guidance. The potentially overlapping pairs (read vs. screenshot, save vs. export, search vs. open) are explicitly differentiated by their descriptions. An agent should be able to select the right tool without confusion.

Naming Consistency5/5

All tool names use the same snake_case canvas_ prefix and a short action/object suffix. Although some suffixes are nouns (screenshot, mermaid, guide), the overall pattern is highly predictable. There is no mixing of camelCase, inconsistent prefixes, or chaotic verb styles.

Tool Count5/5

The server exposes 11 tools, which is well within the appropriate range for a feature-rich interactive whiteboard. Each tool appears to earn its place by covering a distinct part of the drawing, sharing, and explanation workflow. The set does not feel bloated or thin.

Completeness5/5

The tool surface covers the full lifecycle: find/open a board, read its state, draw/update/delete elements, import Mermaid, focus attention, screenshot for layout verification, export to file, save to a library, and search saved/other boards. Guidance is provided for the human-facing explanation workflow. No obvious CRUD or workflow gaps remain.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    A shared whiteboard server that enables users to provide visual context to AI agents by pasting screenshots and drawing annotations. It allows agents to analyze images, sketches, and marked-up details directly through the Model Context Protocol.
    10
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A shared whiteboard for you and your AI agent I wanted my AI agent and me to be able to point at the same thing. Any MCP-capable agent can read the canvas, draw on it, drop thought bubbles, animate elements, and react when you sketch something.
    1
    MIT