Mapache
A local MCP server that lets an AI agent read and edit Mapache mind-map and whiteboard boards (plain JSON files on your computer), with changes appearing live in the app.
Boards: list, read, search across text, create, rename/move/recolor, delete to trash, create folders
Mind maps: add branches from outlines, edit nodes (text, color, icon, checkbox, fold), move branches, delete nodes, add extra maps
Whiteboard items: add/edit/delete sticky notes, text, shapes, sections, stickers, tables, charts and video embeds
Connectors: draw labeled, styled arrows between nodes/items with self-routing paths
Comments: list threads, add comments with @mentions, reply, resolve or reopen
Export & open: save boards as HTML, PDF, PNG or SVG, and open a board in the person's browser
Live & safe: every edit saves a new revision, shows up live, and is undoable with Ctrl+Z
Tables can be filled with data copied from Google Sheets (or Excel) and turned into any of 17 chart types; agents can write tabular data into a table item and then attach a chart (column, bar, line, pie, etc.) built from it.
Supports embedding Loom videos on a board: a 'video' item can be created from a Loom URL, letting agents add screen-recording walkthroughs directly to a board.
Supports embedding Vimeo videos on a board: a 'video' item can be created from a Vimeo URL, so agents can drop a playable Vimeo embed into a whiteboard.
Supports embedding YouTube videos on a board: add_items (and update_items) can create a 'video' item from a YouTube URL, placing the video as a playable embed on the whiteboard alongside mind maps, notes and charts.
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 startOpen 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 Desktop | Settings > Developer > Edit config, then add the JSON below |
Codex (OpenAI, included with ChatGPT plans) |
|
Gemini CLI |
|
Cursor, Windsurf | add the JSON below to |
VS Code | MCP: Open User Configuration, add |
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 |
{ "mcpServers": { "mapache": { "command": "node", "args": ["/full/path/to/Mapache/bin/mapache.js", "mcp"] } } }Tool | What it does |
| See every board and read one as an outline, with ids |
| Organize boards (deleting moves them to the trash) |
| Grow and edit mind maps from indented outlines |
| Sticky notes, text, shapes, sections, stickers, tables, charts and video embeds |
| Arrows between anything, with labels |
| See what the images on a board show (screenshots, slides, photos) |
| Read and write comments, with @mentions |
| Save a board as a shareable web page, PDF, PNG or SVG |
| 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 inRun 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 mapacheWith 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 |
| Child · sibling (while typing) |
| New mind map · sticky note · text · shape |
| Connector · freehand · table · image or video |
| Comment |
| Select many · select all |
| Lock · copy and paste style |
| 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 |
| State, in-place editing, context bar, menus, dragging, shortcuts |
| Mind map layout and line geometry (pure, tested) |
| Turns typed or pasted web addresses into links |
| Connector routing |
| Arrange as grid, tree or mind map |
| Freehand smoothing, eraser, lasso, shape recognition |
| Shape outlines |
| CSV, TSV, Markdown and HTML table parsing |
| SVG charts |
| Folders and map list |
| English and Spanish |
| Browser storage and sync with the files |
| Three-way merge of simultaneous changes |
| Offline support |
| Local server: the app, the files API, live updates and MCP over HTTP |
| Boards as files, with revisions and a trash |
| Board editing for agents: outlines, Markdown, placement |
| The agent tools and the MCP server |
| Team mode: accounts, invitations, roles, presence and cursors |
| Team server image, with optional automatic HTTPS |
| 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 toolsadd_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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Or a point on the board (leave out x, y and on to use free space) | |
| y | No | See x | |
| on | No | Node or item id (from read_board) or its text. The pin goes on its top-right corner and follows it | |
| text | Yes | The comment (plain text, newlines allowed) | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Top-left of the group. Usually leave it out: Mapache places the group in free space | |
| y | No | See x | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| items | Yes | The items to add, placed as a group |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Position of the central idea in board units. Usually leave x and y out | |
| y | No | See x | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| lines | No | Shape of the branch lines (default curvy) | |
| layout | No | horizontal (default): branches to the left and right. vertical: grows downwards like an org chart | |
| outline | Yes | Indented outline, one idea per line; indent (2 spaces or a tab) to nest. Markdown inside a line: **bold**, *italic*, `code`, [link](https://…) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| texts | No | Alternative to outline: one child per text, all at the same level | |
| parent | Yes | Node id (from read_board), its exact text, or a path like "Central idea > Branch". The new nodes become its children | |
| outline | No | Indented outline, one idea per line; indent (2 spaces or a tab) to nest. Markdown inside a line: **bold**, *italic*, `code`, [link](https://…) | |
| position | No | Insert at this index among the existing children (default: at the end) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| connections | Yes | One entry per arrow |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Board title, shown in the sidebar (and as the central idea when the outline has several top lines) | |
| folder | No | Folder name, path ("Work / Clients") or id to put the board in. Missing folders are created. Leave out for no folder | |
| layout | No | horizontal (default): branches to the left and right. vertical: an org-chart that grows downwards | |
| outline | No | Indented outline, one idea per line; indent (2 spaces or a tab) to nest. Markdown inside a line: **bold**, *italic*, `code`, [link](https://…) |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | An emoji shown before the name | |
| name | Yes | Folder name as shown in the sidebar | |
| color | No | Color of the folder in the sidebar (default none) | |
| parent | No | Parent folder name, path ("Work / Clients") or id; it must already exist (you get an error otherwise). Leave out for a top-level folder |
TDQS
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.
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.
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.
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.
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.
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 boardADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app |
TDQS
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.
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.
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.
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.
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.
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 itemsADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| items | Yes | Items to delete: ids (from read_board) or their exact texts |
TDQS
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.
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.
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.
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.
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.
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 nodesADestructiveIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| nodes | Yes | Nodes to delete: ids (from read_board), exact texts or paths like "Central idea > Branch" |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Folder or full file path to save to. Default: the Downloads folder | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| format | No | html (default): one web page with zoom. pdf for printing, png for an image, svg for vector graphics |
TDQS
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.
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.
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.
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.
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.
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 boardsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| folder | No | Only list the boards in this folder (its name, path like "Work / Clients", or id). Leave out to list all boards |
TDQS
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.
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.
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.
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.
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.
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 commentsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| include_resolved | No | Also list resolved comments (default false: only open ones) |
TDQS
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.
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.
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.
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.
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.
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 branchAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| node | Yes | The node to move. Node id (from read_board), its exact text, or a path like "Central idea > Branch" | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| parent | Yes | New parent node (id, text or path). Pass its current parent to only reorder it | |
| position | No | Index among the new siblings, 0 = first (default: last) |
TDQS
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.
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.
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.
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.
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.
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 appARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | No | Board id or title. Use "open" for the board the person has open in the app | |
| launch | No | Open the browser (default true). false only returns the address |
TDQS
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.
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.
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.
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.
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.
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 boardARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | No | Board id or title. Use "open" for the board the person has open in the app | |
| format | No | markdown (default): an easy-to-read outline with ids. json: the raw board document, only when you need exact positions or styles |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | The reply (plain text, newlines allowed) | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| comment | Yes | Comment id (from list_comments or read_board), or a unique part of its text |
TDQS
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.
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.
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.
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.
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.
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 commentAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| reopen | No | Reopen a resolved comment instead | |
| comment | Yes | Comment id or a unique part of its text |
TDQS
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.
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.
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.
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.
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.
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 boardsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Words to look for (matched as a substring, ignoring case and accents) |
TDQS
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.
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.
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.
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.
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.
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 boardAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| icon | No | An emoji shown before the title in the sidebar, or "none" to remove it | |
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| color | No | Color of the board in the sidebar, or "none" to remove it | |
| title | No | New title | |
| folder | No | Folder to move it to: name, path ("Work / Clients") or id; "" or "root" for no folder. Missing folders are created |
TDQS
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.
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.
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.
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.
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.
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…AIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| updates | Yes | One entry per item to change |
TDQS
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.
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.
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.
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.
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.
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 nodesAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| updates | Yes | One entry per node to change |
TDQS
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.
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.
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.
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.
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.
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 imagesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| board | Yes | Board id or title. Use "open" for the board the person has open in the app | |
| items | No | Image item ids (from read_board). Leave out to get the images in reading order | |
| limit | No | How many images to return at most in this call (default 6, maximum 20) |
TDQS
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.
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.
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.
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.
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.
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 tool update
v0.6.5- Added
view_images
19 tool updates
v0.5.3- Changed
add_comment1 field changed- added
Input schema / properties / y / descriptionAdded value: +"See x"
- Changed
add_items6 fields changed- added
Input schema / properties / items / descriptionAdded value: +"The items to add, placed as a group" - added
Input schema / properties / items / items / properties / h / descriptionAdded value: +"Height in board units (default depends on the type)" - added
Input schema / properties / items / items / properties / type / descriptionAdded 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" - added
Input schema / properties / items / items / properties / w / descriptionAdded value: +"Width in board units (default depends on the type; notes and shapes also grow with their text)" - added
Input schema / properties / items / items / properties / y / descriptionAdded value: +"Top of the item, in board units (see x)" - added
Input schema / properties / y / descriptionAdded value: +"See x"
- Changed
add_mindmap4 fields changed- added
Input schema / properties / layout / descriptionAdded value: +"horizontal (default): branches to the left and right. vertical: grows downwards like an org chart" - added
Input schema / properties / lines / descriptionAdded value: +"Shape of the branch lines (default curvy)" - added
Input schema / properties / x / descriptionAdded value: +"Position of the central idea in board units. Usually leave x and y out" - added
Input schema / properties / y / descriptionAdded value: +"See x"
- Changed
add_nodes2 fields changed- changed
Input schema / properties / parent / descriptionPrevious 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" - changed
Input schema / properties / texts / descriptionPrevious value: -"Alternative to outline: one child per text"New value: +"Alternative to outline: one child per text, all at the same level"
- Changed
connect6 fields changed- added
Input schema / properties / connections / descriptionAdded value: +"One entry per arrow" - added
Input schema / properties / connections / items / properties / from / descriptionAdded value: +"Start: a node or item id (from read_board or add_items), or its exact text" - added
Input schema / properties / connections / items / properties / label / descriptionAdded value: +"Text on the line, like \"Yes\" or \"No\"" - added
Input schema / properties / connections / items / properties / route / descriptionAdded value: +"elbow (default): right angles, best for flowcharts. curved or straight for relations" - added
Input schema / properties / connections / items / properties / style / descriptionAdded value: +"Line style (default solid)" - added
Input schema / properties / connections / items / properties / to / descriptionAdded value: +"End, where the arrowhead goes: a node or item id, or its exact text"
- Changed
create_board3 fields changed- changed
Input schema / properties / folder / descriptionPrevious 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" - added
Input schema / properties / layout / descriptionAdded value: +"horizontal (default): branches to the left and right. vertical: an org-chart that grows downwards" - added
Input schema / properties / title / descriptionAdded value: +"Board title, shown in the sidebar (and as the central idea when the outline has several top lines)"
- Changed
create_folder4 fields changed- added
Input schema / properties / color / descriptionAdded value: +"Color of the folder in the sidebar (default none)" - changed
Input schema / properties / icon / descriptionPrevious value: -"An emoji"New value: +"An emoji shown before the name" - added
Input schema / properties / name / descriptionAdded value: +"Folder name as shown in the sidebar" - changed
Input schema / properties / parent / descriptionPrevious 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"
- Changed
delete_items1 field changed- changed
Input schema / properties / items / descriptionPrevious value: -"Item ids or texts"New value: +"Items to delete: ids (from read_board) or their exact texts"
- Changed
delete_nodes1 field changed- changed
Input schema / properties / nodes / descriptionPrevious value: -"Node ids or texts"New value: +"Nodes to delete: ids (from read_board), exact texts or paths like \"Central idea > Branch\""
- Changed
export_board1 field changed- changed
Input schema / properties / format / descriptionPrevious value: -"Default html"New value: +"html (default): one web page with zoom. pdf for printing, png for an image, svg for vector graphics"
- Changed
list_boards1 field changed- changed
Input schema / properties / folder / descriptionPrevious 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"
- Changed
list_comments1 field changed- changed
Input schema / properties / include_resolved / descriptionPrevious value: -"Also list resolved comments (default false)"New value: +"Also list resolved comments (default false: only open ones)"
- Changed
move_node3 fields changed- changed
Input schema / properties / node / descriptionPrevious 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\"" - changed
Input schema / properties / parent / descriptionPrevious value: -"New parent node"New value: +"New parent node (id, text or path). Pass its current parent to only reorder it" - changed
Input schema / properties / position / descriptionPrevious value: -"Index among the new siblings (default: last)"New value: +"Index among the new siblings, 0 = first (default: last)"
- Changed
read_board1 field changed- changed
Input schema / properties / format / descriptionPrevious 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"
- Changed
reply_comment1 field changed- added
Input schema / properties / text / descriptionAdded value: +"The reply (plain text, newlines allowed)"
- Changed
search_boards1 field changed- added
Input schema / properties / query / descriptionAdded value: +"Words to look for (matched as a substring, ignoring case and accents)"
- Changed
update_board4 fields changed- added
Input schema / properties / color / descriptionAdded value: +"Color of the board in the sidebar, or \"none\" to remove it" - changed
Input schema / properties / folder / descriptionPrevious 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" - changed
Input schema / properties / icon / descriptionPrevious value: -"An emoji, or \"none\""New value: +"An emoji shown before the title in the sidebar, or \"none\" to remove it" - added
Input schema / properties / title / descriptionAdded value: +"New title"
- Changed
update_items14 fields changed- added
Input schema / properties / updates / descriptionAdded value: +"One entry per item to change" - added
Input schema / properties / updates / items / properties / color / descriptionAdded 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" - added
Input schema / properties / updates / items / properties / h / descriptionAdded value: +"New height" - changed
Input schema / properties / updates / items / properties / label / descriptionPrevious value: -"Connector label"New value: +"Connector label (\"\" removes it)" - added
Input schema / properties / updates / items / properties / locked / descriptionAdded value: +"true locks the item so the person cannot move it by accident" - changed
Input schema / properties / updates / items / properties / rows / descriptionPrevious 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" - added
Input schema / properties / updates / items / properties / shape / descriptionAdded value: +"Change the outline of a shape" - added
Input schema / properties / updates / items / properties / size / descriptionAdded value: +"Text size of a text item" - added
Input schema / properties / updates / items / properties / style / descriptionAdded value: +"Shape: fill|border|dashed|none. Connector: solid|dashed" - added
Input schema / properties / updates / items / properties / text / descriptionAdded value: +"New text of a note, text or shape (replaces the old one)" - added
Input schema / properties / updates / items / properties / title / descriptionAdded value: +"Chart title" - added
Input schema / properties / updates / items / properties / w / descriptionAdded value: +"New width" - added
Input schema / properties / updates / items / properties / x / descriptionAdded value: +"New left position in board units" - added
Input schema / properties / updates / items / properties / y / descriptionAdded value: +"New top position in board units"
- Changed
update_nodes5 fields changed- added
Input schema / properties / updates / descriptionAdded value: +"One entry per node to change" - changed
Input schema / properties / updates / items / properties / checked / descriptionPrevious value: -"Turns the node into a checkbox, ticked or not"New value: +"Turns the node into a checkbox, ticked (true) or not (false)" - added
Input schema / properties / updates / items / properties / collapsed / descriptionAdded value: +"true folds the branch (hides its children), false unfolds it" - changed
Input schema / properties / updates / items / properties / icon / descriptionPrevious value: -"An emoji before the text, or \"none\""New value: +"An emoji before the text, or \"none\" to remove it" - added
Input schema / properties / updates / items / properties / text / descriptionAdded value: +"New text (replaces the old one; Markdown like **bold** allowed, newlines for several lines)"
22 tool updates
v0.1.0- First observed
add_comment - First observed
add_items - First observed
add_mindmap - First observed
add_nodes - First observed
connect - First observed
create_board - First observed
create_folder - First observed
delete_board - First observed
delete_items - First observed
delete_nodes - First observed
export_board - First observed
list_boards - First observed
list_comments - First observed
move_node - First observed
open_board - First observed
read_board - First observed
reply_comment - First observed
resolve_comment - First observed
search_boards - First observed
update_board - First observed
update_items - First observed
update_nodes
TDQS
Scored across 23 tools
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.
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.
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.
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
Related MCP Connectors
- KlyaksaOAuthapp.klyaksa
Online whiteboard your AI agent draws on: live shared canvases, solo or with your team.
Flowcharts that people and agents edit together on one live canvas, exported as Mermaid.
Create, read and live-edit visual boards, Kanban plans, Gantt timelines and diagrams with AI agents.
Free whiteboard where people and AI draw together: read cloud boards, draw diagrams, build slides.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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.1MIT
- AlicenseNot gradedqualityCmaintenanceProvides tools for creating, deleting, and querying nodes and edges in Excalidraw diagrams, enabling diagram editing via LLM interfaces.763 npm5MIT
- AlicenseNot gradedqualityAmaintenanceA local-first whiteboard MCP server that enables AI agents to create, inspect, and update canvas diagrams and shapes collaboratively via 13 semantic tools.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables 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