Skip to main content
Glama

Inkboard

A fast, free, fully offline infinite whiteboard β€” written in Rust. Draw, diagram and present on a native desktop app, import and export the formats you already use, share a board live with people on other networks (even from a web page, with nothing to install), and let an AI agent draw on your board.

CI License: MIT OR Apache-2.0 Status: alpha Platforms

πŸ‡¬πŸ‡§ English Β· πŸ‡«πŸ‡· Version franΓ§aise

Inkboard

Live sharing, from a web page: two guests in a browser and the AI agent edit the same board, in real time (recorded with real browser guests and a real host: demo.mjs).

Two browser guests and an AI agent editing the same board

Status: alpha. Inkboard is a young project. It is feature-rich and heavily tested (over 850 automated tests), but it has so far been used by hand on Windows only (live sharing was also tried between several computers, an Android phone on 5G and a Linux server). Linux and macOS builds compile and pass the automated tests in CI, yet nobody has used the app there yet β€” expect rough edges, and please report them. The interface is available in English and French; it follows your system language and can be switched from the menu (Language).

Why Inkboard?

Microsoft retired the standalone Microsoft Whiteboard apps for Windows, iOS and Android on October 16, 2026 (announcement), and the web alternatives all want an account, an internet connection, or a subscription. We wanted a whiteboard that is:

  • Offline and private. No account, no cloud, no telemetry. Your boards are plain files on your disk.

  • Fast on big boards. Complaints about lag on large boards come up again and again for Miro, Excalidraw and Whiteboard. Inkboard stays smooth with 100 000 objects (β‰ˆ 4.5 ms per frame).

  • Interoperable. Open and export draw.io, Excalidraw, JSON Canvas (Obsidian) and Mermaid, plus SVG, PNG and PDF. Your work is never locked in.

  • Solid where other tools are fragile. Connectors that really stay attached (and route around shapes), real tables, layers, rich text with per-word colour and highlight, LaTeX formulas typeset like TeX, customizable shortcuts, pen pressure.

  • Shareable without a server. Click Share: your computer is the server. Guests join from the app or from a web page, see everyone's cursor (the AI agent's too), and everything is end-to-end encrypted. See Live sharing.

  • Ready for AI agents. A built-in MCP server lets Claude (or any MCP client) create and edit boards β€” live, in the open app, with every step undoable.

  • Free software. Dual-licensed MIT OR Apache-2.0, built on a small, UI-independent Rust engine you can reuse.

Before writing a line of code we surveyed what users keep asking for in whiteboard tools (performance, fragile connectors, tables, layers, exports, offline use, pen support…); the roadmap tracks each of those requests.

Related MCP server: Overboard Studio

Install

Grab the installer for your system from the Releases page (pre-releases while Inkboard is in alpha):

System

File

Notes

Windows 10/11

inkboard_*_x64-setup.exe

Installs for the current user (no administrator rights needed).

Linux (x86-64)

inkboard_*_amd64.deb or inkboard_*_x86_64.AppImage

