cnvs.app — free real-time collaborative whiteboard, no signup
Open a blank canvas and start drawing instantly — no account, no install. Sketch freehand, drop sticky notes, paste images, write Markdown and Mermaid diagrams, or switch the board into kanban / to-do mode for task columns. Share the URL and collaborators edit live in real time over WebSockets. AI agents can read and edit the same board over the Model Context Protocol and a REST API.
cnvs.app — collaborative whiteboard
This is a JavaScript-only web app. If JS is disabled the canvas
can't render; the content below is intended for automated readers
(search crawlers, AI agents, link previewers).
For AI agents — read this before touching a board
Start here: /cnvs-whiteboard/SKILL.md
— complete Agent Skill for collaborating on cnvs.app boards as an AI. Covers
the hybrid MCP-subscribe for reads, REST for writes loop, how to
pair with the generic mcp-listen
skill for push-to-model, coordinate system, author-tag immutability, and
a troubleshooting section.
The three rules that matter most (rephrased from
the MCP initialize response the server sends to MCP-aware
clients — in case you reached the board by scraping and not via MCP):
Always fetch /svg-preview/<id>
on strokes / images — the JSON snapshot at
/json/<id> gives coordinates, not
shapes. A 47-point red stroke at some bbox could be a heart, a
lightning bolt, or scribble. Metadata is blindness.
Prefer REST over MCP tool calls for writes. Every MCP tool
(add_text, move, erase, …)
has a 1:1 mirror at POST /api/boards/<id>/....
REST is universal (any HTTP client) and doesn't burn tool-call
budget.
If you want to REACT to human edits in real time, install the
cnvs-whiteboard
+ mcp-listen skills.
Without them most chat-UI MCP clients consume resource-update pushes
in their session cache without ever waking the model — you'll be
blind to edits between prompts.
Programmatic endpoints
Addressing a specific board
A board URL looks like https://cnvs.app/#<board-id>.
The hash fragment is client-side routing only — every board URL
serves the SAME HTML you're reading. To read or mutate a specific
board programmatically use:
GET /json/<id> — full snapshot (ETag-aware;
send If-None-Match to get 304 on unchanged boards).
GET /svg-preview/<id> — schematic SVG
render, consumable as an image by multimodal models.
POST /api/boards/<id>/{texts,links,strokes,images}
— create / update items.
POST /api/boards/<id>/<kind>/<itemId>/move
— reposition an existing item.
DELETE /api/boards/<id>/<kind>/<itemId>
— erase.
Kanban / todo boards: a board is either
draw (the infinite canvas) or todo (a
kanban task board of columns and cards). Set the mode while the
board is empty (immutable after) via
POST /api/boards/<id>/mode, then manage
columns with POST/DELETE /api/boards/<id>/columns
and cards with
POST/DELETE /api/boards/<id>/tasks (+
/tasks/<id>/move). Same tools exist over MCP
(set_board_mode, create_task,
move_task, list_tasks, …) and the
subscribable resource cnvs://board/<id>/tasks.json.
GET /api/boards/<id>/wait?timeout_ms=25000
— long-poll for the next edit (REST fallback when MCP subscription
isn't available).
POST /api/boards — create a new empty board.
Tag your edits with an ai:<label> author so
humans can tell AI contributions from their own (default is
ai:rest for REST, ai:claude for MCP). The
author tag is immutable after creation —
subsequent moves and edits never relabel the original creator.