Skip to main content
Glama

Why Mapache?

Most whiteboard tools want an account, a monthly fee and a copy of your ideas on their servers. Mapache is a folder you run on your own computer. Your boards are plain files on your disk, it opens instantly, it keeps working on a plane, and your AI agent can read them and build on them with you.

  • ⚡ Fast like a native app. No framework, no build step, no loading spinners.

  • 🧠 Mind maps that keep up with you. Tab for a child, Enter for a sibling, drag to re-parent, colored branches, and as many maps as you want on one board.

  • 🎨 A real whiteboard around them. Sticky notes, 12 shapes, sections, connectors that route around objects, freehand drawing with shape recognition, images and videos.

  • 📊 Data built in. Paste a table from Excel or Google Sheets and turn it into any of 17 chart types.

  • 💬 Comments and mentions. Pin a comment anywhere, reply, resolve, and @mention people (or let your agent leave notes for you to review).

  • 🤖 Made for AI agents. A built-in MCP server lets Claude, Codex, Cursor and friends read your boards and create mind maps, notes, flowcharts and tables. You watch them appear live.

  • 🔒 Yours, for real. Local-first, no telemetry, plain JSON files you can read, back up or put in Git. AGPL-3.0.

Mapache

Typical SaaS whiteboard

Price

Free

Free tier, then per seat

Account required

No

Yes

Where your boards live

Files on your computer

Their cloud

Works offline

Yes

Limited

Your AI agent can read and edit boards

Yes, locally (MCP)

Through their cloud, if at all

Team server with accounts and live cursors

Yes, self-hosted with Docker

Their cloud, per seat

Open source and self-hostable

Yes

No

Dependencies to install

0

—

Related MCP server: excalidraw

🤖 Let your AI agent install it

Not technical? Give this to your AI agent (Claude Code, Codex, Cursor…) and it does everything for you:

Install Mapache for me following https://github.com/Hackeatutiempo/mapache/blob/main/AGENTS.md,
connect it to yourself as an MCP server, and leave a shortcut so I can open it with a double-click.

The step-by-step guide for agents lives in AGENTS.md: it checks Node.js, gets the code, starts it, creates a desktop shortcut, connects the MCP server and explains where your boards are saved.

🚀 Quick start

All you need is Node.js 18 or newer. There is nothing else to install.

git clone https://github.com/Hackeatutiempo/mapache.git
cd mapache
npm start

Open http://localhost:4321 and start thinking. Next time, double-click Abrir Mapache.cmd (Windows) or run ./start.sh (macOS and Linux): they start Mapache in the background if needed and open the browser.

Tip: in Chrome or Edge choose Install app in the address bar. Mapache gets its own window and icon and works even when the server is off; your changes sync to your files as soon as it is back.

Your boards are saved automatically as JSON files in ~/.mapache (run node bin/mapache.js where to see the exact folder). Export backup (bottom left) still gives you everything in one file.

When a new version comes out, Mapache tells you in the app. Update with node bin/mapache.js update (or ask your agent to "update Mapache"): it downloads it and restarts Mapache, and your boards are not touched.

🤖 Your AI agent can use it too

Mapache ships with an MCP server (the open standard that lets AI agents use tools) and a command line. Connect it once and ask things like:

"Turn my notes from today's meeting into a mind map in Mapache." "Read the board I have open and add a risks branch with three ideas under each one." "Draw the onboarding flow as a flowchart with a decision for paid and free users." "Put these sales numbers in a table on my Q4 board and add a column chart."

If Mapache is open in your browser, the changes appear live, and Ctrl+Z undoes them. Everything runs on your computer: the MCP server reads and writes the same files the app uses.

The easiest way: in the app, click Connect your AI agent (bottom left) and copy the prompt into your agent. Or connect it yourself (replace the path with where you installed Mapache; node bin/mapache.js mcp-config prints these with your real paths):

Agent

How to connect

Claude Code

claude mcp add --scope user mapache -- node ~/Mapache/bin/mapache.js mcp

Claude Desktop

Settings > Developer > Edit config, then add the JSON below

Codex (OpenAI, included with ChatGPT plans)

codex mcp add mapache -- node ~/Mapache/bin/mapache.js mcp

Gemini CLI

gemini mcp add mapache node ~/Mapache/bin/mapache.js mcp

Cursor, Windsurf

add the JSON below to ~/.cursor/mcp.json or ~/.codeium/windsurf/mcp_config.json

VS Code

MCP: Open User Configuration, add "mapache": { "type": "stdio", "command": "node", "args": ["~/Mapache/bin/mapache.js", "mcp"] } under servers

ChatGPT (web or phone)

It cannot reach your computer on its own. Use Codex, or a bridge such as Desktop Commander, and ask ChatGPT to use the mapache command line

{ "mcpServers": { "mapache": { "command": "node", "args": ["/full/path/to/Mapache/bin/mapache.js", "mcp"] } } }

Tool

What it does

list_boards, read_board, search_boards

See every board and read one as an outline, with ids

create_board, update_board, delete_board, create_folder

Organize boards (deleting moves them to the trash)

add_nodes, update_nodes, move_node, delete_nodes, add_mindmap

Grow and edit mind maps from indented outlines

add_items, update_items, delete_items

Sticky notes, text, shapes, sections, stickers, tables, charts and video embeds

connect

Arrows between anything, with labels

view_images

See what the images on a board show (screenshots, slides, photos)

list_comments, add_comment, reply_comment, resolve_comment

Read and write comments, with @mentions

export_board

Save a board as a shareable web page, PDF, PNG or SVG

open_board

Show a board in the browser