sudo apt install ./inkboard_*.deb, or chmod +x *.AppImage && ./*.AppImage. Needs OpenGL and X11/Wayland libraries (libxkbcommon).

macOS (Apple Silicon / Intel)

Inkboard_*.dmg

Drag Inkboard to Applications.

The installers also provide the ink command-line tool and the inkboard-mcp server next to the app.

On Windows, download inkboard_*_x64-setup.exe and double-click it: it installs for your user in a few seconds (no administrator rights, nothing else to install first), adds a Start menu shortcut, and uninstalls cleanly from Settings β†’ Apps. Add --silent for a silent install. A winget package is being prepared (winget install Inkboard.Inkboard).

The installers are not code-signed yet, so your system will warn you the first time: on Windows, SmartScreen says "Windows protected your PC" β†’ More info β†’ Run anyway; on macOS, Control-click the app β†’ Open. Every release lists SHA-256 checksums so you can verify your download. Code signing is ready to be switched on in the release workflow as soon as a signing certificate is available (how).

If the window does not open on Windows: Inkboard uses OpenGL and falls back to Direct3D / Vulkan by itself; you can force one with the environment variable INKBOARD_RENDERER=wgpu (or glow). If it ever crashes, it writes %APPDATA%\Inkboard\crash.log and tells you where.

Build from source

You need Rust 1.91 or newer.

git clone https://github.com/VictorLetirand/inkboard.git
cd inkboard
cargo run --release -p inkboard-app                    # start the app
cargo run --release -p inkboard-app -- diagram.drawio  # …or open a file directly

To build the installers yourself: cargo install cargo-packager --locked, then cargo packager --release -c Packager.toml (details).

Features

  • Drawing: pen with pressure, highlighter, eraser, rectangles, ellipses, diamonds, triangles, lines, arrows, sticky notes, text, images, tables, vote dots, laser pointer. Infinite canvas, pages, layers, groups, alignment and distribution, snapping, undo/redo.

  • Smart connectors: arrows are bound to shapes and follow them; elbow connectors route around other shapes; drag a midpoint handle to add a waypoint.

  • Rich text: select words inside any shape, table cell or arrow label and make them bold, italic, underlined, struck, coloured or highlighted.

  • Icon library: about 28,800 icons and shapes, offline β€” AWS, Azure, Google Cloud, Cisco, IBM, Kubernetes, flowchart / BPMN / UML-style shapes, electrical and process symbols, mockup widgets, 3,400 brand logos and 14,500 general-purpose icons β€” searchable from the toolbar (details and licenses).

  • Formulas and code: LaTeX typeset with the STIX Two Math font (fractions, roots, sums, integrals, matrices…), editable by double-click; syntax-coloured code blocks with a language picker (Rust, JavaScript/TypeScript, Python, C/C++, C#, Java, Go, Shell, SQL, JSON, HTML, CSS, YAML).

  • Present: full-screen page-by-page mode (F5), countdown timer (bottom-right clock button), laser pointer (F).

  • Import / export:

    Format

    Open

    Save / export

    Inkboard .inkboard

    βœ”

    βœ” (atomic save + autosave)

    draw.io .drawio (compressed or not, multi-page)

    βœ”

    βœ”

    Excalidraw .excalidraw

    βœ”

    βœ”

    JSON Canvas .canvas (Obsidian)

    βœ”

    βœ”

    Mermaid (flowchart, state, sequence)

    βœ”

    –

    SVG, PNG, PDF (vector)

    –

    βœ”

  • Customizable shortcuts (41 commands, several shortcuts per command, conflict handling) and a light/dark theme that follows the board background.

  • File extension: boards are saved as .inkboard (a JSON file; the installer makes a double-click open it). Boards saved by earlier builds as .inkboard.json (and the prototype's .tableau.json) still open, and are saved back under their own name.

  • Command line: ink convert diagram.mmd diagram.drawio, ink convert board.inkboard board.png, ink info file.drawio.

Main menu

Dark theme

Menu

Dark theme

Icon library

Live sharing

Beta. Live sharing is new: it has been exercised by automated tests (including simulated crowds of up to 100 guests and hostile inputs) and by hand on a few devices and networks, but not yet widely.

Click Share in the bottom-right corner to get a link; people who open it edit the same board live.

  • No server to install. Your computer hosts the session; nothing runs anywhere else, and nothing connects until you start sharing.

  • Join from the app or from a web page. A guest with the Inkboard app pastes the link; a guest with only a browser opens the web link (button Copy web link): nothing to install, no account. The web page is a static page, victorletirand.github.io/inkboard (Chrome, Edge and Firefox are tested; Safari and iOS are not). It only joins sessions, it cannot host one.

  • Names and live cursors for the host, every guest and the AI agent (its cursor and what it is doing are shown to everyone).

  • You stay in control. You approve each person, with an edit link or a read-only link; new links cut off the old ones; you can rename, restrict or remove anyone. Default cap: 10 participants (designed for 20, load-tested with 100 simulated ones).

  • Private by design. End-to-end encrypted: the relay that helps two computers find each other only sees encrypted bytes. A guest can undo only their own edits.

  • Works across networks. Connections are direct when possible and go through a relay otherwise (a public one by default, you can run your own). Tried on Wi-Fi, on 5G and between Windows and Linux; it survives network cuts of a minute and reconnects on its own.

  • Honest limits. Some company networks (TLS-inspecting gateways) block the public relay: the app then says so and offers a Copy the diagnostic button to hand to your IT department. Very large boards (20,000 objects and more) take a few seconds to reach a new guest; 100 guests work but are not a normal use. See how to share and join Β· the web page Β· host your own relay.

Use it with AI agents (MCP)

inkboard-mcp is a Model Context Protocol server: an agent can create shapes, bound connectors, tables, code blocks, formulas, images and whole Mermaid diagrams, lay them out automatically, and export. With Inkboard open, the agent edits the board you are looking at β€” each call is one undo step, it can see what you have selected, and it can ask what you changed since it last looked. With Inkboard closed, it edits the .inkboard file and the app reloads it automatically.

With Claude Code:

claude mcp add inkboard -- /path/to/inkboard-mcp --root /path/to/your/boards

Always pass --root: it confines every file the agent can read or write to that folder. The server exposes 27 tools (add_shape, add_connector, import_mermaid, add_icon (28,800 icons), render (the board as an image), batch, export, board_changes…) and MCP resources with change notifications. Full reference, security notes and limits: docs/MCP.md.

Platform status

Windows

Linux

macOS

Builds and passes the automated tests (CI)

βœ”

βœ”

βœ”

Web guest page (browser, nothing to install)

Chrome, Edge, Firefox tested

not tried

not tried (Safari not tested)

App launched and used by hand

βœ”

not yet

not yet

Installers

built and tested

built in CI, untested

built in CI, untested

Pen eraser end (Windows Pointer API)

βœ” implemented, not yet validated on real pen hardware

–

–

Pen pressure and the eraser end are implemented and covered by tests but have never been tried with a real pen: run inkboard --pen-test for a diagnostic report (how).

Performance

Measured on the release build with a synthetic board (60 % labelled shapes, 25 % strokes, 15 % bound connectors), continuous zoom and pan:

Objects

Frame time (fit-to-screen)

Frame time (100 % zoom)

2 000

0.8 ms

0.3 ms

20 000

3.3 ms

0.3 ms

100 000

4.5 ms

0.3 ms

Reproduce with ink bench 100000 big.inkboard && inkboard --bench big.inkboard.

Project layout

Crate

Role

inkboard-core

The engine: document model, geometry, bound connectors, history, SVG export, auto-layout. No UI dependency.

inkboard-formats

draw.io, Excalidraw, JSON Canvas, Mermaid, PNG/PDF, LaTeX typesetting.

inkboard-app

The desktop app (egui), also built for the web (guest page).

inkboard-session

Live sharing: protocol, end-to-end encryption, host sequencer, guest client, network simulator.

inkboard-net

Network transport of sessions (QUIC with relay fallback, native and browser) and relay diagnostics.

inkboard-fonts

The fonts built into the app (identical text layout on every platform and in the browser).

inkboard-crowd

Load-testing tool: a real host and simulated guests.

inkboard-cli

The ink command-line converter.

inkboard-mcp

The MCP server.

inkboard-pen

Pen eraser detection on Windows (the only crate with unsafe code).

More: architecture and design decisions Β· roadmap Β· distribution and signing (French copies in docs/fr/). The original web prototype is kept in prototype-web/; its .tableau.json boards can be opened in Inkboard.

Roadmap

Planned or wanted next:

  • More interface languages β€” English and French are built in; adding one means adding a translation table (see crates/inkboard-app/src/i18n_fr.rs).

  • Code-signed installers (Windows via SignPath, macOS notarization) and automatic updates.

  • Validation of pen pressure and eraser on real hardware; pen eraser support on macOS/Linux.

  • First real-world usage on Linux and macOS, and fixes that come out of it.

  • Real LaTeX beyond what the typesetting library supports; per-language code highlighting.

Have an idea or found a bug? Open an issue β€” see also CONTRIBUTING.md.

License

Inkboard is free software and is dual-licensed: you may use it under either of the two licenses below. You choose one; you do not have to follow both.

MIT

Apache-2.0

Use it, including in a commercial product

βœ”

βœ”

Modify it and redistribute it

βœ”

βœ”

Keep the copyright and license notice

βœ”

βœ”

Explicit patent license from the contributors

–

βœ”

Length of the text

very short

longer

Which one should I pick? Either is fine. MIT is the shortest and simplest; Apache-2.0 adds the explicit patent grant. This table is a plain-language summary, not legal advice: the two license files are the reference.

Third-party components keep their own (permissive) licenses: see THIRD_PARTY_LICENSES.md. Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in Inkboard shall be dual-licensed as above, without any additional terms or conditions.

Available Tools

27 tools
add_code_blockB

Adds a code block (monospace font, dark background, syntax highlighting).

NameRequiredDescriptionDefault
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
codeYes
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

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 the visual outcome of the created object (monospace, dark background, syntax highlighting), which is genuine behavioral context. However it says nothing about object identity/handles, whether the target board must be open, undoability, or permissions β€” the live-vs-file behavior only surfaces in the schema's path field.

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 verb and resource front-loaded and no filler. Every clause (appearance details) conveys useful 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 simple creation tool with high schema coverage and no output schema, the appearance note plus rich schema descriptions of placement and target board are largely sufficient. The main omission is what the tool returns (e.g. the created object's id) for follow-up operations.

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 80%, so x, y, page and path are already well documented in the schema. The description adds no syntax, format, or sizing guidance for 'code' or positioning, so it does not exceed the schema baseline.

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 'Adds' plus a concrete resource 'code block', and it even characterizes the rendered result (monospace, dark background, syntax highlighting). It does not explicitly contrast with sibling creators like add_table or add_formula, but the resource is distinctive enough to select on.

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 statement of when to use this versus add_table, add_formula, or import_mermaid, and no prerequisites or exclusions. The agent must infer usage from the tool name and schema alone.

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

add_connectorA

Connects two objects with an arrow that follows them when they move (ids returned by add_shape or describe_board).

NameRequiredDescriptionDefault
toYes
fromYes
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
arrowNoArrowheads (default: end).
labelNo
routeNo
strokeNoColor "#rrggbb" or "ink" (the theme's text color).
markdownNoDefault false (text taken literally). true: `label` is Markdown: **bold**, *italic* (or _italic_), __underline__, ~~strike~~, {color=#e03131}text{/}, {bg=#ffec99}text{/}, {color=#e03131 bg=ink}text{/} (colors: #rrggbb or ink); nesting allowed; \ escapes * _ ~ { } \. Markup that cannot be applied stays literal text and is listed in the `warnings` of the result.

TDQS

A3.7/5.0
Behavior3/5

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

No annotations, so the description carries the full burden. It discloses one genuinely valuable behavioral trait β€” connectors re-anchor and follow objects when moved β€” but says nothing about whether the connector itself is returned with an id, whether the call is undoable, permission/board-context needs, or what happens with invalid ids. Safety and mutation semantics are left entirely implicit.

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 behavior, with the id-provenance hint tucked into a parenthetical. Every clause earns its place and nothing is padded.

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 9-parameter mutation tool with no annotations and no output schema, a single sentence is thin: the return value (does it return the new connector's id?), live-vs-file behavior, and error conditions are unaddressed. The schema does cover the trickier parameters (path, arrow, stroke, markdown), which keeps this from being inadequate, but the description should do more for a write tool.

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 56% across 9 parameters; 'from', 'to', 'label' and 'route' have no schema descriptions. The description usefully clarifies that from/to are object ids sourced from add_shape or describe_board, which is real added meaning, but it says nothing about arrow, route, stroke, label or page.

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?

A precise verb-plus-resource statement: 'connects two objects with an arrow', plus the non-obvious property that the connector follows the objects when they move. It even names the sibling tools that supply the required ids (add_shape, describe_board), so an agent can distinguish it from add_shape or format_text without opening a schema.

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 rather than stated, but the parenthetical gives a genuine prerequisite: from/to must be object ids obtained from add_shape or describe_board. There is no when-not guidance, no mention of what to do when ids are stale or objects are on different pages, and no alternative routing (e.g. import_mermaid for bulk connectors).

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

add_formulaB

Adds a LaTeX formula (math mode) typeset the way TeX does. Errors if the LaTeX is not supported.

NameRequiredDescriptionDefault
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
colorNoColor "#rrggbb" or "ink" (the theme's text color).
latexYes

TDQS

B3.4/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, and it does disclose one meaningful trait: unsupported LaTeX produces an error rather than a silent partial render. It says nothing about what is created (an object with an id?), whether the action is undoable, or how it behaves when the target board is live versus a file β€” gaps that annotations would normally cover.

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, zero filler, with the core action and its rendering semantics front-loaded. Nothing is repeated from the schema.

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?

Given high schema coverage and no output schema, the description plus schema is nearly sufficient to call the tool correctly. The remaining gap is the return value (whether an object reference is returned for later update_object/move_objects calls) and undo semantics, which matter for a document-mutating tool with no 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 description coverage is 83%, so x/y/page/path/color are already well documented and the baseline is 3. The description adds only a validation note about the required 'latex' parameter (unsupported input errors out) and no format or syntax guidance beyond what the schema implies.

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 ('Adds a LaTeX formula (math mode)') and adds the rendering contract ('typeset the way TeX does'), which tells an agent exactly what artifact is produced. It does not explicitly contrast with neighboring insert tools (add_code_block, import_mermaid, add_shape), so it stops short of full sibling differentiation.

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?

No when-to-use or when-not-to-use guidance: nothing says to pick this over add_code_block or import_mermaid, and no prerequisites (live board vs file, page targeting) are stated. The only conditional sentence is a failure condition ('Errors if the LaTeX is not supported'), which is behavioral, not routing guidance.

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

add_iconA

Places an icon of the library on the board, as an image object that can be connected with add_connector. icon is an id returned by search_icons. Size: size = longest side (default 64, 8 to 2000), or w and/or h (the icon's ratio is kept when only one is given). Monochrome icons (mono: true in search_icons) take the color stroke (default: the theme's text color); colored icons keep their own colors. label adds a text centered under the icon, grouped with it. Returns the image id (and label_id).

NameRequiredDescriptionDefault
hNo
wNo
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
iconYesIcon id from search_icons, e.g. "drawio-aws4/Lambda".
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
sizeNoLongest side (default 64). Not combinable with w / h.
labelNoText placed under the icon (at most 500 characters).
strokeNoColor "#rrggbb" or "ink" (the theme's text color).
markdownNoDefault false (text taken literally). true: `label` is Markdown: **bold**, *italic* (or _italic_), __underline__, ~~strike~~, {color=#e03131}text{/}, {bg=#ffec99}text{/}, {color=#e03131 bg=ink}text{/} (colors: #rrggbb or ink); nesting allowed; \ escapes * _ ~ { } \. Markup that cannot be applied stays literal text and is listed in the `warnings` of the result.

TDQS

A4.1/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 substantial work: default sizes and valid range, ratio preservation, the mono-versus-colored stroke rule with a default color, label grouping semantics, and the returned ids. The live-vs-file behavior is left to the schema's path description rather than repeated, which is reasonable but leaves a mutation's side effects only partly visible in the prose.

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?

Front-loaded with the operation, then ordered by importance (source, sizing, color, label, return). Dense with parenthetical clauses but nearly every clause carries actionable information; a minor tightening of the sizing sentence would make it a 5.

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 an 11-parameter tool with no output schema, the description supplies the return values (image id and label_id) and surfaces the `warnings` channel for unapplicable markup. Only the live-versus-saved board side effects and permission expectations are absent, and those are partly covered in the schema.

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 already high (82%), so the baseline is 3; the description adds genuine relational meaning beyond it β€” that `size` is the longest side, that it is not combinable with w/h, that a single w or h preserves the icon ratio, and that `stroke` only applies to mono icons. It does not touch x/y/page defaults, but those are documented in 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 and resource ('Places an icon of the library on the board') and immediately scopes it apart from sibling resources by naming the source ('an id returned by search_icons') and the follow-up action (add_connector). An agent can distinguish this from add_image, add_shape, and add_table without opening any schema.

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 rather than stated: the reader infers this is the tool for library icons and that search_icons must run first to obtain an id. There is no explicit 'when not to use' guidance or routing compared to add_image / add_shape, which matters given several visually adjacent siblings.

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

add_imageA

Adds an image (PNG, JPEG, GIF, WebP or SVG, 15 MiB at most) from a file (source, under the allowed root) or from base64 data (data_base64). The natural size is reduced to at most 600; w and/or h override it.

NameRequiredDescriptionDefault
hNo
wNo
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
sourceNoPath of the image file.
data_base64No

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations at all, the description carries the full disclosure burden. It does usefully add the 15 MiB cap, the allowed-root restriction and the 600px natural-size reduction with w/h override, but it says nothing about what is returned, whether the operation is undoable, or what happens when both source and data_base64 are omitted.

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 dense sentences with the resource, format list, size limit and input modes front-loaded; nothing is redundant or padded.

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 an 8-parameter mutation tool with no annotations and no output schema, the description covers formats, size limits, input modes and sizing behavior, with positioning and page semantics delegated to well-described schema fields. Only the return value and no-input fallback behavior are unaccounted for.

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 only 63%, and the description compensates by explaining the undocumented w/h pair as overrides of the auto-reduced natural size and by clarifying that source and data_base64 are alternative image inputs. The positioning (x, y) and page parameters are left entirely to the schema, but those are already documented there.

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 gives a specific verb and resource ("Adds an image") plus the accepted formats and a hard size cap, which is far more informative than the bare name. However, it never differentiates itself from the nearest siblings such as add_icon or add_shape, so an agent must infer that an icon is not an image.

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 "from a file (`source` ...) or from base64 data (`data_base64`)" phrasing implies the two mutually exclusive input modes and that one of them is required despite no required params. There is still no statement of when to choose this over add_icon, nor any prerequisite about an open application or allowed root beyond a parenthetical.

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

add_pageC

Adds a page. Returns its number.

NameRequiredDescriptionDefault
nameNo
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries full behavioral burden. It discloses that the tool mutates state and returns a page number, but says nothing about permissions, side effects, live-board behavior, undoability, or what happens when no path is supplied.

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 extremely short and front-loaded, with each sentence conveying a distinct fact: the action and the return value. It is not verbose, though its brevity contributes to the tool's under-specification overall.

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 mutation tool with no annotations, no output schema, two parameters, and only 50% schema coverage, the description is incomplete. It omits board context, the optional live-board mode, parameter semantics, and any side-effect or permission details an agent would need before calling it.

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 coverage is only 50%, and the description adds no parameter meaning at all. It does not explain what "name" means or when "path" should be provided, leaving the schema to carry most of the burden for one parameter and none for the other.

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 and resource: "Adds a page." It is clear what operation is performed, but it does not distinguish this tool from page-related siblings such as manage_pages or create_board.

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 gives no guidance on when to use add_page versus manage_pages, create_board, or other sibling tools. It also omits prerequisites such as whether a board must already exist or be open.

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

add_shapeC

Adds a shape with text (rect, ellipse, diamond, triangle, sticky = sticky note, text = free text). Returns the id.

NameRequiredDescriptionDefault
hNo
wNo
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
fillNoColor "#rrggbb" or "ink" (the theme's text color).
geomYes
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
textNo
strokeNoColor "#rrggbb" or "ink" (the theme's text color).
markdownNoDefault false (text taken literally). true: `text` is Markdown: **bold**, *italic* (or _italic_), __underline__, ~~strike~~, {color=#e03131}text{/}, {bg=#ffec99}text{/}, {color=#e03131 bg=ink}text{/} (colors: #rrggbb or ink); nesting allowed; \ escapes * _ ~ { } \. Markup that cannot be applied stays literal text and is listed in the `warnings` of the result.
font_sizeNo

TDQS

C2.7/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 behavioral burden. It discloses only that the tool adds a shape and returns an id; it does not explain mutation side effects, undo behavior, live-vs-file operation, permissions, or failure modes.

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 a single front-loaded sentence with no wasted clauses. It is appropriately sized for the core purpose, though quite terse for a 12-parameter tool.

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 mutation tool with 12 parameters, no annotations, and no output schema beyond the mention of returning an id, the description is incomplete. It lacks usage guidance, behavioral disclosure, and parameter semantics needed to call it reliably.

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 58%, leaving several parameters (h, w, text, font_size) without schema descriptions. The description only clarifies the geom enum variants and mentions text, adding minimal meaning beyond the structured 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 ('Adds') and resource ('a shape with text'), enumerates the allowed geometry types, and says it returns the id. It is clearly distinguishable from sibling tools like add_connector or add_image, though it does not explicitly compare itself to them.

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 use this tool rather than alternatives such as add_connector, add_table, or add_image. Usage is only implied by the tool name and shape enumeration.

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

add_tableB

Adds a table of cells; rows is a list of rows (lists of texts). The first row is the header.

NameRequiredDescriptionDefault
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
rowsYes
markdownNoDefault false (text taken literally). true: every cell is Markdown: **bold**, *italic* (or _italic_), __underline__, ~~strike~~, {color=#e03131}text{/}, {bg=#ffec99}text{/}, {color=#e03131 bg=ink}text{/} (colors: #rrggbb or ink); nesting allowed; \ escapes * _ ~ { } \. Markup that cannot be applied stays literal text and is listed in the `warnings` of the result.

TDQS

B3.2/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 behavioral burden, yet it only discloses that the first row is treated as a header. It says nothing about whether the tool writes to a file or the live board, whether changes are undoable, permission needs, or what the result contains (the undo and warnings behavior lives only in schema property text).

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, no filler, with the core action front-loaded and the row/header rule immediately after. Nothing could be removed without losing meaning.

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?

Six parameters with 83% schema coverage and no output schema means the parameter layer is reasonably self-documenting, but with zero annotations the description should say more about side effects and target (file vs live board) for a content-creating mutation. Placement and page defaults are only in the schema, so the description is thin for the tool's complexity.

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 already high at 83%, so the baseline is 3. The description goes beyond that by explaining that `rows` is a list of rows of cell texts and that the first row is the header β€” a semantic rule the schema does not encode, which materially changes how an agent builds the input.

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 ('Adds a table of cells') plus the row shape and header-row convention, which clearly separates it from siblings like add_shape, add_code_block or add_image. It doesn't explicitly contrast with an alternative such as importing a table, so no sibling is named, but the purpose is unambiguous.

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, no prerequisites, and no alternatives mentioned. An agent gets no signal about when a table beats add_shape or add_code_block, or what happens if a board is already open.

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

arrange_objectsA

Aligns, distributes, stacks, groups or locks objects. align_*: at least 2 unlocked objects, aligned on their common bounding box. distribute_*: at least 3 unlocked objects, equal gaps between the two outermost (an error otherwise; the engine alone would do nothing). Locked objects are skipped by align/distribute and reported in skipped_locked. bring_to_front/bring_forward/send_backward/send_to_back change the stacking order (z of describe_board detail "full"). group (2+ objects, returns group), ungroup, lock, unlock.

NameRequiredDescriptionDefault
idsYesIds of the objects to arrange (1 to 2000; ids come from describe_board, find_objects or the add_* tools). Groups are not expanded: list every member.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
actionYes

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so substantively: locked objects are skipped by align/distribute and reported in `skipped_locked`, distribute with fewer than 3 errors instead of silently doing nothing, group requires 2+ and returns `group`, and the stacking actions mutate `z` visible via describe_board detail "full". It never states permissions, reversibility, or limits, which keeps it below 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.

Conciseness4/5

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

Front-loaded with the operation list and compressed into a few dense sentences with no filler. The telegraphic fragments ('group (2+ objects, returns `group`), ungroup, lock, unlock.') are efficient but cost some readability.

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 16-action tool with no output schema and no annotations, the description covers preconditions, error conditions and two return fields (`skipped_locked`, `group`). It still omits the general response shape for align/stack actions and any mention of partial-success behavior, so it is strong but not complete.

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 75%, so most parameters are already documented and the baseline sits at 3. The description's real contribution is explaining the meaning of the `action` enum values (align vs distribute vs stack vs group semantics), which goes beyond the bare enum names but is not organized parameter-by-parameter.

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?

Names a specific set of operations (align, distribute, stack, group, lock) on a specific resource and enumerates the action families, so an agent can distinguish this from move_objects, update_object or format_text without opening the schema.

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?

Explicit preconditions are given per action family: align_* needs at least 2 unlocked objects, distribute_* needs at least 3 with equal gaps between the outermost, otherwise an error. It does not, however, name a sibling as the alternative for plain repositioning (move_objects) or say when not to use this tool.

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

auto_layoutC

Rearranges the shapes joined by connectors into a layered graph.

NameRequiredDescriptionDefault
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
directionNoDefault: TB.

TDQS

C2.9/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 burden, yet it says nothing about the mutating side effects: that existing shape positions are overwritten, whether the change is undoable, or whether unconnected shapes are affected. The single sentence conveys the transformation type (layered graph with a direction) but omits the behavioral facts an agent needs before invoking a write operation.

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 tightly written sentence with the action and outcome front-loaded and zero filler. It is efficient, though its brevity contributes to the missing behavioral context rather than resolving it.

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 mutation tool with no annotations and no output schema, the description should cover side effects, scope (page vs selection vs connected subgraph), and reversibility. It covers none of these, leaving the agent to infer behavior from the sibling name arrange_objects and the schema alone.

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 page, path and direction are already documented in the schema, including the live-edit/undo note for path and the TB default for direction. The description adds no parameter-level meaning beyond the schema, so the baseline of 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?

The description names a specific verb (rearranges) and a specific target (shapes joined by connectors) plus an outcome (layered graph), which clearly separates it from positional siblings like move_objects or arrange_objects. It stops short of explicitly naming the sibling it competes with, so it is clear but not fully differentiated.

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, no prerequisite (e.g. does it operate on the whole page or only a selection?), and no mention of alternatives such as arrange_objects or move_objects. The usage is only inferable from the noun phrase 'shapes joined by connectors'.

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

batchA

Runs several tool calls in ONE request (1 to 200 operations, in order), on one board, as a single undo step in the application. Use it to build or rework a board quickly instead of one call per object. Each operation is {"tool": "add_shape", "args": {...}} with the arguments the tool normally takes (but never path, output or source: the batch-level path applies to all). An operation can reuse what an earlier one returned: a string that is EXACTLY "$N.key" (N = index from 0 of an earlier operation, then keys or list indexes separated by dots, e.g. "$0.id" or "$3.ids.1") is replaced by that value of the result of operation N before the operation runs; text that only contains "$0.id" inside a longer string stays literal, and a text that is exactly like "$3.99" would be taken for a reference. An operation without page acts on the batch-level page (default: the first page), whatever the previous operations did. atomic (default true): at the first error everything already done is undone, the board is unchanged, and the error gives the operation index, its error and the results obtained before the rollback. With atomic: false the batch stops at the first error and keeps what succeeded, answering {applied, failed: {index, error}, results} (not an error). Success answers {results: [one result per operation], applied}. Not allowed inside a batch: batch, create_board, save_board, board_changes, export, render.

NameRequiredDescriptionDefault
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
atomicNoAll or nothing (default true). false: keep the operations done before the first error.
operationsYesOperations to run in order, e.g. [{"tool": "add_shape", "args": {"geom": "rect", "text": "A"}}, {"tool": "add_shape", "args": {"geom": "rect", "text": "B"}}, {"tool": "add_connector", "args": {"from": "$0.id", "to": "$1.id"}}].

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations, the description carries the full burden and does: it discloses the single-undo semantics, atomic defaults and rollback behavior, both failure response shapes ({applied, failed, results} vs. an error with operation index), and the page-inheritance rule. It also specifies the reference-substitution rules precisely, including the edge cases (exact "$N.key" only, literal text stays literal, "$3.99" being misread as a reference).

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?

Purpose is front-loaded in the first clause and every sentence carries operational information. It is a dense single paragraph, though, and the substitution rules could be broken out for faster scanning; density borders on overwhelming.

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 complex orchestration tool with no annotations and no output schema, the description covers invocation shape, ordering, reference resolution, page inheritance, failure modes, rollback, and return values. Nothing an agent needs in order to call it correctly is missing.

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

Parameters5/5

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

Schema coverage is already 100%, but the description still adds real meaning: args are the same arguments the tool normally takes except path/output/source (batch-level path applies to all), and it explains the $N.key substitution grammar with concrete examples. The page-defaulting rule is also clarified beyond the schema's "Defaults to the first."

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 β€” runs 1 to 200 tool calls in one request on one board as a single undo step β€” which no sibling tool does. It also names the scope (one board, ordered operations) that separates it from calling add_shape/add_connector individually.

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?

"Use it to build or rework a board quickly instead of one call per object" gives clear when-to-use guidance, and the closing sentence lists the tools that may not appear inside a batch (batch, create_board, save_board, board_changes, export, render). It stops short of an explicit when-not-to-use condition such as preferring direct calls for a single operation.

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

board_changesA

Reports what the USER changed on the board since your last look (describe_board or board_changes): objects added, modified, deleted. Your own changes are not reported. The first call records a baseline.

NameRequiredDescriptionDefault
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

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 load and does disclose meaningful traits: only user edits are reported, the agent's own changes are excluded, and the first call records a baseline rather than returning deltas. It omits whether the tool itself mutates the board and says nothing about return shape or ordering.

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, front-loaded with purpose, then the exclusion rule, then the baseline caveat. 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?

With no output schema, the description usefully names the returned change categories, which is the main thing an agent needs. It leaves the delta payload structure and the effect of the baseline call on subsequent responses implicit.

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 optional path parameter is fully documented in the schema, so the baseline is 3. The description never mentions the path argument or the live-versus-file mode distinction the schema covers.

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 ('Reports what the USER changed on the board') and enumerates the change categories (added, modified, deleted). It also distinguishes itself from describe_board by scope and from the agent's own edits, so an agent can identify it without opening the schema.

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?

Names describe_board or board_changes as the reference point for 'since your last look' and clarifies the first-call baseline behavior, giving clear context for invocation. It stops short of explicit when-not guidance (e.g., 'use find_objects instead if you need a full snapshot').

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

create_boardC

Creates an empty board (.inkboard file).

NameRequiredDescriptionDefault
nameNo
pathYesPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations, the description carries the full burden yet discloses only that the result is empty. It doesn't say what happens if the path already exists (overwrite/error), whether permissions are needed, where the file is written, or that the live-app path is undoable β€” even though that undo detail is documented in the schema, not here.

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 with a useful parenthetical identifying the artifact type, and zero padding. It is efficient, though arguably terse to the point of under-specification rather than over-elaboration.

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 file-creating mutation with no annotations, no output schema, and an undocumented `name` parameter, the description is too thin. An agent can't determine return behavior, overwrite semantics, or the relationship to save_board from this text alone.

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 coverage is only 50%: `path` is well documented but `name` has no description anywhere, and the description doesn't compensate by explaining what `name` controls (file label vs. board title). The description adds no parameter meaning 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 (creates) and resource (an empty board / .inkboard file), which is unambiguous. It doesn't distinguish itself from siblings like save_board or import_mermaid, so an agent must still infer whether this is a 'new blank file' vs. a save/import operation.

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 provides no when-to-use guidance, no prerequisites, and never names an alternative for cases like saving an existing board (save_board) or creating pages inside a board (add_page). The only contextual hint β€” live editing when the app is open β€” lives in the schema, not the description.

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

delete_objectA

Deletes an object, or several with ids (connectors that were bound to them remain, detached). Give id or ids.

NameRequiredDescriptionDefault
idNo
idsNoSeveral objects to delete at once (result: `deleted` is then a list).
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

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 usefully discloses a non-obvious side effect β€” connectors bound to deleted objects remain but detached β€” which is real behavioral value. However, it says nothing about irreversibility, whether deletion is undoable, permission requirements, or rate limits, leaving the most consequential traits unstated.

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 action and immediately followed by the batch variant and its side effect. Little waste; only the trailing 'Give `id` or `ids`' is mildly redundant with the opening.

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 destructive tool with no annotations and no output schema, the description covers the essential call mechanics (target selection, batch limits implied by schema, connector side effect). The notable gap is the absence of any statement about reversibility or confirmation, which matters most for a delete operation.

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 75%, so `ids`, `page`, and `path` are already documented in the schema. The description restates the `id`/`ids` choice and adds the connector-detachment consequence, but adds nothing about `page` or `path` beyond what the schema says. Baseline 3 is appropriate.

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 gives a specific verb and resource ('Deletes an object') and distinguishes the single-target form from the bulk form via `ids`. No sibling tool deletes objects, so differentiation is inherent, but the wording is clear and unambiguous.

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 use condition is implicit in 'Give `id` or `ids`' β€” an agent learns which parameter form to pick, but there's no statement about when deletion is appropriate, prerequisites, or what to do instead (e.g., update_object) when removal is not wanted. Adequate but thin.

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

describe_boardA

Lists the pages and objects of a board (id, type, text, position, connector links). In live mode, also reports the user's selection (selection). Also reads draw.io, Excalidraw, JSON Canvas and Mermaid files. detail: "full" adds each object's style, font, stacking order z, group, lock, rotation and (connectors) route and arrow; tables also list their cells.

NameRequiredDescriptionDefault
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
detailNoDefault brief (id, type, text, position). full: also style {stroke, fill, width, dash, opacity, roundness}, font {family, size, align}, z, group, locked, rotation (degrees), route, arrow.

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 burden; it does disclose that live mode acts on the displayed board and is undoable with Ctrl+Z, and that `selection` is only reported in live mode. However, it never states plainly that this is a read/inspection operation, nor does it cover permission requirements or behavior on missing/invalid files.

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 dense sentences, front-loaded with the core purpose before mode and detail qualifications. The parenthetical field lists are slightly crammed but each carries information an agent needs to predict output shape.

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 exists, so the description must describe returns, and it does: brief fields, full-mode extras, table cells, and live-mode `selection`. It stops short of covering failure modes (unsupported file, page not found) or whether reading large boards is bounded.

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, but the description earns above it by detailing that `detail: "full"` adds style, font, z, group, lock, rotation, route/arrow and that tables additionally list `cells` β€” specifics the schema's detail description does not fully enumerate. It also clarifies the live-mode behavior tied to `path`.

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 ('Lists the pages and objects of a board') and enumerates the returned fields. It also establishes that the tool reads external diagram formats, which implicitly separates it from output-producing siblings like export or render, but it never names a sibling to differentiate itself 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?

Usage is only implied: the 'live mode' sentence hints at when the path parameter may be omitted, and the `detail: "full"` sentence hints at when to request richness. There is no explicit when-to-use/when-not guidance relative to alternatives such as find_objects or render.

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

duplicate_objectsA

Copies objects, each copy shifted by (dx, dy) from the previous one (default 40, 40; count copies, default 1, 50 at most). Connectors between copied objects are copied and linked to the copies; a connector linked to an object that is not copied becomes free in the copy. Groups are copied as new groups. Returns sources (copied ids in page order) and ids (new ids: copy 1 in the order of sources, then copy 2...).

NameRequiredDescriptionDefault
dxNoDefault 40.
dyNoDefault 40.
idsYesIds of the objects to copy (1 to 2000; ids come from describe_board, find_objects or the add_* tools). Groups are not expanded: list every member.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
countNoDefault 1.

TDQS

A3.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well: it explains how connectors are handled (copied and linked, or freed if the linked object is not copied), that groups become new groups, and the shift behavior between copies. It omits permission or undo details, though the path parameter schema notes live-board undoability.

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 dense but front-loaded, beginning with the core action and shift behavior before detailing connector and group handling. Every sentence contributes useful information without redundancy.

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?

Given 6 parameters, full schema coverage, and no output schema, the description is nearly complete: it explains the copy logic, connector/group behavior, and the shape of the return value (sources and ids with ordering). Minor gaps like page/path nuances are handled by the schema descriptions.

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 adds meaningful semantics beyond the schema: it clarifies that dx/dy shift each copy from the previous one, states the default for count and the 50-copy maximum, and explains the ordering of returned ids. This is genuine value on top of the structured fields.

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 opens with a precise verb-resource pair ('Copies objects') and immediately explains the core mechanics. It is clearly distinguishable from sibling tools like move_objects, arrange_objects, or delete_object, 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?

There is no guidance on when to use this tool versus alternatives such as add_shape, add_connector, or move_objects, nor are prerequisites or exclusions stated. The description explains behavior but leaves the agent to infer the appropriate context.

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

exportA

Exports a page to a file; the format is chosen by the extension of output: .svg, .png, .pdf, .drawio, .excalidraw, .canvas, .inkboard.

NameRequiredDescriptionDefault
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
outputYes

TDQS

A3.6/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 full burden. It usefully discloses that the output format is derived from the file extension (.svg, .png, .pdf, etc.), which is real behavioral info, but says nothing about overwrite behavior, permissions, errors, or where the file lands.

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 the format mapping immediately following; no 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?

Reasonable for a 3-param tool with no output schema and no annotations, since the schema covers page/path semantics and the description covers output format. However, without an output schema the description should hint at what is returned (e.g., file path) and state the state-mutation implications of the live-board path.

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 `output` parameter has no schema description, and the description compensates well by enumerating the accepted extensions and explaining the format-selection logic. `page` and `path` are covered by the schema, so the description fills the main gap.

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 ("Exports a page to a file") plus the key format dimension. It does not distinguish itself from siblings like render or save_board, so the reader must infer where this fits among export-like tools.

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 format-by-extension rule implies usage, but there is no explicit when-to-use vs alternatives (e.g., render, save_board, batch) nor any exclusions or prerequisites stated.

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

find_objectsA

Finds objects on a page without reading the whole board: by text, regex, type or area. Filters combine (all must match). text is a case-insensitive substring of a shape's text, a connector's label, a table's cells or a formula's LaTeX. in_region keeps objects whose bounding box overlaps the rectangle. Returns count (all matches), truncated (more than limit) and objects (same summaries as describe_board).

NameRequiredDescriptionDefault
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
textNoCase-insensitive substring (not empty).
typeNo
limitNoDefault 50.
regexNoRegular expression (Rust syntax, 500 characters at most, matched anywhere in the text; use (?i) for case-insensitive). Alternative to `text`.
in_regionNoRectangle of the board, same units as x/y/w/h.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden well: it explains conjunction semantics, what `text` searches across, how `in_region` overlap works, and the meaning of `count`, `truncated`, and `objects`. It does not explicitly state read-only status, though 'Finds' strongly implies it.

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 dense and front-loaded: purpose first, then filter semantics, then return shape. Every sentence adds relevant information, with no obvious 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 7-parameter search tool with no output schema and no annotations, the description is largely complete: it explains the filters and the return fields. The one gap is that the `objects` summaries are defined only by reference to describe_board, so the agent may need to consult that sibling for the exact object shape.

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 already high at 86%, but the description adds meaningful semantics beyond the schema for `text` (shape text, connector labels, table cells, formula LaTeX), `regex` (alternative to text), and `in_region` (bounding-box overlap). It adds less for `page`, `path`, `type`, and `limit`, which are already mostly covered by 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 states a specific verb and resource: 'Finds objects on a page' by text, regex, type, or area. It also clarifies the targeted-search nature versus reading the whole board, which distinguishes it from broader board-reading siblings like describe_board.

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 clearly implies when to use the tool: for finding objects without reading the whole board. It explains that filters combine conjunctively, but it does not explicitly state when not to use it or name an alternative tool such as describe_board as a usage choice.

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

format_textA

Formats text already on the board, like selecting it in the application: bold, italic, underline, strike, color, highlight. Works on a shape's text, a connector's label, or one table cell (cell). Choose the part with match (first occurrence; every one with all: true) or range [start, end) (character indices of the plain text, end excluded); with neither, the whole text. clear: true removes all formatting of the part first (then the other options apply). Returns changed: the number of characters whose formatting changed. Error if match is not found.

NameRequiredDescriptionDefault
idYesObject id (add_shape, describe_board…).
allNoWith `match`: format every occurrence, not only the first.
boldNotrue applies bold, false removes it.
cellNo[row, column] (from 0) of the table cell to format; required for a table, invalid otherwise.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
clearNotrue removes every formatting of the part.
colorNoText color: "#rrggbb" or "ink" sets it, null removes it.
matchNoSubstring to format (case-sensitive).
rangeNo[start, end): character indices, start included, end excluded.
italicNotrue applies italic, false removes it.
strikeNotrue applies strikethrough, false removes it.
highlightNoHighlight color behind the text: "#rrggbb" or "ink" sets it, null removes it.
underlineNotrue applies underline, false removes it.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses the return value (`changed`, count of characters whose formatting changed), the error condition when `match` is missing, and the ordering semantics of `clear: true` running before the other options apply. It omits permission or live-vs-file nuances beyond what the schema already states for `path`.

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?

Front-loads the operation and targets, then flows into part selection, then return/error behavior. Dense but nearly every clause carries information; a slight trim of the parenthetical color list would tighten it further.

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 14-parameter mutation tool with no annotations and no output schema, the description supplies the return format, the failure mode, and the interaction order of options. It leaves the live-board vs file behavior to the `path` schema description, which is reasonable.

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 baseline 3, but the description adds genuine cross-parameter meaning the schema cannot: `match` is first-occurrence unless `all: true`, `range` is half-open over plain-text indices, the default when neither is given, and that `clear` executes before other options. `cell` applicability is also clarified (valid for a table, invalid otherwise is in 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 and resource plus the exact target types: text on a shape, a connector's label, or a single table cell. It draws a clear line against siblings like update_object by describing the operation as the application's own text selection (bold, italic, underline, strike, color, highlight).

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?

Gives concrete selection rules: choose the part with `match` (first occurrence, or every one with `all: true`) or `range` [start, end), and with neither the whole text is formatted. It does not say when to prefer this tool over update_object or add_shape, but the targeting guidance is strong.

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

import_mermaidA

Adds a Mermaid diagram (flowchart/graph, stateDiagram, sequenceDiagram) with automatic layout. Returns the ids created.

NameRequiredDescriptionDefault
xNoX of the top-left corner. Defaults to below the existing content.
yNoY of the top-left corner.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
mermaidYes
new_pageNoCreate a new page for the diagram.

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 behavioral burden. It usefully discloses that layout is automatic and that created object ids are returned, but it omits mutation side effects, permission requirements, and whether changes are undoable (that detail lives only in the schema's path parameter).

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 no filler. The main action and supported diagram types are front-loaded, and the return behavior is stated immediately after.

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?

The high schema coverage and explicit mention of returned ids help, but for a mutation tool with no annotations or output schema, the description leaves notable gaps around side effects and selection versus sibling tools. It is adequate to call correctly but not fully complete.

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 83%, so the schema documents most parameters well. The description only echoes the mermaid content indirectly via supported diagram types and adds no further syntax or formatting guidance for the required mermaid parameter; baseline 3 is appropriate.

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 ('Adds') and resource ('Mermaid diagram'), and lists supported diagram genres plus automatic layout. The purpose is clear, but it does not explicitly differentiate this from sibling tools such as add_code_block or add_shape.

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 implies usage by naming Mermaid diagram types (flowchart/graph, stateDiagram, sequenceDiagram), but gives no explicit guidance on when to choose this over add_code_block, add_shape, or add_connector, nor any exclusions.

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

list_icon_groupsA

Lists the groups of the icon library (AWS, Azure, Brands...) with their sets and the number of icons of each, to know what to search for. Does not modify the board (a board path is still needed when the application is not open).

NameRequiredDescriptionDefault
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

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 must carry the behavioral burden; it does declare 'Does not modify the board' (an explicit read-only claim) and explains the path requirement when the application is closed. However, it says nothing about result size, pagination, or whether the group listing is static/cached, which matter for an agent planning a call.

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 with the core purpose first and the caveat in parentheses; nothing is wasted. The parenthetical duplicates schema content slightly, which keeps it from being maximally tight.

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-required-parameter read tool with no output schema and no annotations, the description covers what is returned (groups, sets, icon counts) and the safety profile (does not modify the board). Only secondary details like response size or ordering are 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?

Only one optional parameter and schema coverage is 100%, so the schema already explains the .inkboard path format and the live-board behavior. The description's parenthetical about needing a path when the app is closed largely restates the schema rather than adding new semantics.

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 ('Lists the groups of the icon library') plus the concrete shape of the result (groups with their sets and icon counts). It implicitly separates itself from search_icons via 'to know what to search for', though it never names that sibling outright.

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 phrase 'to know what to search for' gives a clear use context: call this as a discovery step before searching for icons. There is no explicit exclusion or named alternative tool, so it stops short of a full when/when-not statement.

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

manage_pagesA

Lists, renames or deletes pages (add_page creates them). list returns number, name and object count. rename and delete need page (number from 1, or name); rename also needs name. The last page of a board cannot be deleted; deleting a page deletes its objects.

NameRequiredDescriptionDefault
nameNoNew name (rename), 120 characters at most.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
actionYes

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 safety burden well: it discloses that deleting a page destroys its contained objects and that the last page of a board is undeletable. It also pre-describes the list return shape (number, name, object count). It does not say whether renames/deletes are reversible or what happens if the page name is ambiguous.

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 tight sentences, front-loaded with the operation set, then routed to the sibling, then constraints. No filler and nothing buried at the end that an agent needs up front.

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 an unannotated mutation tool with no output schema, the description covers side effects, a hard constraint, required per-action inputs, and the list return shape β€” enough to invoke it safely. Minor gaps remain around ambiguity resolution and whether rename/delete return anything.

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 75%, so most parameters are already documented. The description restates the page selector (number from 1, or name) and rename's name requirement, largely duplicating schema text rather than adding new semantics such as name-resolution rules or collision handling.

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?

Opens with a specific verb set and resource: 'Lists, renames or deletes pages', and immediately distinguishes itself from the sibling that creates them ('add_page creates them'). An agent can tell exactly what operations this tool bundles and which sibling handles creation.

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?

Routes the creation case to add_page explicitly and states which parameters each action requires ('rename and delete need page... rename also needs name'), so action selection is clear. What's missing is guidance on when to prefer page-by-number vs page-by-name, or when to use this versus inspection tools like describe_board.

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

move_objectsA

Moves objects together. Either relative (dx, dy) or absolute (x, y: new top-left corner of the bounding box of all the objects, as update_object's x/y for one). Connectors bound to moved objects follow. Locked objects move too.

NameRequiredDescriptionDefault
xNoNew left edge of the group of objects.
yNoNew top edge of the group of objects.
dxNoHorizontal offset (right is positive).
dyNoVertical offset (down is positive).
idsYesIds of the objects to move (1 to 2000; ids come from describe_board, find_objects or the add_* tools). Groups are not expanded: list every member.
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden and does so meaningfully: connectors bound to moved objects follow, locked objects are moved anyway, and x/y refer to the new top-left of the group's bounding box. These are non-obvious side effects an agent would otherwise have to guess. It omits return info and whether moves are undoable when acting on a file, though the schema's path parameter covers the live-undo case.

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 tight sentences with no filler: the mode choice is front-loaded, the bounding-box definition follows, and the two side effects are compact clauses. Every sentence changes how an agent would call the tool.

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 7-parameter mutation tool with no annotations and no output schema, the definition covers the risky parts: coordinate reference frame, group bounding-box behavior, connector/lock side effects. Remaining gap is only the return value and error behavior, which is minor given the fully documented parameters.

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 baseline is 3, but the description adds real meaning: it explains that x/y are the new top-left corner of the bounding box of all objects (not per-object), cross-references update_object's x/y semantics, and frames dx/dy and x/y as mutually exclusive alternatives. That resolves coordinate ambiguity the schema alone leaves implicit.

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 ('Moves objects together') with the scope of a group move, and the parenthetical ties x/y semantics to update_object's singular form, which implicitly separates it from that sibling. It doesn't explicitly contrast with arrange_objects or duplicate_objects, so differentiation is partial.

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?

'Either relative (dx, dy) or absolute (x, y)' gives clear selection guidance between the two coordinate modes, but there is no explicit statement of when to choose this tool over update_object (single object) or arrange_objects. Usage is implied by 'objects together' rather than stated.

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

renderA

Returns a PNG picture of the board (or of a part of it) as an image, to check your work visually. Read-only: the board, the file and the undo history are untouched. By default the whole page content is shown. region {x, y, w, h} (board units) shows exactly that rectangle; ids frames the given objects (plus padding) while still drawing their surroundings; give either, not both. show_ids: true draws a small white badge with the id of every visible object (top-left corner; middle of an arrow) so you can link what you see to the ids that update_object or add_connector expect (pen strokes get none). The longest side is max_px pixels (default 1400, 16 to 3000; a small region is enlarged 4 times at most); a PNG above 4 MiB is automatically produced smaller (said in note). output also writes the PNG to a .png file under the allowed root, for clients that do not display images. Text is measured approximately, as in export.

NameRequiredDescriptionDefault
idsNoIds of the objects to frame (not combinable with `region`).
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
max_pxNoLongest side of the image in pixels. Default 1400.
outputNoAlso write the PNG to this file (must end with .png, under the allowed root).
regionNoRectangle of the board to show, in board units (as the x/y/w/h of describe_board). Padding is not added.
paddingNoMargin around the content or the framed ids, in board units. Default 24.
show_idsNoDraw the object ids on the picture. Default false.

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does so well: it declares 'Read-only: the board, the file and the undo history are untouched', states defaults (max_px 1400, padding 24), the hard limits (16–3000 px, 4x max enlargement), and the automatic downscaling above 4 MiB surfaced via `note`. The only gap is that it never explicitly says what the returned payload looks like (image content vs. URI), which matters for a no-output-schema 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?

Purpose is front-loaded in the first clause, followed by safety, then framing modes, then decoration, then sizing. Every sentence carries distinct operational informationβ€”defaults, caps, or edge casesβ€”with no redundant restatement of the name.

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 an 8-parameter tool with a nested `region` object and no output schema, the description covers framing modes, sizing limits, file output, and read-only safety. The main missing piece is the shape of the response (how the image is returned, what `note` contains in the normal case), which matters given there is no output schema to fall back on.

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, but the description adds genuine meaning beyond the schema: `show_ids` badge placement (top-left corner, middle of arrows), that pen strokes get no id, that `region` adds no padding, and the ids-vs-region exclusivity. It stops short of explaining `page` or `path` semantics beyond what the schema already says, keeping it at a 4 rather than 5.

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?

Opens with a specific verb and resource ('Returns a PNG picture of the board') plus scope options (whole page, region, ids). It distinguishes itself from siblings by naming what it is for ('to check your work visually') and referencing `export`, `update_object`, and `add_connector` as related tools, so an agent can separate it from export/describe_board without opening schemas.

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 explicit when-to-use ('to check your work visually'), mutually exclusive alternatives for framing ('give either, not both' for region vs ids), and a condition for the `output` parameter ('for clients that do not display images'). The routing logic between the two framing modes is fully spelled out rather than implied.

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

save_boardA

Saves the board displayed in the application (live mode; it must already have a file). No effect in file mode: every tool already saves there.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/5.0
Behavior4/5

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

With zero annotations the description must carry the behavioral load, and it does disclose the key traits: precondition of an existing file, live-mode-only persistence, and no-op semantics in file mode. It omits what happens if the board has no file yet (silent no-op vs error) and says nothing about return value.

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 clauses, front-loaded with the action and scope, followed by the mode caveat. Nothing is wasted and nothing is redundant.

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-param, no-output-schema tool this covers the essential context an agent needs: which mode it applies to and the file prerequisite. The only gap is failure behavior when the precondition is unmet, which the agent would have to discover empirically.

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 per the baseline this scores 4. The description correctly spends no words on parameter syntax and instead uses the space for mode semantics.

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 ('saves') and resource ('the board displayed in the application'), scoped to live mode. No sibling tool performs a save, so the agent can immediately distinguish this from mutators like update_object or export.

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?

Explicitly gives the enabling condition (live mode, board must already have a file) and a when-not case (no effect in file mode, since every tool already saves there). It does not name an alternative action for file-mode users, but no sibling competes for this operation.

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

search_iconsA

Searches the built-in icon library (about 28,800 icons: AWS, Azure, Google Cloud, Cisco, Kubernetes, brand logos, UI and diagram symbols...) by keywords; names are in English. Every word of query must match (case-insensitive) the icon name, its set or its group. Returns ids to give to add_icon. Use list_icon_groups to see what the library contains, and group / set to narrow a broad search. Does not modify the board (a board path is still needed when the application is not open).

NameRequiredDescriptionDefault
setNoOnly this set (exact title or id, see list_icon_groups).
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
groupNoOnly this group, e.g. "AWS", "Brands", "General icons" (list_icon_groups).
limitNoMaximum number of icons returned (default 20, at most 100); `truncated` tells when more match.
queryYesKeywords, e.g. "lambda", "router", "github", "database server".

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it declares 'Does not modify the board', explains the `path`-optional-when-app-open precondition, and discloses match semantics ('every word of `query` must match (case-insensitive) the icon name, its set or its group') plus the `truncated` signal for overflow. It stops short of describing result shape beyond ids or any performance/rate behavior, but the safety and matching profile is well covered.

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?

Front-loaded with the action and scale, and every clause contributes (matching rule, return value, alternatives, read-only guarantee). The parenthetical icon enumeration is the only mildly verbose element, though it does help an agent judge coverage.

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 read-only search tool with no annotations and no output schema, the description covers what matters: what is searched, how matching works, what is returned (ids), how truncation is signalled, and the `path` precondition. Enough to invoke correctly without opening the schema.

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 baseline is 3, but the description adds real meaning: the AND-of-all-words, case-insensitive matching against name/set/group is not in the schema, and it frames `group`/`set` as narrowing filters and `limit`/`truncated` as interacting. That is genuine semantic value on top of documented params.

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: 'Searches the built-in icon library ... by keywords', with scope quantified (~28,800 icons) and content types enumerated (AWS, Azure, Kubernetes, brands, UI symbols). It is clearly distinguished from list_icon_groups (browsing) and add_icon (consuming the returned ids).

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?

Explicitly routes the agent to siblings: 'Returns ids to give to add_icon' and 'Use list_icon_groups to see what the library contains'. Also gives a narrowing strategy β€” '`group` / `set` to narrow a broad search' β€” for the common case of an over-broad query.

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

update_objectA

Modifies an object: text, position (top-left corner), size (shapes), colors, line style, font, lock, rotation; a connector's route, arrowheads and ends; one table cell. Everything is validated before anything is applied (an error changes nothing); a parameter that does not suit the object's type is ignored and listed in avertissements. Locked objects can still be modified here.

NameRequiredDescriptionDefault
hNo
wNo
xNo
yNo
idYes
toNoConnector only: id of the object to connect the end to.
cellNoTable only: [row, column] (from 0) of the cell whose text `text` replaces.
dashNo
fillNoColor "#rrggbb" or "ink" (the theme's text color).
fromNoConnector only: id of the object to connect the start to (shape, table or image).
pageNoPage: number (from 1) or name. Defaults to the first.
pathNoPath of the board file (.inkboard; .inkboard.json and .tableau.json also accepted). Optional when the application is open: the tool then acts live on the displayed board (undoable with Ctrl+Z).
textNoNew text of a shape or connector label; with `cell`, the new text of that table cell.
alignNoText alignment (shapes and connector labels).
arrowNoConnector only: arrowheads.
routeNoConnector only.
lockedNoLock or unlock the object in the application.
strokeNoColor "#rrggbb" or "ink" (the theme's text color).
opacityNo
markdownNoDefault false (text taken literally). true: `text` is Markdown: **bold**, *italic* (or _italic_), __underline__, ~~strike~~, {color=#e03131}text{/}, {bg=#ffec99}text{/}, {color=#e03131 bg=ink}text{/} (colors: #rrggbb or ink); nesting allowed; \ escapes * _ ~ { } \. Markup that cannot be applied stays literal text and is listed in the `warnings` of the result.
rotationNoAbsolute angle in degrees (shapes and images; 0 resets).
font_sizeNo
roundnessNoCorner rounding (0 sharp, 1 capsule).
font_familyNo
stroke_widthNoOutline width (0: no outline).

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses atomic validation (an error changes nothing), that type-mismatched parameters are silently ignored and reported in `avertissements`, and that locked objects remain editable. These are meaningful behavioral traits beyond a plain "update". It stops short of documenting permissions or full response shape.

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?

Front-loaded with the verb and a compact semicolon-delimited field list, then the validation contract. Dense but each clause earns its place given 25 parameters; the run-on structure is the only minor readability cost.

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 25-parameter mutation tool with no output schema and no annotations, the description supplies the key behavioral contract (all-or-nothing validation, ignored params surfaced in `avertissements`, locked-object handling) and scopes object-type-specific params. It doesn't fully enumerate every parameter's effect but is adequate to call correctly.

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 64% with 25 parameters, so the description must add value, and it does: it clarifies the text/markdown literal-vs-markup interplay, the `cell`+`text` combination, connector-only fields, and that irrelevant params are ignored and surfaced in `avertissements`. This layers semantics over the schema rather than repeating 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?

States a specific verb ("Modifies") and resource ("an object") and enumerates the concrete facets handled: text, position, size, colors, line style, font, lock, rotation, connector route/arrows/ends, and one table cell. This clearly scopes what the tool can mutate, though it never names the overlapping siblings (move_objects, format_text, arrange_objects) so the agent must infer partitioning.

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?

"Locked objects can still be modified here" implies a when-to-use condition vs tools that may refuse locked objects, and the type-matching rule hints at applicability. But there is no explicit statement of when to prefer this over move_objects/format_text/arrange_objects, leaving routing largely to inference.

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. 27 tool updatesv0.2.0
    • First observedadd_code_block
    • First observedadd_connector
    • First observedadd_formula
    • First observedadd_icon
    • First observedadd_image
    • First observedadd_page
    • First observedadd_shape
    • First observedadd_table
    • First observedarrange_objects
    • First observedauto_layout
    • First observedbatch
    • First observedboard_changes
    • First observedcreate_board
    • First observeddelete_object
    • First observeddescribe_board
    • First observedduplicate_objects
    • First observedexport
    • First observedfind_objects
    • First observedformat_text
    • First observedimport_mermaid
    • First observedlist_icon_groups
    • First observedmanage_pages
    • First observedmove_objects
    • First observedrender
    • First observedsave_board
    • First observedsearch_icons
    • First observedupdate_object

TDQS

B3.4/5.0

Scored across 27 tools

Disambiguation4/5

Each tool has a clearly stated purpose, and the add_* family is cleanly split by content type (shape, icon, image, table, code, formula, mermaid). A few boundaries blur: update_object also moves/locks a single object while move_objects and arrange_objects handle the same properties in bulk, and export vs render vs save_board are close but disambiguated by whether they return a file, a picture, or just persist state.

Naming Consistency4/5

Nearly all names are snake_case verb_noun (add_shape, delete_object, find_objects, manage_pages, search_icons). A handful deviate: export, render, batch are bare verbs and board_changes is a noun, and manage_pages is a multi-action catch-all, but the overall pattern remains readable and predictable.

Tool Count3/5

27 tools is on the heavy side for a drawing app; the surface could likely compress (separate add_table/add_code_block/add_formula/add_icon tools, plus manage_pages subactions). Still, each tool maps to a real distinct capability rather than filler, so it is only borderline over-scoped.

Completeness4/5

Coverage is strong: board creation, object creation across all content types, update/delete/move/arrange/group/lock/duplicate, page management, search, formatting, import/export, rendering and a batch meta-tool. Minor gaps only: no explicit undo/redo or clipboard-style cut/paste tooling, which agents must emulate via duplicate_objects and batch atomicity.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • 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
  • A
    license
    Not graded
    quality
    D
    maintenance
    Create visual whiteboards, diagrams, flowcharts, and project plans from AI conversations. 17 MCP tools for board management, element creation, and real-time collaboration.
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    A local-first whiteboard MCP server that enables AI agents to create, inspect, and update canvas diagrams and shapes collaboratively via 13 semantic tools.
    4
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Lets Claude, Codex, Cursor and other MCP clients draw hand-drawn Excalidraw diagrams on a local whiteboard, saving them as real .excalidraw files the agent can inspect, revise and undo. It also provides rendering to PNG, SVG import, and docs so agents can self-serve setup and troubleshooting.
    19
    30 npm
    1
    MIT