MCP server
cnvs.app Official
app.cnvs/whiteboard
Checked 26 Oct 2026, 08:29 UTC · Connected to it and listed its tools
Real-time collaborative whiteboard — AI agents and humans edit the same board live over MCP.
Working at last checkVerified publisher: cnvs.appAbout 9,116 tokens per request once connected25 tools
https://cnvs.app/mcp
At a glance
- Type
- MCP server
- Publisher
- cnvs.app (verified by the MCP Registry)
- Status
- Working at last check
- Tools
- 25
- Token cost
- About 9,116 tokens per request
- Sets up in
- Claude Code, Claude Desktop, Codex, Gemini CLI, Cursor, VS Code, Antigravity, ChatGPT, OpenAI API, Grok
- Last checked
- 26 Oct 2026, 08:29 UTC
Connect it to your agent
Opens the app, which shows the server and asks you to confirm. For other apps, copy the setup below.
Claude Code
claude mcp add --transport http whiteboard https://cnvs.app/mcp
Claude Desktop
Settings → Connectors → Add custom connector, and paste the URL.
Codex (config.toml)
[mcp_servers.whiteboard] url = "https://cnvs.app/mcp"
Gemini CLI
{"mcpServers":{"whiteboard":{"httpUrl":"https://cnvs.app/mcp"}}}
Cursor
{"mcpServers":{"whiteboard":{"url":"https://cnvs.app/mcp"}}}
VS Code
{"servers":{"whiteboard":{"type":"http","url":"https://cnvs.app/mcp"}}}
Antigravity
agy mcp add whiteboard https://cnvs.app/mcp
ChatGPT
Settings → Apps & Connectors → Advanced settings: turn on Developer mode, then Create a connector and paste the URL. Which plans can do this varies.
OpenAI API (Responses tools)
{"type":"mcp","server_label":"whiteboard","server_url":"https://cnvs.app/mcp","require_approval":"always"}
Grok (xAI API tools)
{"type":"mcp","server_label":"whiteboard","server_url":"https://cnvs.app/mcp"}
Tools
add_image~340 tokens
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 pxadd_link~238 tokens
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_text~633 tokens
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 Mermcreate_board~1305 tokens
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`)create_column~360 tokens
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'create_task~423 tokens
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 stricreate_tasks~412 tokens
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 arradelete_columnDeletes data · ~172 tokens
Delete a kanban column by id. Tasks in the column are removed with it. Get the id from `list_tasks`.delete_taskDeletes data · ~159 tokens
Delete a task (card) by id. Get the id from `list_tasks`.draw_stroke~455 tokens
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, oerase~258 tokens
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 texport_tasks~256 tokens
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/<id>/tasks.md and tasks.csvget_board~279 tokens
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/conget_preview~267 tokens
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 crowdelist_tasks~234 tokens
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 colmove~339 tokens
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 bmove_task~217 tokens
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.open_board~274 tokens
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 equery_tasks~380 tokens
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 befoset_board_mode~417 tokens
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 boarset_column_width~212 tokens
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`.set_lane~286 tokens
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 `lisupdate_column~291 tokens
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.update_task~354 tokens
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`wait_for_update~555 tokens
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
Browse
Related MCP servers
- MiOffice — AI-Powered Workspace Studio
125+ browser tools for PDF, Image, Video, Audio, AI, Scanner. Files never leave your device. - EventTrader MCP
AI prediction market trading — real-time data, CLOB exchange, Prop Desk, 40+ tools - Math Board
Maths lessons on an online whiteboard: solutions, worksheets, graphs and geometry, opened by a link - Keyboardia
Create, co-edit, analyze, publish, and export collaborative step-sequencer sessions through MCP. - Flask
Video review for agents: upload renders, read time-coded feedback, iterate version by version. - Trident
Create and edit collaborative architecture diagrams with any AI assistant using the Trident 2D DSL. - Gingr MCP by usefulapi
Read Gingr reservations, owners, pets, check-ins, invoices and timeclock for your pet-care business. - Benevolabs Irenictable
Collaborative whiteboard MCP server — create objects, connectors, C4 diagrams, and manage boards
Badge for your README
[](https://aptlynx.net/servers/app.cnvs/whiteboard)
Listing text is written by the maker; AptLynx lists tools and does not vouch for them. Find another tool · Browse by topic · For agents