Agents write simple Markdown (# heading, - bullet, [ ] task, **bold**, links) and new content is placed in free space automatically. "open" always means the board you are looking at.

node bin/mapache.js help                      # everything it can do
node bin/mapache.js list                      # boards and folders
node bin/mapache.js show open                 # the board open in the app, as an outline
node bin/mapache.js new "Launch plan" --outline @plan.txt
node bin/mapache.js add open "Marketing" "Webinar" "Podcast"
node bin/mapache.js tool add_items '{"board":"open","items":[{"type":"note","text":"Call Ana"}]}'
node bin/mapache.js export open --format pdf  # save the open board as a PDF in Downloads
node bin/mapache.js start | stop | status | open
node bin/mapache.js autostart on              # start Mapache when you log in

Run npm link inside the folder once to get a global mapache command.

👥 For teams (beta)

Run one Mapache for your whole team on your own server: accounts with email and password, invitation links, roles (admin, can edit, can view), live cursors and avatars of who is on each board, and every change on everyone's screen as it happens. Each person can connect their own AI agent with a personal token.

git clone https://github.com/Hackeatutiempo/mapache.git && cd mapache
docker compose up -d          # then open http://<server>:4321 and use the setup code from: docker logs mapache

With a domain, docker compose --profile https up -d adds automatic HTTPS. Everything is in TEAM.md. Team mode is new: try it with your team and tell us what breaks.

✨ Features

Mind maps that grow as fast as you think

Quick-add dots, Tab and Enter, drag a branch and watch the map re-flow live, collapse with a counter, horizontal or vertical layouts, curved or angular lines. Paste an indented outline and it becomes a map.

Flowcharts with connectors that route themselves

Connect shapes, notes, tables or mind map nodes. Ends keep their side while the path re-routes around objects; drag any segment to shape it by hand. Elbow, curved or straight, with labels and nine end caps.

Your data, as charts

Paste from Excel, Google Sheets, Notion or Markdown, or drop a CSV. Charts stay linked to their table and update while you type. Color-blind-safe palettes in light and dark mode.

Share it with anyone

Export a board as a single web page: send it by email or chat and it opens in any browser, with zoom and pan, nothing to install. Or as PDF, PNG or SVG. Your agent can do it too ("save this board as a PDF on my desktop").

Light or dark, your call

Mind maps

As many as you want on one board (M). Horizontal or vertical layout, curved or angular lines, branch colors, icons, bullet, numbered and checklist nodes, paste an indented outline to create branches

Notes and text

Sticky notes that grow with their text, four text sizes, colors. Per-line headings, lists and checklists, plus text color, highlight, bold, italic and links on any selection

Shapes

Rectangle, pill, oval, diamond, parallelograms, trapezoid, triangle, hexagon, cylinder, cloud, star. Fill, border, dashed or transparent. They grow with their text

Sections

Named areas that carry their content when you move them

Connectors

Elbow, curved or straight; nine end caps; labels you can slide along the line; ends keep their side while the path re-routes around objects, and every segment can be dragged

Freehand

Pen, highlighter, eraser, lasso, and shape recognition (lines, rectangles, ellipses, diamonds)

Tables

Paste from spreadsheets, import and export CSV, sort, insert and move rows and columns

Charts

Column, bar, stacked and 100 %, line, area, pie, donut, scatter, bubble, radar, funnel, heatmap, waterfall and big-number tiles

Media

Images and videos (upload, drag or paste), YouTube, Vimeo and Loom links

Selection

Drag on the canvas to select what the box touches, Shift+click to add, then move, scale, align, distribute, duplicate, copy or delete together. Auto-arrange as a grid, a tree or a mind map. Lock objects so they stay put

Guides

Smart alignment guides snap edges and centers while you drag (hold Alt to skip)

Right-click menu

Copy and paste style, save as default style, arrange, align, lock, wrap in section, snap to grid and copy a link to that spot on the board

Folders

Nested folders and maps in the sidebar, drag to reorganize, a color and an icon for each

AI agents

MCP server and command line with 23 tools (it can also see the images on your boards); changes from your agent appear live and can be undone

Comments

Pins on the board or on any object, threads with replies, resolve, @mentions with a bell for unread ones (K)

Sync

Boards are files on your computer; every open tab and browser stays in sync, edits made offline sync later, and simultaneous changes are merged

Teams

Self-hosted team server (Docker): accounts, invitation links, roles, live cursors and presence, personal agent tokens

Languages

English and Spanish, following your browser (switch any time)

Themes

Dark, light or follow the system

Share and export

A single-file web page anyone can open in a browser (zoom and pan, no install), PDF, PNG, SVG, and a JSON backup of all maps, folders and videos

⌨️ Keyboard-first

Key

Does

Tab · Enter

Child · sibling (while typing)

M · N · T · R

New mind map · sticky note · text · shape

C · H · E · I

Connector · freehand · table · image or video

K

Comment

Drag on canvas · Ctrl A

Select many · select all

Shift L · Ctrl Alt C / V

Lock · copy and paste style

1 · 0 · Space + drag

Fit · 100 % · pan

?

Every shortcut

🗺️ Roadmap

  • Mind maps, whiteboard objects, tables and charts

  • Connectors, freehand drawing, media, multi-selection and guides

  • English interface

  • Boards as local files, live sync between tabs and browsers

  • MCP server and command line so AI agents can read and edit boards

  • Share a board as a single HTML page, PDF, PNG or SVG

  • Self-hosted team server with Docker: accounts, roles and invitation links

  • Real-time collaboration: live changes, cursors and presence, merged edits, keeps working offline

  • Comments and mentions

Have an idea? Open an issue.

🔐 Privacy

There is no account, no analytics and no server you do not run yourself. Boards live as JSON files in ~/.mapache on your computer, with a copy in your browser so the app works offline. The local server only listens on your own computer and refuses requests from other websites. The MCP server runs on your computer too; your agent's provider sees what the agent reads, as with any other tool you give it. In team mode the boards live on your own server, behind accounts (see TEAM.md).

Once a day the server asks GitHub which is the latest version of Mapache, to tell you when there is a new one. It is an anonymous request for public information, with nothing about you or your boards. Turn it off with MAPACHE_UPDATE_CHECK=off.

Plain JavaScript, no framework and no build step: the browser runs exactly the code you are reading.

File

What it does

src/app.js

State, in-place editing, context bar, menus, dragging, shortcuts

src/layout.js

Mind map layout and line geometry (pure, tested)

src/links.js

Turns typed or pasted web addresses into links

src/connectors.js

Connector routing

src/arrange.js

Arrange as grid, tree or mind map

src/ink.js

Freehand smoothing, eraser, lasso, shape recognition

src/shapes.js

Shape outlines

src/tables.js

CSV, TSV, Markdown and HTML table parsing

src/charts.js

SVG charts

src/sidebar.js

Folders and map list

src/i18n.js

English and Spanish

src/store.js

Browser storage and sync with the files

src/merge.js

Three-way merge of simultaneous changes

src/sw.js

Offline support

server.js

Local server: the app, the files API, live updates and MCP over HTTP

lib/store.js

Boards as files, with revisions and a trash

lib/board.js

Board editing for agents: outlines, Markdown, placement

lib/tools.js · lib/mcp.js

The agent tools and the MCP server

lib/auth.js · lib/team.js · src/team-ui.js

Team mode: accounts, invitations, roles, presence and cursors

Dockerfile · docker-compose.yml · Caddyfile

Team server image, with optional automatic HTTPS

bin/mapache.js

Command line

Design decisions and measurements are in DESIGN.md. Run the tests with npm test.

🤝 Contributing

Issues and pull requests are welcome, from typo fixes to whole features. Keep it dependency-free where you can, match the style of the surrounding code, and add a test in test/ for geometry, parsing or sync changes. Translations to more languages are a great first contribution (see src/i18n.js).

⭐ Support the project

If Mapache saves you time, a star helps other people find it. The first time you run npm start in a terminal it asks once whether you want to star the repo (only if you say yes, with your own GitHub CLI session).

📄 License

GNU AGPL-3.0. Use it, change it and host it for free. If you offer a modified version as a service to other people, share your changes under the same license.


Available Tools

23 tools
add_commentComment on a boardA

Leave a comment on a board, pinned to a node or item ("on", by id or text) or at a point. Write @Name to mention someone from the team. Comments are for talking about the board, not content: they never appear in exports. The comment is signed with your agent name and shows up live for everyone. Returns the comment id and who was mentioned. Use it to ask or suggest instead of changing the person's work; to answer an existing thread use reply_comment.

NameRequiredDescriptionDefault
xNoOr a point on the board (leave out x, y and on to use free space)
yNoSee x
onNoNode or item id (from read_board) or its text. The pin goes on its top-right corner and follows it
textYesThe comment (plain text, newlines allowed)
boardYesBoard id or title. Use "open" for the board the person has open in the app

TDQS

A4.7/5.0
Behavior4/5

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

Annotation coverage is broad (readOnly=false, destructive=false, idempotent=false, openWorld=false), yet the description still adds real behavioral context beyond it: comments never appear in exports, are signed with the agent name, appear live for everyone, and the call returns the comment id plus mentions. It stops short of noting that repeat calls create separate comments or any permission requirements, so it is strong but not complete.

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 purpose is front-loaded in the first clause, and each subsequent sentence contributes a distinct fact (placement, mentions, export invisibility, attribution, return value, alternative tool). No filler or restatement of the name/title.

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?

With no output schema, the description compensates by stating what comes back (comment id and who was mentioned). Combined with the placement, mention, and visibility semantics, an agent has everything needed to invoke this correctly and interpret the result.

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 100%, so the baseline is 3, but the description adds meaning the schema does not: the "@Name" mention syntax, the fact that "on" accepts an id or its text, and that omitting x/y/on falls back to free space. That is genuine semantic 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.

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 ("Leave a comment on a board") and immediately scopes the targeting modes (pinned to a node/item or at a point). It explicitly distinguishes itself from the sibling reply_comment, so an agent can route correctly without opening either schema.

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

Usage Guidelines5/5

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

It gives explicit when-to-use ("ask or suggest instead of changing the person's work") and when-to-use-something-else ("to answer an existing thread use reply_comment"). It also carves out a domain boundary — comments are for talking about the board, not content — which prevents misuse.

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

add_itemsAdd notes, shapes, tables…A

Add sticky notes, text, shapes, sections, stickers, tables, charts or video embeds to a board. They are laid out together in free space unless each has x and y. To chart data, add a table first, then a chart with its id. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns each new item with its type and id (use the ids with connect, update_items or a chart's table). For mind map branches use add_nodes instead.

NameRequiredDescriptionDefault
xNoTop-left of the group. Usually leave it out: Mapache places the group in free space
yNoSee x
boardYesBoard id or title. Use "open" for the board the person has open in the app
itemsYesThe items to add, placed as a group

TDQS

A4.9/5.0
Behavior5/5

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

Annotations declare only write/idempotency flags, but the description adds genuinely new behavioral context: the change is committed immediately as a new board revision, syncs live to open browsers, is reversible by the human via Ctrl+Z, and auto-places items in free space unless x/y are given. Because there is no output schema, it also discloses the return value (each new item with its type and id).

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?

Four sentences, front-loaded with the core action and item types, then sequencing, then side effects, then the sibling redirect. Every sentence carries a distinct piece of information with no restatement of the schema.

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 non-idempotent mutation tool with no output schema, the description covers what is created, how it is placed, the table-before-chart dependency, the immediate revision/live-sync/undo behavior, and the return shape. Nothing an agent needs to call or chain this tool is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not: items are grouped and laid out in free space unless x and y are supplied, and a chart's table parameter must reference a previously added table's id. That sequencing and layout rule is real added value beyond the per-field descriptions.

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 ("Add sticky notes, text, shapes, sections, stickers, tables, charts or video embeds to a board") and enumerates the item types, so the agent knows exactly what it produces. It also names the sibling it is not ("For mind map branches use add_nodes instead"), making it distinguishable without opening another schema.

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

Usage Guidelines5/5

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

Gives explicit routing guidance: use add_nodes for mind map branches, and for charts add a table first then reference it by id. It also points forward to downstream tools (connect, update_items) for the returned ids, leaving little to inference.

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

add_mindmapAdd a mind mapA

Add another, separate mind map to an existing board (a board can hold several). The first line of the outline is its central idea and the indented lines its branches. It is placed in free space unless you give x and y. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns the id of its central idea. To grow a map that already exists use add_nodes.

NameRequiredDescriptionDefault
xNoPosition of the central idea in board units. Usually leave x and y out
yNoSee x
boardYesBoard id or title. Use "open" for the board the person has open in the app
linesNoShape of the branch lines (default curvy)
layoutNohorizontal (default): branches to the left and right. vertical: grows downwards like an org chart
outlineYesIndented outline, one idea per line; indent (2 spaces or a tab) to nest. Markdown inside a line: **bold**, *italic*, `code`, [link](https://…)

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only declare readOnly=false, idempotent=false, destructive=false. The description goes well beyond: it saves immediately as a new revision, appears live in open browsers, is undoable via Ctrl+Z, and returns the central idea's id. This is exactly the extra context the annotation bar requires.

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?

Every sentence earns its place: purpose, outline semantics, placement, side effects, return value, and alternative routing. Front-loaded with the core action and no filler.

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 6-param mutation tool with no output schema, the description covers placement behavior, persistence/live-sync side effects, the return value, and the alternative tool. Nothing an agent needs 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.

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 conceptual meaning beyond the schema by explaining that the first outline line is the central idea and indented lines are branches, and that x/y are optional placement in free space. That is real value over the schema's field descriptions.

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+resource (add a separate mind map to an existing board), clarifies a board can hold several, and explicitly distinguishes itself from the sibling add_nodes. An agent can tell it apart from the nodes tools 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 Guidelines5/5

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

Explicitly routes the agent: 'To grow a map that already exists use add_nodes.' It also names the when-not condition (existing map vs. new map), leaving nothing to inference.

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

add_nodesAdd mind map branchesA

Add child nodes under an existing node of a mind map, from an indented outline (nested branches) or a flat list of texts. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns each new node with its id. Use it to grow a map; use add_mindmap for a separate new map and create_board for a new board.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
textsNoAlternative to outline: one child per text, all at the same level
parentYesNode id (from read_board), its exact text, or a path like "Central idea > Branch". The new nodes become its children
outlineNoIndented outline, one idea per line; indent (2 spaces or a tab) to nest. Markdown inside a line: **bold**, *italic*, `code`, [link](https://…)
positionNoInsert at this index among the existing children (default: at the end)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly=false, idempotent=false, destructive=false), and the description adds substantial context beyond them: the change is saved immediately as a new revision, propagates live to open browsers, and is undoable via Ctrl+Z. It also states the return payload (each new node with its id), which is otherwise undisclosed since there is no output schema.

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: the action and input modes come first, then behavioral guarantees, then sibling routing. Every clause carries information and nothing is padded.

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 non-idempotent mutation with no output schema, the description supplies exactly the missing pieces: revision semantics, live propagation, undo availability, and the shape of the return value. Nothing an agent needs to call it correctly is absent.

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

Parameters3/5

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

Schema coverage is 100%, so all five parameters are already documented, including the outline-vs-texts alternatives and the parent path syntax. The description restates the two input modes ('indented outline (nested branches) or a flat list of texts') but adds no format, default, or edge-case detail beyond what the schema already provides, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('Add child nodes under an existing node of a mind map') and names the two input modes (indented outline or flat text list). It explicitly differentiates itself from siblings add_mindmap and create_board, so an agent can route correctly 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 ('Use it to grow a map') plus named alternatives with their own conditions ('use add_mindmap for a separate new map and create_board for a new board'). The add-vs-create distinction is 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.

connectConnect thingsA

Draw connectors (arrows) between nodes and/or items, optionally with a label, for flowcharts and relations. Several in one call; each call adds new connectors (it does not replace existing ones). The path routes itself around other objects. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns how many connectors were added. To change a connector later use update_items with its id.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
connectionsYesOne entry per arrow

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: each call is additive ('does not replace existing ones'), paths auto-route around other objects, the change saves as a new revision and appears live, and it is undoable via Ctrl+Z. This is exactly the mutation/live-sync behavior an agent needs and the annotations don't supply.

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?

Front-loads what the tool does, then layers additivity, live-sync, return value, and the modify path in tight sentences with zero waste.

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?

With no output schema, the description still states the return ('how many connectors were added') and covers additivity, routing, persistence, and undo. Nothing an agent needs 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.

Parameters3/5

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

Schema coverage is 100% with detailed nested descriptions for from/to/label/route/style/endCap, so the schema carries the semantics. The description only adds 'optionally with a label,' which the schema already documents, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (Draw) and resource (connectors/arrows between nodes and items) plus the use case (flowcharts and relations). An agent can distinguish this from add_items and update_items 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 Guidelines4/5

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

Gives clear context (flowcharts and relations) and explicitly routes the modify case: 'To change a connector later use update_items with its id.' It stops short of stating when to add a connector vs. a node/item from add_items, so no full exclusion set.

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

create_boardCreate a boardA

Create a new board with a mind map. Give an outline to fill it: if the outline has one top line it becomes the central idea; otherwise the title is the central idea and each top line a branch. Always creates a new board (calling it twice makes two). Returns the board id, the central idea id and the address to open it. To add to an existing board use add_nodes, add_mindmap or add_items instead.

NameRequiredDescriptionDefault
titleYesBoard title, shown in the sidebar (and as the central idea when the outline has several top lines)
folderNoFolder name, path ("Work / Clients") or id to put the board in. Missing folders are created. Leave out for no folder
layoutNohorizontal (default): branches to the left and right. vertical: an org-chart that grows downwards
outlineNoIndented outline, one idea per line; indent (2 spaces or a tab) to nest. Markdown inside a line: **bold**, *italic*, `code`, [link](https://…)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false; the description reinforces non-idempotency with a concrete consequence ("calling it twice makes two") and discloses the return payload (board id, central idea id, address). It also explains the outline-to-central-idea resolution rule, which no annotation covers, though it says nothing about permissions or folder-side effects beyond what the schema states.

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?

Short, front-loaded sentences: purpose first, then outline semantics, then non-idempotency, then return values, then the sibling redirect. Each sentence carries distinct information, though the response-payload clause overlaps slightly with what an output schema would normally carry.

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?

With no output schema, the description compensates by naming the three return values, and it covers the one genuinely ambiguous input (outline structure) plus the re-invocation hazard. For a four-parameter create tool with full schema coverage, nothing an agent needs 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.

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 real semantic value beyond the schema: the rule that a single top line becomes the central idea while multiple top lines push the title into that role. That interpretation logic is not in the schema and directly affects how an agent should shape the outline argument.

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 opens with a specific verb+resource ("Create a new board with a mind map") and immediately differentiates itself from siblings by naming add_nodes, add_mindmap and add_items as tools for existing boards. An agent can distinguish this from create_folder or add_items 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 Guidelines5/5

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

It states the explicit when-not condition ("To add to an existing board use add_nodes, add_mindmap or add_items instead") and gives the alternative tool names. The non-idempotency warning ("calling it twice makes two") is exactly the guidance an agent needs before retrying a create call.

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

create_folderCreate a folderA

Create a folder in the sidebar to organize boards, optionally inside another folder. Always creates a new folder, even if one with the same name exists; returns its id. You rarely need it: create_board and update_board create missing folders by themselves when you pass a folder path.

NameRequiredDescriptionDefault
iconNoAn emoji shown before the name
nameYesFolder name as shown in the sidebar
colorNoColor of the folder in the sidebar (default none)
parentNoParent folder name, path ("Work / Clients") or id; it must already exist (you get an error otherwise). Leave out for a top-level folder

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false and destructiveHint=false, so safety is covered. The description adds real behavioral value anyway: it confirms non-idempotency in plain language ('Always creates a new folder, even if one with the same name exists'), states that the returned id is the useful output, and warns that the parent must already exist or you get an error.

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 core action, then the non-idempotency caveat, then the routing guidance to siblings. No filler or restatement of the title.

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?

There is no output schema, but the description closes that gap by saying it returns the folder id. Combined with the error condition on parent and the sibling routing, an agent has everything needed to call it correctly.

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

Parameters3/5

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

Schema coverage is 100%, so name, icon, color and parent are fully documented in the schema itself, making 3 the baseline. The description only gestures at placement ('optionally inside another folder') without adding syntax or format detail, so it does not exceed the schema's own documentation.

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 ('Create a folder in the sidebar') plus the scope it affects (organize boards). It also positions itself against siblings by noting create_board/update_board handle folders implicitly, so an agent can disambiguate 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?

Explicitly says 'You rarely need it' and names the alternatives (create_board, update_board) along with the condition under which they cover the need (passing a folder path). This is a rare case of an explicit when-not-to-use plus a named substitute.

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

delete_boardDelete a boardA
DestructiveIdempotent

Move a whole board to the trash. It disappears from the app; it can be restored with mapache restore <id>, which the result tells you. Only do this when the person asks. To remove part of a board use delete_nodes or delete_items instead.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, idempotentHint=true and readOnlyHint=false, so safety is covered. The description adds genuinely useful recovery semantics: the delete is a reversible trash move restorable via `mapache restore <id>`, and it notes the result carries the id. It stops short of stating permission requirements, but goes well beyond the annotations.

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

Conciseness5/5

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

Three short sentences, each earning its place: what happens, how to undo it, when to use it, and what to use instead. The core action is front-loaded and there is no filler.

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?

There is no output schema, and the description compensates by telling the agent the result returns the restore id. For a one-parameter destructive tool, the action, reversibility, precondition, and alternatives are all present.

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 `board` parameter (including the "open" sentinel) is fully documented in the schema itself. The description adds no syntax or format detail for the parameter, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Move a whole board to the trash") and immediately scopes it against siblings by naming delete_nodes and delete_items for partial removal. An agent can distinguish this from the other delete tools 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 Guidelines5/5

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

Explicit when-to-act guidance ("Only do this when the person asks") plus an explicit alternative and the condition that selects it ("To remove part of a board use delete_nodes or delete_items instead"). Nothing is left to inference.

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

delete_itemsDelete itemsA
DestructiveIdempotent

Delete notes, shapes, tables, charts, connectors or other items, plus the connectors attached to them (comments pinned to them stay, unpinned). Only when the person asks; they can undo it in the app with Ctrl+Z. Returns how many items were removed. For mind map nodes use delete_nodes.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
itemsYesItems to delete: ids (from read_board) or their exact texts

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already flag destructiveHint=true and idempotentHint=true, but the description goes further: it discloses the cascade (attached connectors are also removed), the comment behavior (pinned stay, unpinned go), that the action is user-undoable via Ctrl+Z, and that it returns a removal count. That is real behavioral value beyond the structured hints.

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 zero filler; scope, precondition, side effects, undo, and the sibling routing are all front-loaded in priority order. Every clause carries information an agent needs.

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?

No output schema exists, and the description covers the return value ('how many items were removed'), the destructive side effects, the undo path, and the sibling alternative. Nothing material is missing for a two-parameter destructive 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 100%, so both parameters ('board' including the "open" sentinel, and 'items' as ids or exact texts) are already fully documented in the schema. The description adds no format or syntax detail beyond that, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific verb (delete) plus the full range of resources affected (notes, shapes, tables, charts, connectors, other items) and explicitly routes mind map nodes elsewhere. An agent can distinguish it from delete_nodes and delete_board 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 Guidelines5/5

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

States a hard precondition ('Only when the person asks') and names the correct alternative for a sibling case ('For mind map nodes use delete_nodes'). Both when-to-use and when-to-use-something-else are explicit.

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

delete_nodesDelete mind map nodesA
DestructiveIdempotent

Delete mind map nodes and every node under them, plus the connectors attached to them (comments pinned to them stay, unpinned). The central idea of the main map cannot be deleted. Only when the person asks; they can undo it in the app with Ctrl+Z. Returns how many nodes were removed. To change a node instead use update_nodes.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
nodesYesNodes to delete: ids (from read_board), exact texts or paths like "Central idea > Branch"

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare destructiveHint=true, but the description adds substantive behavior an agent cannot infer: deletion is recursive over descendants and connectors, comments pinned to deleted nodes survive while unpinned ones do not, the main map's central idea is protected, the action is user-undoable via Ctrl+Z, and the result reports a count. That goes well beyond the structured safety hints.

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 destructive scope and dense with information in only four sentences — very little waste. The parenthetical 'comments pinned to them stay, unpinned' is compressed to the point of ambiguity about what happens to unpinned comments, costing a point.

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 destructive, no-output-schema tool, the description covers the cascade, the protected central idea, the comment side effect, the undo path, and the return value ('Returns how many nodes were removed'). Nothing essential for calling it correctly is missing despite the absence of an output schema.

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

Parameters3/5

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

Schema description coverage is 100%, so both `board` and `nodes` are already documented with formats and the 'open' sentinel. The description adds no syntax or format detail beyond the schema; the only relevant extra is the central-idea restriction, which is a constraint rather than parameter semantics. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (delete nodes) and immediately scopes it with cascade semantics ('every node under them, plus the connectors attached to them'). It also names the sibling to use for the opposite operation ('update_nodes'), so an agent can distinguish it from update_nodes, delete_items, and delete_board 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 Guidelines5/5

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

Gives an explicit usage gate ('Only when the person asks'), names the alternative for a non-destructive need ('To change a node instead use update_nodes'), and notes the escape hatch ('they can undo it in the app with Ctrl+Z'). When, when-not, and alternative are all present.

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

export_boardExport or share a boardA

Save a board as a file the person can share: "html" is a single web page anyone can open in a browser (with zoom, no install), "pdf", "png" or "svg". The Mapache app renders it, so it opens in the browser if it is not open yet (and switches to that board). The board itself is not changed; the file never overwrites an existing one (a number is added to the name). Returns where the file was saved and its size.

NameRequiredDescriptionDefault
pathNoFolder or full file path to save to. Default: the Downloads folder
boardYesBoard id or title. Use "open" for the board the person has open in the app
formatNohtml (default): one web page with zoom. pdf for printing, png for an image, svg for vector graphics

TDQS

A4.4/5.0
Behavior5/5

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

Beyond the annotations, it discloses meaningful side effects: the app renders the file, may open the browser and switch to that board, the board itself is unchanged, and the file never overwrites an existing one (a number is appended). It also states the return content (save location and file size). This is exactly the behavioral context the annotations cannot convey.

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

Conciseness4/5

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

The description is front-loaded with the core purpose and format guidance, then parenthetical detail on rendering behavior. Slightly long and the browser-switching aside is a touch verbose, but every sentence contributes information an agent would use.

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?

With no output schema, the description compensates by stating what is returned (save path and size), along with format options, defaults, and side effects. Nothing an agent needs 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.

Parameters3/5

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

Schema coverage is 100%, so the parameter definitions already carry the format enum semantics and the Downloads default. The description's format exposition largely restates the schema, adding only the note that a numbered name is used to avoid overwriting. Baseline 3 is appropriate when the schema does the heavy lifting.

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 ('Save a board as a file the person can share') and enumerates the supported output formats. It is clearly distinct from siblings like open_board, delete_board, and read_board, so an agent can route to 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?

It gives concrete selection guidance for the format parameter ('html' for a shareable browser page, 'pdf' for printing, 'png' for an image, 'svg' for vector). It lacks explicit when-not-to-use or alternative-tool routing, but no sibling performs the same export function, so there is little to disambiguate.

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

list_boardsList boardsA
Read-only

List every Mapache board (mind maps and whiteboards). Start here: it returns one line per board with its title, id, folder, number of nodes, items and open comments, last change, and which board is open in the app, plus the list of folders. Read-only. Use read_board next to see a board's content, or search_boards to find text across boards.

NameRequiredDescriptionDefault
folderNoOnly list the boards in this folder (its name, path like "Work / Clients", or id). Leave out to list all boards

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, and the description's "Read-only" restates rather than extends that. It does compensate by disclosing the return shape in detail (one line per board with title, id, folder, node/item/comment counts, last change, and which board is open, plus the folder list), which is valuable given there is no output schema. It skips auth, rate limit, or pagination behavior.

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

Conciseness5/5

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

Three sentences, zero filler, and the front-loading is deliberate: scope first, payload second, routing third. Every sentence earns its place for an agent deciding whether to call it.

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 no-argument, read-only listing tool with no output schema, the description covers what it returns, that it is safe, and where to go next. Nothing an agent needs in order to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the single folder parameter is fully documented there, including its name/path/id forms and the leave-out default, so the baseline is 3. The description only implies the filter exists via the returned folder list and does not add format or syntax detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource ("List every Mapache board") and scopes it precisely by naming the two board kinds it covers, mind maps and whiteboards. An agent can immediately distinguish it from read_board, search_boards, and the mutation siblings 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 Guidelines5/5

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

It explicitly positions itself as an entry point ("Start here") and routes to the correct alternatives with conditions: read_board "to see a board's content" and search_boards "to find text across boards." No inference is required to pick the right tool.

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

list_commentsList commentsA
Read-only

List the comment threads on a board. Returns, for each thread, its id, author, date, what it is pinned to, its text and its replies, oldest first. Read-only. Use it when the person asks you to review a board or answer comments; then reply_comment and resolve_comment.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
include_resolvedNoAlso list resolved comments (default false: only open ones)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so 'Read-only' largely repeats structured data. The description earns credit by disclosing the return shape (id, author, date, pin target, text, replies) and the sort order ('oldest first'), which is behavior the annotations cannot convey and which matters because no output schema exists.

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: purpose, return contract, then usage and routing. Front-loaded with what the tool does and free of 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 does the necessary work of enumerating returned fields and ordering, and parameters are fully documented in the schema. Minor gaps remain around result volume or pagination behavior for boards with many threads.

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%, including the non-obvious 'open' sentinel for board and the default-false semantics for include_resolved, so the schema carries the meaning. The description adds only the implicit ordering, not parameter-level detail, making the baseline 3 correct.

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 ('List the comment threads on a board') and immediately distinguishes itself from the mutation siblings by naming the reply/resolve tools as follow-ups. An agent knows this is the read side of the comment workflow 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?

Explicitly gives the triggering context ('when the person asks you to review a board or answer comments') and routes to the downstream tools reply_comment and resolve_comment. It does not, however, state when NOT to use it (e.g. vs read_board or list_boards), so it stops short of full when/when-not coverage.

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

move_nodeMove a branchA
Idempotent

Move a node, with its whole branch, under another parent (in the same board), or reorder it among its siblings by giving its current parent and a new position. A node cannot go under itself or its own children. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns a confirmation.

NameRequiredDescriptionDefault
nodeYesThe node to move. Node id (from read_board), its exact text, or a path like "Central idea > Branch"
boardYesBoard id or title. Use "open" for the board the person has open in the app
parentYesNew parent node (id, text or path). Pass its current parent to only reorder it
positionNoIndex among the new siblings, 0 = first (default: last)

TDQS

A4.5/5.0
Behavior5/5

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

Adds substantial behavior beyond the annotations: the change is saved immediately as a new board revision, appears live in any open browser, and is undoable via Ctrl+Z, and it returns a confirmation. Annotations (readOnly=false, destructive=false, idempotent=true) are consistent with an undoable mutation.

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?

Front-loaded with the core action and scoped parenthetically, then constraints, then side effects and return value. Every sentence carries information and nothing is padded.

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?

With no output schema and full annotation coverage, the description still supplies the persistence model, live-update effect, undo path, and return value. An agent has everything needed to invoke and reason about the call.

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 each parameter already documents its accepted forms (id, text, path; board id/title/'open'; position index semantics). The description reinforces the parent/position reorder relationship but adds no syntax or meaning beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (move) plus resource (node/branch) and scope (under another parent in the same board, or reorder among siblings). This clearly separates it from add_nodes, update_nodes, and delete_nodes, 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?

Explains the two modes of use (reparent vs. reorder via current parent + new position) and states the important constraint that a node cannot go under itself or its own children. It does not explicitly name an alternative tool, but the usage context is unambiguous.

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

open_boardOpen a board in the appA
Read-only

Open a board in Mapache in the person's browser (starting Mapache if needed), so they can see it; it does not change the board. Returns its address. Offer it after a big change; set launch to false to only get the link.

NameRequiredDescriptionDefault
boardNoBoard id or title. Use "open" for the board the person has open in the app
launchNoOpen the browser (default true). false only returns the address

TDQS

A4.3/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and openWorldHint=false; the description adds meaningful behavioral detail the annotations do not cover: that Mapache may be started if not running, that the board is not modified, and that the return value is the address. This is good added context, though it doesn't detail failure modes or timing.

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 tightly packed sentences, front-loaded with the core action and scope, then the suggested use and the launch nuance. Every clause carries information with no padding.

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 read-only, zero-required-parameter tool with no output schema, the description covers purpose, effect boundary, side effect (starting the app), and return value. Nothing an agent needs 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.

Parameters3/5

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

Schema coverage is 100%, so both parameters are already documented in the schema, and the enum-like value 'open' for board is defined there. The description restates the launch=false behavior but adds no new syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb (open), resource (a board), the surface it opens in (the person's browser, starting Mapache if needed), and the effect boundary ('it does not change the board'). This clearly separates it from read_board and export_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?

Gives concrete usage guidance: 'Offer it after a big change; set launch to false to only get the link.' This tells the agent when to invoke it and how to get link-only behavior. It stops short of naming an explicit alternative (e.g., read_board for content vs. open for viewing), leaving minor inference.

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

read_boardRead a boardA
Read-only

Read a whole board. Returns its mind maps as indented outlines, then its notes, shapes, tables, charts, connectors, images and open comments, each with the id the editing tools need (to see what the images show, use view_images). Read-only. Call it before changing a board you have not read in this conversation; use list_comments for the full comment threads.

NameRequiredDescriptionDefault
boardNoBoard id or title. Use "open" for the board the person has open in the app
formatNomarkdown (default): an easy-to-read outline with ids. json: the raw board document, only when you need exact positions or styles

TDQS

A4.5/5.0
Behavior4/5

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

Adds real context beyond the annotations: what the payload contains, that each item carries the id the editing tools require, and that open comments are only partial, with list_comments as the escape hatch. "Read-only" merely restates readOnlyHint=true rather than adding new information, which keeps it from a 5.

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

Conciseness5/5

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

Three sentences, each doing distinct work: what it returns, the read-only confirmation plus id contract, then the routing rules. The payoff and the sibling pointers are front-loaded with no filler.

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?

With no output schema, the description carries the return-value burden and does so by listing the content categories and the id contract needed by editing tools. For a two-parameter read tool with annotations covering safety, nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and both parameters are documented there, including the "open" sentinel and the markdown/json tradeoff. The description only implies the default outline format ("indented outlines") and adds no syntax or constraint detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("Read a whole board") and enumerates exactly what comes back: mind maps as indented outlines, notes, shapes, tables, charts, connectors, images, open comments. This clearly separates it from list_boards (enumeration), view_images (image content) and list_comments (threads).

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 an explicit precondition ("Call it before changing a board you have not read in this conversation") and names two alternatives with the condition that selects them: view_images for what images show, list_comments for full comment threads. An agent needs no inference to choose correctly.

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

reply_commentReply to a commentA

Reply in an existing comment thread (find it with list_comments). The reply is signed with your agent name and shows up live. Replying to a resolved comment reopens it. Write @Name to mention someone. Returns which thread you replied to and who was mentioned. To start a new thread use add_comment.

NameRequiredDescriptionDefault
textYesThe reply (plain text, newlines allowed)
boardYesBoard id or title. Use "open" for the board the person has open in the app
commentYesComment id (from list_comments or read_board), or a unique part of its text

TDQS

A4.7/5.0
Behavior4/5

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

Annotations establish the write, non-idempotent, non-destructive profile, and the description adds genuinely non-derivable behavior: the reply is signed with the agent name, appears live, and reopens a resolved thread. It stops short of covering failure modes such as an unresolvable comment reference or permission errors.

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?

Five short sentences, each carrying distinct information (thread requirement, signing, side effect, mention syntax, return shape), with the routing pointer placed last as a natural closer.

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?

No output schema exists, but the description still discloses what comes back (thread replied to and who was mentioned), and the mutation's side effects are narrated, leaving no material gap for a 3-parameter tool.

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 description coverage is 100%, so the baseline is 3; the description goes beyond it by specifying the @Name mention convention, which the schema only calls "plain text" and would otherwise be undiscoverable.

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+resource ("Reply in an existing comment thread") and explicitly routes the alternative case to add_comment for new threads, so it is distinguishable from its closest sibling without opening either schema.

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

Usage Guidelines5/5

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

Names list_comments as the way to locate the thread, states the condition for the alternative ("To start a new thread use add_comment"), and flags the side effect of replying to a resolved comment. Nothing about when to pick this tool is left to inference.

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

resolve_commentResolve a commentA
Idempotent

Mark a comment thread as resolved once you have done what it asked, or reopen it with reopen: true. Resolved threads stay on the board, hidden from the open list; nothing is deleted. Returns the comment id. To answer before resolving use reply_comment.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
reopenNoReopen a resolved comment instead
commentYesComment id or a unique part of its text

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare non-destructive and idempotent, and the description reinforces this with substantive side-effect detail that annotations cannot express: resolved threads remain on the board, disappear only from the open list, and nothing is deleted. It also discloses the dual resolve/reopen mode and the return value (comment id).

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

Conciseness5/5

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

Three sentences, front-loaded with the action, followed by side-effect clarification and the sibling hand-off. Every sentence carries distinct information with no padding.

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 three-parameter mutation with no output schema, the description covers the action, the alternate mode, side effects, reversibility of appearance, and the return value, which is everything an agent needs to invoke it 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 100%, so the baseline is 3, but the description adds real meaning by framing 'reopen' as an in-place toggle of the same operation rather than a distinct tool, and by implying the comment selector accepts partial text matches as the schema notes. It does not add syntax or edge-case detail beyond that.

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 (mark as resolved / reopen) on a specific resource (comment thread), and explicitly distinguishes itself from reply_comment. An agent can tell exactly what operation this performs without inspecting 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 Guidelines5/5

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

Gives an explicit trigger condition ("once you have done what it asked") and names the alternative for the adjacent case ("To answer before resolving use reply_comment"). The when-to-use and which-sibling decision are both spelled out.

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

search_boardsSearch boardsA
Read-only

Search text across all boards: titles, mind map nodes, notes, shapes, tables, sections, connector labels and comments. Case and accents are ignored. Returns, for each board with matches, its title and id and up to 30 hits with their ids. Read-only. Use it to find which board talks about something; use read_board to see one board in full.

NameRequiredDescriptionDefault
queryYesWords to look for (matched as a substring, ignoring case and accents)

TDQS

A4.5/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, and the description reinforces read-only plus adds non-obvious behavior: matching ignores case and accents, and results are capped at 30 hits per board. It does not mention pagination or truncation beyond that cap, which is the main remaining gap.

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 ordered scope → matching/return behavior → usage routing. No filler and the distinguishing information is front-loaded.

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?

There is no output schema, so the description carries the return-shape burden and does so: per-board title and id plus up to 30 hits with ids. Combined with scope and routing, an agent has everything needed to call this correctly.

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% for the single 'query' parameter and the schema already documents substring matching that ignores case and accents. The description's matching note duplicates the schema rather than adding new syntax or format guidance, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource (search text across all boards) and enumerates the searched fields (titles, nodes, notes, shapes, tables, sections, connector labels, comments). It explicitly distinguishes itself from read_board, so the agent can route correctly 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 Guidelines5/5

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

Gives both when-to-use ('find which board talks about something') and the alternative with its condition ('use read_board to see one board in full'). This is explicit routing guidance against a named sibling.

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

update_boardRename or move a boardA
Idempotent

Rename a board, move it to a folder, or change its color or icon in the sidebar. Only the fields you pass change; the content of the board is untouched (to edit content use update_nodes or update_items). Returns a confirmation and the board address.

NameRequiredDescriptionDefault
iconNoAn emoji shown before the title in the sidebar, or "none" to remove it
boardYesBoard id or title. Use "open" for the board the person has open in the app
colorNoColor of the board in the sidebar, or "none" to remove it
titleNoNew title
folderNoFolder to move it to: name, path ("Work / Clients") or id; "" or "root" for no folder. Missing folders are created

TDQS

A4.5/5.0
Behavior4/5

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

Annotations cover the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description still adds real context beyond that: it is a partial/patch update where unspecified fields are preserved, board content is untouched, and it returns a confirmation plus the board address. It stops short of detailing failure modes, but that is a minor gap given the annotation coverage.

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 the operations, then the partial-update rule, then the routing to sibling tools. Every sentence earns its place with no restatement of the name or annotations.

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?

There is no output schema, and the description fills that gap by stating 'Returns a confirmation and the board address.' Combined with the patch semantics and sibling routing, an agent has everything needed to select and call this tool correctly.

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 baseline is 3. The description maps intent to parameters (rename→title, move→folder, color/icon) but adds no format or syntax details beyond the schema, and does not mention the special 'open' board value that the schema documents. Adequate, but the schema does the heavy lifting.

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 specific verbs and resource: 'Rename a board, move it to a folder, or change its color or icon in the sidebar.' It also explicitly carves out the content-editing scope and routes it to update_nodes/update_items, so an agent can distinguish it from sibling tools 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 Guidelines5/5

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

The description gives explicit alternatives: '(to edit content use update_nodes or update_items)', which is exactly the boundary an agent needs when choosing between metadata edits and content edits. No exclusions left to inference for the primary fork, and the partial-update rule ('Only the fields you pass change') tells the agent how to invoke it.

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

update_itemsEdit notes, shapes, tables…A
Idempotent

Change existing items (notes, text, shapes, sections, tables, charts, connectors): text, color, position, size, table cells, chart type and more. Several items in one call; in each update only the fields you pass change, and fields that do not apply to that item type are ignored. A wrong color for the type returns an error listing the valid ones. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns how many items changed. For mind map nodes use update_nodes.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
updatesYesOne entry per item to change

TDQS

A4.6/5.0
Behavior5/5

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

Annotations only establish readOnly=false, destructive=false and idempotent=true; the description goes well beyond them by describing partial-update semantics (only passed fields change, non-applicable fields are ignored), the validation error on an invalid color, immediate persistence as a new board revision, live propagation to open browsers, undo via Ctrl+Z, and the return value. This is exactly the write-path behavior an agent needs and it is consistent with the annotations.

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 purpose, then behavior, then the sibling pointer. The long parenthetical item list and the many clauses are dense but each sentence carries distinct information; only the enumeration of item types is arguably padded, costing it a perfect score.

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 two-parameter bulk-mutation tool with no output schema, the description covers the full picture: what can be changed, partial-update behavior, error behavior, persistence and undo, live effects, and what is returned (count of changed items). Nothing needed 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.

Parameters4/5

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

Schema coverage is 100%, so per-field documentation is already handled and the baseline is 3. The description exceeds that by adding cross-field semantics not present in the schema: only the fields you pass are changed, fields not applicable to an item type are silently ignored, multiple items can be updated per call, and the color error lists valid alternatives.

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 (change/edit) and resource (existing items), enumerating the item types covered: notes, text, shapes, sections, tables, charts, connectors. It also explicitly routes mind map nodes to the sibling update_nodes, so an agent can distinguish it from update_nodes, add_items and delete_items 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 Guidelines4/5

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

It gives clear context for when this applies (modifying existing items, including bulk multi-item edits) and names the alternative for mind map nodes. It stops short of full when-not guidance — it never contrasts itself with add_items for creation or delete_items for removal — but the routing rule to update_nodes is explicit.

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

update_nodesEdit mind map nodesA
Idempotent

Change existing mind map nodes: text, branch color, icon, folded state or checkbox. Several nodes in one call; in each update only the fields you pass change. It is saved at once as a new revision of the board and appears live in any browser that has it open (the person can undo it with Ctrl+Z). Returns how many nodes changed. To add nodes use add_nodes, to move them move_node, to remove them delete_nodes.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
updatesYesOne entry per node to change

TDQS

A4.9/5.0
Behavior5/5

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

Goes well past the annotations (readOnlyHint=false, destructiveHint=false, idempotentHint=true) by disclosing partial-update semantics ("only the fields you pass change"), the persistence model (saved at once as a new revision of the board), live propagation to open browsers, and user recoverability via Ctrl+Z. It also states the return shape ("Returns how many nodes changed"), which is valuable given there is no output schema. The revision-per-call note is a minor tension with idempotentHint but not a contradiction of the tool's resulting state.

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?

Front-loaded with the verb and the editable field list, then behavior, then sibling routing. Every sentence carries information (what changes, when it saves, what it returns, what to use instead) with no filler or restatement of the name.

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?

Despite having no output schema, the description covers the return value, the mutation semantics, persistence and visibility behavior, and the escape hatch to sibling tools. For a two-parameter tool with fully documented nested fields, nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 100%, so the per-field semantics are already documented in the schema (icon, node, text, color, checked, collapsed). The description adds one genuinely non-obvious rule the schema omits: fields not passed are left unchanged, which matters for a multi-node update array.

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+resource ("Change existing mind map nodes") and enumerates exactly which attributes are editable: text, branch color, icon, folded state, checkbox. It also names the adjacent operations it is not (add_nodes, move_node, delete_nodes), so an agent can separate it from siblings 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 Guidelines5/5

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

Explicitly routes the three nearest alternatives: add_nodes for creation, move_node for repositioning, delete_nodes for removal, which covers the realistic confusion set. It also states the batching rule ("Several nodes in one call") and the per-field conditional semantics, giving the agent a clear sense of when this tool is the right pick.

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

view_imagesLook at imagesA
Read-only

See the images placed on a board (screenshots, slides, photos, diagrams), so you can read and describe what they show; read_board only lists them. Returns each image as image content, preceded by its id, position and size, in reading order (top to bottom, then left to right). Read-only. Pass item ids from read_board to see specific ones; without ids it returns the first ones up to the limit, and tells you which ids remain so you can ask for them in the next call.

NameRequiredDescriptionDefault
boardYesBoard id or title. Use "open" for the board the person has open in the app
itemsNoImage item ids (from read_board). Leave out to get the images in reading order
limitNoHow many images to return at most in this call (default 6, maximum 20)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered and the description repeats 'Read-only' only briefly. It adds real behavioral value the annotations don't carry: return format (image content preceded by id, position, size), ordering (top-to-bottom then left-to-right), and the pagination/continuation behavior. It stops short of noting size limits or content-type caveats, so not a full 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?

A single dense paragraph, but the core purpose is front-loaded and the ordering/limit/continuation facts follow logically. No filler sentences; the density is slightly harder to scan than a bulleted form but every clause carries information.

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?

No output schema exists, so the description's job includes explaining returns — which it does (image content plus id, position, size, in reading order) along with truncation behavior. Combined with 100% schema coverage and read-only annotations, an agent has everything needed to call this 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 100%, so baseline is 3, but the description adds meaning beyond the schema: it clarifies the interaction between items and limit (no ids → first N in reading order) and the origin of item ids (from read_board). This connects the two parameters into a workflow rather than restating field text.

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 ('See the images placed on a board'), enumerates the content types it covers, and explicitly contrasts with the sibling read_board ('read_board only lists them'). An agent can distinguish this from read_board and list_boards 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 Guidelines5/5

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

Gives concrete routing guidance: use read_board to enumerate, this tool to actually see images; pass item ids from read_board for targeted viewing, or omit them to get the first N in reading order. It also explains the follow-up pattern when the limit is hit (remaining ids are reported so they can be requested next call).

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. 1 tool updatev0.6.5
    • Addedview_images
  2. 19 tool updatesv0.5.3
    • Changedadd_comment1 field changed
      • addedInput schema / properties / y / description
        Added value: +"See x"
    • Changedadd_items6 fields changed
      • addedInput schema / properties / items / description
        Added value: +"The items to add, placed as a group"
      • addedInput schema / properties / items / items / properties / h / description
        Added value: +"Height in board units (default depends on the type)"
      • addedInput schema / properties / items / items / properties / type / description
        Added value: +"What to add: a sticky note, free text, a shape (for flowcharts), a named section that groups things, an emoji sticker, a table, a chart of a table, or a video embed"
      • addedInput schema / properties / items / items / properties / w / description
        Added value: +"Width in board units (default depends on the type; notes and shapes also grow with their text)"
      • addedInput schema / properties / items / items / properties / y / description
        Added value: +"Top of the item, in board units (see x)"
      • addedInput schema / properties / y / description
        Added value: +"See x"
    • Changedadd_mindmap4 fields changed
      • addedInput schema / properties / layout / description
        Added value: +"horizontal (default): branches to the left and right. vertical: grows downwards like an org chart"
      • addedInput schema / properties / lines / description
        Added value: +"Shape of the branch lines (default curvy)"
      • addedInput schema / properties / x / description
        Added value: +"Position of the central idea in board units. Usually leave x and y out"
      • addedInput schema / properties / y / description
        Added value: +"See x"
    • Changedadd_nodes2 fields changed
      • changedInput schema / properties / parent / description
        Previous value: -"Node id (from read_board), its exact text, or a path like \"Central idea > Branch\""New value: +"Node id (from read_board), its exact text, or a path like \"Central idea > Branch\". The new nodes become its children"
      • changedInput schema / properties / texts / description
        Previous value: -"Alternative to outline: one child per text"New value: +"Alternative to outline: one child per text, all at the same level"
    • Changedconnect6 fields changed
      • addedInput schema / properties / connections / description
        Added value: +"One entry per arrow"
      • addedInput schema / properties / connections / items / properties / from / description
        Added value: +"Start: a node or item id (from read_board or add_items), or its exact text"
      • addedInput schema / properties / connections / items / properties / label / description
        Added value: +"Text on the line, like \"Yes\" or \"No\""
      • addedInput schema / properties / connections / items / properties / route / description
        Added value: +"elbow (default): right angles, best for flowcharts. curved or straight for relations"
      • addedInput schema / properties / connections / items / properties / style / description
        Added value: +"Line style (default solid)"
      • addedInput schema / properties / connections / items / properties / to / description
        Added value: +"End, where the arrowhead goes: a node or item id, or its exact text"
    • Changedcreate_board3 fields changed
      • changedInput schema / properties / folder / description
        Previous value: -"Folder name, path (\"Work / Clients\") or id. Created if missing"New value: +"Folder name, path (\"Work / Clients\") or id to put the board in. Missing folders are created. Leave out for no folder"
      • addedInput schema / properties / layout / description
        Added value: +"horizontal (default): branches to the left and right. vertical: an org-chart that grows downwards"
      • addedInput schema / properties / title / description
        Added value: +"Board title, shown in the sidebar (and as the central idea when the outline has several top lines)"
    • Changedcreate_folder4 fields changed
      • addedInput schema / properties / color / description
        Added value: +"Color of the folder in the sidebar (default none)"
      • changedInput schema / properties / icon / description
        Previous value: -"An emoji"New value: +"An emoji shown before the name"
      • addedInput schema / properties / name / description
        Added value: +"Folder name as shown in the sidebar"
      • changedInput schema / properties / parent / description
        Previous value: -"Parent folder name, path or id"New value: +"Parent folder name, path (\"Work / Clients\") or id; it must already exist (you get an error otherwise). Leave out for a top-level folder"
    • Changeddelete_items1 field changed
      • changedInput schema / properties / items / description
        Previous value: -"Item ids or texts"New value: +"Items to delete: ids (from read_board) or their exact texts"
    • Changeddelete_nodes1 field changed
      • changedInput schema / properties / nodes / description
        Previous value: -"Node ids or texts"New value: +"Nodes to delete: ids (from read_board), exact texts or paths like \"Central idea > Branch\""
    • Changedexport_board1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"Default html"New value: +"html (default): one web page with zoom. pdf for printing, png for an image, svg for vector graphics"
    • Changedlist_boards1 field changed
      • changedInput schema / properties / folder / description
        Previous value: -"Only boards in this folder (name or id)"New value: +"Only list the boards in this folder (its name, path like \"Work / Clients\", or id). Leave out to list all boards"
    • Changedlist_comments1 field changed
      • changedInput schema / properties / include_resolved / description
        Previous value: -"Also list resolved comments (default false)"New value: +"Also list resolved comments (default false: only open ones)"
    • Changedmove_node3 fields changed
      • changedInput schema / properties / node / description
        Previous value: -"Node id (from read_board), its exact text, or a path like \"Central idea > Branch\""New value: +"The node to move. Node id (from read_board), its exact text, or a path like \"Central idea > Branch\""
      • changedInput schema / properties / parent / description
        Previous value: -"New parent node"New value: +"New parent node (id, text or path). Pass its current parent to only reorder it"
      • changedInput schema / properties / position / description
        Previous value: -"Index among the new siblings (default: last)"New value: +"Index among the new siblings, 0 = first (default: last)"
    • Changedread_board1 field changed
      • changedInput schema / properties / format / description
        Previous value: -"markdown (default, easy to read) or json (the raw document)"New value: +"markdown (default): an easy-to-read outline with ids. json: the raw board document, only when you need exact positions or styles"
    • Changedreply_comment1 field changed
      • addedInput schema / properties / text / description
        Added value: +"The reply (plain text, newlines allowed)"
    • Changedsearch_boards1 field changed
      • addedInput schema / properties / query / description
        Added value: +"Words to look for (matched as a substring, ignoring case and accents)"
    • Changedupdate_board4 fields changed
      • addedInput schema / properties / color / description
        Added value: +"Color of the board in the sidebar, or \"none\" to remove it"
      • changedInput schema / properties / folder / description
        Previous value: -"Folder name, path or id; \"\" or \"root\" for no folder. Created if missing"New value: +"Folder to move it to: name, path (\"Work / Clients\") or id; \"\" or \"root\" for no folder. Missing folders are created"
      • changedInput schema / properties / icon / description
        Previous value: -"An emoji, or \"none\""New value: +"An emoji shown before the title in the sidebar, or \"none\" to remove it"
      • addedInput schema / properties / title / description
        Added value: +"New title"
    • Changedupdate_items14 fields changed
      • addedInput schema / properties / updates / description
        Added value: +"One entry per item to change"
      • addedInput schema / properties / updates / items / properties / color / description
        Added value: +"note: purple|blue|teal|green|mustard|orange|red|pink|gray|white · text: white|gray|purple|blue|green|yellow|orange|red · shape: white|gray|purple|blue|green|orange|yellow|red|indigo|magenta|teal|forest · section: gray|purple|blue|green|yellow|orange|red|pink"
      • addedInput schema / properties / updates / items / properties / h / description
        Added value: +"New height"
      • changedInput schema / properties / updates / items / properties / label / description
        Previous value: -"Connector label"New value: +"Connector label (\"\" removes it)"
      • addedInput schema / properties / updates / items / properties / locked / description
        Added value: +"true locks the item so the person cannot move it by accident"
      • changedInput schema / properties / updates / items / properties / rows / description
        Previous value: -"Table cells, first row is the header"New value: +"Replace all the cells of a table (first row is the header); charts made from it update"
      • addedInput schema / properties / updates / items / properties / shape / description
        Added value: +"Change the outline of a shape"
      • addedInput schema / properties / updates / items / properties / size / description
        Added value: +"Text size of a text item"
      • addedInput schema / properties / updates / items / properties / style / description
        Added value: +"Shape: fill|border|dashed|none. Connector: solid|dashed"
      • addedInput schema / properties / updates / items / properties / text / description
        Added value: +"New text of a note, text or shape (replaces the old one)"
      • addedInput schema / properties / updates / items / properties / title / description
        Added value: +"Chart title"
      • addedInput schema / properties / updates / items / properties / w / description
        Added value: +"New width"
      • addedInput schema / properties / updates / items / properties / x / description
        Added value: +"New left position in board units"
      • addedInput schema / properties / updates / items / properties / y / description
        Added value: +"New top position in board units"
    • Changedupdate_nodes5 fields changed
      • addedInput schema / properties / updates / description
        Added value: +"One entry per node to change"
      • changedInput schema / properties / updates / items / properties / checked / description
        Previous value: -"Turns the node into a checkbox, ticked or not"New value: +"Turns the node into a checkbox, ticked (true) or not (false)"
      • addedInput schema / properties / updates / items / properties / collapsed / description
        Added value: +"true folds the branch (hides its children), false unfolds it"
      • changedInput schema / properties / updates / items / properties / icon / description
        Previous value: -"An emoji before the text, or \"none\""New value: +"An emoji before the text, or \"none\" to remove it"
      • addedInput schema / properties / updates / items / properties / text / description
        Added value: +"New text (replaces the old one; Markdown like **bold** allowed, newlines for several lines)"
  3. 22 tool updatesv0.1.0
    • First observedadd_comment
    • First observedadd_items
    • First observedadd_mindmap
    • First observedadd_nodes
    • First observedconnect
    • First observedcreate_board
    • First observedcreate_folder
    • First observeddelete_board
    • First observeddelete_items
    • First observeddelete_nodes
    • First observedexport_board
    • First observedlist_boards
    • First observedlist_comments
    • First observedmove_node
    • First observedopen_board
    • First observedread_board
    • First observedreply_comment
    • First observedresolve_comment
    • First observedsearch_boards
    • First observedupdate_board
    • First observedupdate_items
    • First observedupdate_nodes

TDQS

A4.4/5.0

Scored across 23 tools

Disambiguation5/5

Each tool targets a distinct resource-action pair (board, node, item, comment, folder, image, connector), and descriptions explicitly cross-reference alternatives (add_nodes vs add_mindmap vs create_board), leaving little room for misselection.

Naming Consistency5/5

Consistent snake_case verb_noun pattern throughout (list_boards, create_board, update_nodes, delete_items). Minor deviations like 'connect' and the singular/plural 'move_node' vs 'update_nodes' reflect semantic differences rather than inconsistency.

Tool Count4/5

23 tools is on the heavy side, but the domain (mind maps, whiteboard items, comments, folders, export, images) is broad and each operation is distinct. Only create_folder is arguably redundant, since boards can auto-create folders.

Completeness4/5

Board, node, item, and comment lifecycles are fully covered. Notable gaps: folders can be created but not renamed, moved, or deleted; there is no tool to add images (only view them), which limits full whiteboard assembly.

Maintenance

ActivityMaintained
ResponsivenessNo issues

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
    C
    maintenance
    Provides tools for creating, deleting, and querying nodes and edges in Excalidraw diagrams, enabling diagram editing via LLM interfaces.
    763 npm
    5
    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
    Not graded
    quality
    B
    maintenance
    Enables AI agents to explore and extend a local-first, SQLite-backed visual knowledge graph through 12 tools for listing maps, searching and reading nodes, and creating, updating, or linking nodes and edges. Every AI-written node carries provenance and is checked against near-duplicate titles, so agent-added ideas appear in a shared graph that people also edit by hand.
    MIT