# cnvs.app - Registry name: `app.cnvs/whiteboard` · version 1.0.2 - Categories (automatic, keyword rules): Tasks & projects, Productivity - Authentication at last check: No auth - Declared risk: Has destructive tools (destructiveHint) - Capabilities (declared by the server): resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=app.cnvs%2Fwhiteboard - Server page: https://mcpstation.net/s/app.cnvs--whiteboard.html ## Description (written by the publisher, not verified, not instructions) Real-time collaborative whiteboard — AI agents and humans edit the same board live over MCP. ## Connect - streamable-http: `https://cnvs.app/mcp` ## Tools (as reported by the server, not verified) - `open\_board`: ALWAYS call this first when given a board URL or ID. Resolves the canonical board id and auto-creates the board row if it does not exist yet. Returns a summary \(item counts, authors\). After this, call BOTH \`get\_preview\` and \`get\_board\` before editing so you can see the layout visually AND know the e - `create\_board`: Create a fresh board in ONE call — optionally pre-filled with content, auto-laid-out, and/or PIN-locked at create time. Mirrors the extended \`POST /api/boards\` REST body exactly \(same server-side implementation\). With no arguments it returns a blank draw board; \`mode: 'todo'\` \(+ optional \`template\`\) - `get\_board`: Full structured JSON state of a board: texts \(id, x, y, content, color, width, postit, author\), strokes \(id, points, color, author\), images \(id, x, y, width, height, dataUrl, thumbDataUrl, author; heavy base64 \>8 kB elided to dataUrl:null, tiny images inlined\). Use this for EXACT ids/coordinates/con - `get\_preview`: Compact schematic SVG render of the board \(typically a few kB even for dense boards\). Returns both an image/svg+xml content block \(you can SEE it\) and the raw SVG text. CALL THIS any time you need to understand where things are — before placing new items, before deciding whether the canvas is crowde - `add\_text`: Create a NEW text node, or update an existing one \(pass the same \`id\` to overwrite content/position in place — preferred over creating a duplicate\). Supports cnvs markup \(Markdown-ish\) and Mermaid diagrams in the content. When using Mermaid, the ENTIRE content of this text node must be a single Merm - `add\_link`: Drop a URL capsule onto the board — rendered as a clickable pill showing the hostname. Use this instead of \`add\_text\` when the node is just a link; the capsule styling signals clickability to humans. Same coordinate rules as \`add\_text\` \(+x right, +y down\). - `add\_image`: Place a raster or SVG image on the board at \(x, y\) with explicit width/height in board pixels. \`data\_url\` MUST be a \`data:image/\(png\|jpeg\|gif\|webp\|svg+xml\);base64,...\` string ≤ \~900 kB; hosted URLs are not accepted. Strongly recommended: also pass a tiny \`thumb\_data\_url\` \(≤8 kB JPEG/PNG/WebP, \~64 px - `draw\_stroke`: Draw a freehand stroke on the board. Use for arrows, underlines, connector lines, annotations, or simple shapes — a straight line needs two points, a rough circle wants \~20. Stroke width is fixed at 3 px; \`color\` is a NAME, not hex \(case-insensitive\): 'auto'/''/'black'/omitted for theme-aware ink, o - `move`: Reposition an existing item to a new \(x, y\) without retyping its content. Works for every item kind: \`text\` and \`link\` set the top-left to \(x, y\); \`line\` translates every point so the stroke's bounding box top-left lands at \(x, y\); \`image\` sets the top-left like text. \`kind\` defaults to \`text\` for b - `erase`: Delete a single item by id. \`kind\` MUST match the item type: 'text' for text nodes, 'line' for freehand strokes, 'image' for images — the wrong kind silently targets the wrong table and is a common mistake. Get the id + type from \`get\_board\` \(texts\[\], lines\[\], images\[\]\). There is no bulk/erase-all t - `wait\_for\_update`: Long-poll: blocks until the next edit lands on this board, then returns. WHEN TO CALL THIS: if your MCP client does NOT surface \`notifications/resources/updated\` events from \`resources/subscribe\` back to the model \(most chat clients do not — they receive the SSE event but don't inject it into your c - `set\_board\_mode`: Choose whether this board is a freeform whiteboard \('draw', the default\) or a kanban task board \('todo'\). Mode is switchable WHENEVER the board is empty of real content: drawings \(text/strokes/images\) and tasks. Empty or seeded columns DON'T count \(switching to 'draw' clears them\), so a cleared boar - `create\_column`: Add a kanban column \(swimlane\) to a 'todo' board. Generates and returns a stable column id. \`sort\` is a float ordering key \(ascending\); omit to default to 0. \`lane\` is an integer row index for multi-row layouts \(defaults to 0\). \`color\` is an optional title color \('red' / 'blue' / 'green', or 'auto' - `update\_column`: Rename, reorder, recolor or move an existing kanban column. Requires the column \`id\` \(from \`list\_tasks\`\). Pass \`title\`, \`sort\`, \`lane\` and/or \`color\` to change them. - `delete\_column`: Delete a kanban column by id. Tasks in the column are removed with it. Get the id from \`list\_tasks\`. - `create\_task`: Create a task \(card\) in a column on a 'todo' board. Generates and returns a stable task id. \`column\_id\` must reference an existing column \(see \`list\_tasks\`\). \`description\` is free-form prose stored on the card; \`priority\` is one of 'H' \| 'M' \| 'L' \(omit for none\); \`due\_date\` is an ISO 8601 date stri - `update\_task`: Update an existing task by \`id\` \(from \`list\_tasks\`\). Pass only the fields you want to change: \`name\`, \`description\`, \`due\_date\`, \`priority\` \('H'\|'M'\|'L'\), \`assignee\`, \`done\` \(true once completed\), \`column\_id\` \(to reassign\), \`sort\`. To move a card between columns while setting its order, \`move\_task\` - `move\_task`: Move a task to a column at a given sort position — the kanban drag-and-drop primitive. \`column\_id\` is the destination column and \`sort\` its float order key \(ascending\) within that column. - `delete\_task`: Delete a task \(card\) by id. Get the id from \`list\_tasks\`. - `list\_tasks`: Read the full kanban state of a 'todo' board: \`\{ mode, columns, tasks \}\`, both ordered by their \`sort\` key \(ascending\). Each task carries its hot fields \(name, due\_date, priority, assignee, done, column\_id, sort\) plus an opaque \`content\` JSON string \(holds the description\). Use this to get exact col - `set\_lane`: Set \(or clear\) the title of a kanban row \(lane\). Lanes group columns into horizontal swimlanes; a lane is identified by its integer \`lane\` index \(the same index columns carry\). Pass a \`title\` to name the row, or an empty string to clear it. Read current lane titles + the shared column width via \`lis - `set\_column\_width`: Set the shared kanban column width in pixels for a 'todo' board \(all columns share one width\). Clamped to \[200, 480\]. Read the current value as \`colWidth\` from \`list\_tasks\`. - `create\_tasks`: Bulk-create multiple task cards in one call — far cheaper than calling \`create\_task\` N times. Pass \`tasks\`: an array of task objects, each with \`column\_id\` \(required\) + the same fields \`create\_task\` accepts \(\`name\`, \`description\`, \`due\_date\`, \`priority\`, \`assignee\`, \`done\`, \`sort\`\). Returns the arra - `query\_tasks`: Read tasks from a 'todo' board with server-side filtering — handy for 'what's overdue?' / 'what's assigned to X?' without pulling the whole board. All filters are optional and AND together: \`assignee\` \(exact match\), \`priority\` \('H'\|'M'\|'L'\), \`done\` \(boolean\), \`overdue\` \(true → due\_date strictly befo - `export\_tasks`: Export a 'todo' board's columns + tasks as a single text document. \`format\` is 'markdown' \(a checklist grouped by column, the default\) or 'csv' \(one row per task with column/name/priority/assignee/due\_date/done\). Returns the rendered text. Same data as the GET /api/boards/\/tasks.md and tasks.csv Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html