cnvs.app — free AI whiteboard for real-time collaboration, 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 (optional and installed by the user — see
/docs/mcp#listen ; agents only suggest it, and
wait_for_update needs no install), 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, long-poll
GET /api/boards/<id>/wait?timeout_ms=25000
(zero-install), or suggest the optional
mcp-listen skill
(pairs with cnvs-whiteboard )
to the user, who installs it per /docs/mcp#listen
— never download or install it yourself without explicit consent.
Without either, most chat-UI MCP clients consume resource-update
pushes in their session cache without ever waking the model.
Programmatic endpoints
/llms.txt — full LLM-friendly reference
(all endpoints, quotas, conventions, patterns).
/openapi.json — OpenAPI 3.1 spec.
/.well-known/mcp.json — MCP
discovery document (server URL, protocol version, capabilities,
skills).
/quotas.json — live limits manifest
(body cap, per-board quotas, rate-limit values).
/cnvs-whiteboard/SKILL.md
— primary Agent Skill for cnvs.app board collaboration.
/mcp-listen/SKILL.md — generic
MCP notification pump (dependency-free
scripts/listen.mjs, pinned + checksummed under
/mcp-listen/v0.4.0/); user-installed, see
/docs/mcp#listen .
/.well-known/mcp/server.json
— MCP Registry server.json entry.
/mcp — MCP Streamable-HTTP endpoint.
/about — human-facing documentation.
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 board. Optional
body imports initial content (content with
texts/lines/images or columns/tasks/lanes), auto-places items
missing coordinates (autolayout), and/or PIN-locks the
board at create time (lock — plaintext key returned
once as access_key). Validated first, applied
atomically; the response's imported counts double as
the feature-detection signal. Imports accept at most 40 combined
array entries and 10 lane titles; each lane title must reference a
row used by a created column. A trusted import token bypasses only
the 5 creates/60s/IP cap, never content or platform limits. MCP mirror: the
create_board tool. Boards embed in an iframe via
https://cnvs.app/?embed=1#<id> (chrome-free
preview — no UI at all and a drag pans rather than draws; CSP
frame-ancestors allowlist applies).
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.