> ## Documentation Index
> Fetch the complete documentation index at: https://mcp-docs.cohesive.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Canvas tools

> Tools for reading, building, capturing, and publishing a Canvas.

`canvas` · 28 tools · Mounted by `default`

Read a Canvas, build it up node by node, capture it as an image, and publish it.

Every call also carries an exit code and timing in `_meta`, and errors come back as results rather than transport failures. See [Results](/reference/results).

## cohesive\_canvas\_archive

**Hints** — destructive

Move a canvas to the trash. Archives a canvas (soft delete), cascading to the chats and files that live on it. Everything is restorable with `cohesive_canvas_restore` — nothing is destroyed.

| Argument    | Type   | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `canvas_id` | string | Required | Canvas id.  |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_capture

**Hints** — read-only, idempotent

Capture a canvas as an image. Renders the canvas the way the app draws it and returns the image as webp.

By default the whole canvas is fit into the frame. To see a region the way a user would, pass bounds (a rectangle in canvas coordinates, "x,y,width,height") or node\_ids; both take the coordinates and ids that `cohesive_canvas_view` prints.

The image carries the canvas ground and grid by default. background solid drops the grid, and background transparent leaves the ground out entirely so the webp can be composited onto something else.

The render runs server-side in a headless browser and takes tens of seconds. At most one of: bounds, node\_ids. The rendered webp is returned as an image block.

| Argument     | Type            | Required | Description                                                                                                         |
| ------------ | --------------- | -------- | ------------------------------------------------------------------------------------------------------------------- |
| `canvas_id`  | string          | Required | Canvas id.                                                                                                          |
| `background` | string          | Optional | What sits behind the nodes: grid, solid, or transparent. One of `grid`, `solid`, `transparent`. Defaults to `grid`. |
| `bounds`     | string          | Optional | Frame this canvas-coordinate rectangle: "x,y,width,height"                                                          |
| `node_ids`   | array of string | Optional | Frame these nodes. Values containing commas are split.                                                              |
| `theme`      | string          | Optional | Theme to render: light or dark. One of `light`, `dark`. Defaults to `light`.                                        |

**Returns** — The rendered image inline as `image/webp`, up to 3 MiB. Above that the result points you at `cohesive_file_get` and its signed `download_url` instead.

## cohesive\_canvas\_create

**Hints** — writes (no read-only or destructive hint)

Create an empty canvas in a workspace. Creates a canvas. The workspace is the canvas's home; folder additionally files it into an existing left-rail folder there, by folder ID or by name (matched against the workspace's canvas folders).

Canvases are not files: they live in workspaces and folders, not under file paths. Rename with `cohesive_canvas_rename`, relocate with `cohesive_canvas_move`, trash with `cohesive_canvas_archive`. Put content on it with the `cohesive_canvas_node_add_*` tools and `cohesive_canvas_edge_add`.

| Argument      | Type   | Required | Description                               |
| ------------- | ------ | -------- | ----------------------------------------- |
| `name`        | string | Required | Name.                                     |
| `description` | string | Optional | Canvas description.                       |
| `folder`      | string | Optional | File it into this folder (ID or name).    |
| `workspace`   | string | Required | Workspace the canvas lives in (required). |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_edge\_add

**Hints** — writes (no read-only or destructive hint)

Add an edge between two nodes. Connects two nodes. source and target are NODE ids from `cohesive_canvas_view` — never a file or entity id; for placed files and media the node id differs from the file id, and an edge to a non-node id is skipped. label puts short text at the midpoint ("depends on"). Handles (top-source, right-source, bottom-source, left-source) pin which side the edge leaves and enters; omit them to auto-route, set them for feedback loops and multi-edge pairs.

| Argument        | Type    | Required | Description                                                                |
| --------------- | ------- | -------- | -------------------------------------------------------------------------- |
| `canvas_id`     | string  | Required | Canvas id.                                                                 |
| `color`         | string  | Optional | Spectrum color or neutral (default).                                       |
| `curve`         | string  | Optional | Straight, smooth, or step (default).                                       |
| `end_arrow`     | string  | Optional | None, arrow (default), or arrow-open.                                      |
| `label`         | string  | Optional | Short midpoint text ("depends on").                                        |
| `source`        | string  | Required | Source node id (required).                                                 |
| `source_handle` | string  | Optional | Pin the source side: top-source, right-source, bottom-source, left-source. |
| `start_arrow`   | string  | Optional | None (default), arrow, or arrow-open.                                      |
| `stroke_style`  | string  | Optional | Solid (default), dashed, or dotted.                                        |
| `stroke_width`  | integer | Optional | 1, 2 (default), or 4.                                                      |
| `target`        | string  | Required | Target node id (required).                                                 |
| `target_handle` | string  | Optional | Pin the target side (same values).                                         |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_edge\_delete

**Hints** — destructive

Delete edges.

| Argument    | Type            | Required | Description |
| ----------- | --------------- | -------- | ----------- |
| `canvas_id` | string          | Required | Canvas id.  |
| `edge_ids`  | array of string | Required | Edge ids.   |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_edge\_update

**Hints** — destructive, idempotent

Update an edge's label or style.

| Argument        | Type    | Required | Description                                                                |
| --------------- | ------- | -------- | -------------------------------------------------------------------------- |
| `canvas_id`     | string  | Required | Canvas id.                                                                 |
| `edge_id`       | string  | Required | Edge id.                                                                   |
| `color`         | string  | Optional | Spectrum color or neutral (default).                                       |
| `curve`         | string  | Optional | Straight, smooth, or step (default).                                       |
| `end_arrow`     | string  | Optional | None, arrow (default), or arrow-open.                                      |
| `label`         | string  | Optional | Short midpoint text ("depends on").                                        |
| `source_handle` | string  | Optional | Pin the source side: top-source, right-source, bottom-source, left-source. |
| `start_arrow`   | string  | Optional | None (default), arrow, or arrow-open.                                      |
| `stroke_style`  | string  | Optional | Solid (default), dashed, or dotted.                                        |
| `stroke_width`  | integer | Optional | 1, 2 (default), or 4.                                                      |
| `target_handle` | string  | Optional | Pin the target side (same values).                                         |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_edit

**Hints** — destructive

Apply a batch canvas edit (the raw canvas-edit payload). Applies one canvas-edit call from raw JSON — the escape hatch for building a whole diagram, or several changes, in a single atomic round-trip. The payload is the canvas-edit action's input, verbatim:

`{"nodes": [...], "delete_node_ids": [...], "edges": [...], "delete_edge_ids": [...]}`

Each nodes\[] entry is `{entity | entity_id | id, position, width, height}`; entity is one of canvas\_text\_note, canvas\_text\_label, canvas\_shape, canvas\_connector, or a generic remote record. payload is the canvas-edit object: `{nodes, delete_node_ids, edges, delete_edge_ids}`.

| Argument    | Type   | Required | Description                               |
| ----------- | ------ | -------- | ----------------------------------------- |
| `canvas_id` | string | Required | Canvas id.                                |
| `payload`   | object | Required | The edit payload, sent as a whole object. |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_get

**Hints** — read-only, idempotent

Show one canvas. view\_url is the public URL to show a person; dashboard\_url opens the canvas in the app for a signed-in user.

| Argument    | Type   | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `canvas_id` | string | Required | Canvas id.  |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_list

**Hints** — read-only, idempotent

List the canvases you can access. Lists every canvas you can access, most recently modified first. With workspace, lists only that workspace's canvases (unpaginated — limit does not apply).

| Argument    | Type    | Required | Description                                          |
| ----------- | ------- | -------- | ---------------------------------------------------- |
| `limit`     | integer | Optional | Max canvases to return (server default 25, max 250). |
| `workspace` | string  | Optional | List only this workspace's canvases.                 |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_move

**Hints** — destructive, idempotent

Move a canvas to another workspace or folder. Relocates a canvas in the left rail: workspace re-homes it to another workspace, folder files it into a folder (by ID or name, within its workspace), root moves it back to its workspace's top level. Folder and workspace moves compose: with both, the canvas moves to the workspace first and is then filed into that workspace's folder.

This moves the canvas object only; files ON the canvas stay with it. File records move separately with `cohesive_file_move`. At most one of: folder, root.

| Argument    | Type    | Required | Description                                |
| ----------- | ------- | -------- | ------------------------------------------ |
| `canvas_id` | string  | Required | Canvas id.                                 |
| `folder`    | string  | Optional | File it into this folder (ID or name).     |
| `root`      | boolean | Optional | Move it back to the workspace's top level. |
| `workspace` | string  | Optional | Re-home the canvas to this workspace.      |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_block

**Hints** — writes (no read-only or destructive hint)

Create an HTML file and place it as a live block. Creates a text/html file record IN the canvas and places it as a live block — a canvas-native component that renders your HTML at exactly the box you give it. This is the one command that makes a block; uploading an HTML file and placing it with add-entity yields a plain file card instead.

A block renders at exactly width x height (multiples of 16, minimum 128 per side), so author the HTML to fill that box.

| Argument     | Type    | Required | Description                                                   |
| ------------ | ------- | -------- | ------------------------------------------------------------- |
| `canvas_id`  | string  | Required | Canvas id.                                                    |
| `chromeless` | boolean | Optional | No card chrome: the HTML composites directly onto the canvas. |
| `content`    | string  | Optional | Inline HTML.                                                  |
| `height`     | number  | Optional | Block height (required; multiple of 16, min 128).             |
| `layer`      | string  | Optional | Stacking layer: back or front. One of `back`, `front`.        |
| `name`       | string  | Optional | Destination file name, extension included (required).         |
| `position`   | string  | Required | Top-left corner "x,y" (required; 16px lattice).               |
| `width`      | number  | Optional | Block width (required; multiple of 16, min 128).              |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_connector

**Hints** — writes (no read-only or destructive hint)

Add a free-floating connector line between two points. Adds a connector: a line or arrow between two absolute canvas coordinates, attached to nothing. To connect two NODES so the link follows them, use `cohesive_canvas_edge_add` instead — connectors are for freehand arrows and diagram lines between positions.

Connectors take no position or size; their geometry is start and end. arrow\_mode none|end|both presets the arrowheads; curve smooth, straight, or step (default, right-angle).

| Argument       | Type    | Required | Description                               |
| -------------- | ------- | -------- | ----------------------------------------- |
| `canvas_id`    | string  | Required | Canvas id.                                |
| `arrow_mode`   | string  | Optional | Arrowheads: none, end, or both.           |
| `color`        | string  | Optional | Spectrum color or neutral (default).      |
| `curve`        | string  | Optional | Smooth, straight, or step (default).      |
| `end`          | string  | Required | End point "x,y" (required).               |
| `id`           | string  | Optional | Node id (UUID v4); omit to auto-generate. |
| `start`        | string  | Required | Start point "x,y" (required).             |
| `stroke_style` | string  | Optional | Solid (default), dashed, or dotted.       |
| `stroke_width` | integer | Optional | 1, 2 (default), or 4.                     |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_document

**Hints** — writes (no read-only or destructive hint)

Create an HTML or markdown file and place it as a page card. Creates a file record IN the canvas — text/html or markdown, decided by the destination name's extension — and places it as a standard page card that opens in the detail view. For an HTML component that should render live in a fixed box, use `cohesive_canvas_node_add_block` instead.

Cards default to the portrait page (320x416); explicit width/height override it, which is how a deck-style HTML document goes landscape.

| Argument    | Type   | Required | Description                                           |
| ----------- | ------ | -------- | ----------------------------------------------------- |
| `canvas_id` | string | Required | Canvas id.                                            |
| `content`   | string | Optional | Inline content.                                       |
| `height`    | number | Optional | Card height (default: portrait page 416).             |
| `name`      | string | Optional | Destination file name, extension included (required). |
| `position`  | string | Required | Top-left corner "x,y" (required; 16px lattice).       |
| `width`     | number | Optional | Card width (default: portrait page 320).              |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_entity

**Hints** — writes (no read-only or destructive hint)

Place an entity card: a platform file or a record from another platform. Places an entity card. Two modes:

entity\_id `<id>` places an entity the platform already knows by its data id — this is how a file record is placed on a canvas as a card (pass the file record's ID; for a file from another workspace, add it to this canvas first with `cohesive_file_reference`).

platform `<name>` id `<remote-id>` places a generic card for a record living on another platform (slack, notion, github,...). Pass the source platform's stable id VERBATIM — it deduplicates repeat placements.

| Argument      | Type   | Required | Description                                                                    |
| ------------- | ------ | -------- | ------------------------------------------------------------------------------ |
| `canvas_id`   | string | Required | Canvas id.                                                                     |
| `description` | string | Optional | Card description.                                                              |
| `entity_id`   | string | Optional | Place a known platform entity by data id (a file record's id places the file). |
| `height`      | number | Optional | Height (default natural).                                                      |
| `id`          | string | Optional | The record's stable id on its platform, verbatim.                              |
| `image_url`   | string | Optional | Genuine preview or cover image (renders as a media tile; not for avatars).     |
| `platform`    | string | Optional | Source platform of a remote record (slack, notion, github,...).                |
| `position`    | string | Required | Top-left corner "x,y" (required; 16px lattice).                                |
| `subtitle`    | string | Optional | Card subtitle.                                                                 |
| `timestamp`   | string | Optional | ISO8601 timestamp.                                                             |
| `title`       | string | Optional | Card title.                                                                    |
| `url`         | string | Optional | Link to the record.                                                            |
| `width`       | number | Optional | Width (default 320).                                                           |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_label

**Hints** — writes (no read-only or destructive hint)

Add a text label (a single line of free-standing text). Adds a text label: one line of text directly on the canvas — headings, captions, annotations. Font sizes are 16px, 20px (default), 32px, 48px; keep content to roughly 8 words at 16-20px, 5 at 32px, 3 at 48px. Omit width to auto-size.

Omit color for the theme-adaptive default (this is usually right). Colors are the spectrum palette: orange, yellow, green, blue, violet, mulberry, brown, indigo, olive.

| Argument    | Type    | Required | Description                                          |
| ----------- | ------- | -------- | ---------------------------------------------------- |
| `canvas_id` | string  | Required | Canvas id.                                           |
| `bold`      | boolean | Optional | Bold.                                                |
| `color`     | string  | Optional | Spectrum color; omit for the theme-adaptive default. |
| `content`   | string  | Required | Label text, one line (required).                     |
| `font`      | string  | Optional | Font family (same four as add-note).                 |
| `font_size` | string  | Optional | 16px, 20px (default), 32px, or 48px.                 |
| `id`        | string  | Optional | Node id (UUID v4); omit to auto-generate.            |
| `italic`    | boolean | Optional | Italic.                                              |
| `position`  | string  | Required | Top-left corner "x,y" (required; 16px lattice).      |
| `underline` | boolean | Optional | Underline.                                           |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_note

**Hints** — writes (no read-only or destructive hint)

Add a text note (a sticky with a title and markdown body). Adds a text note: a titled sticky holding markdown content. Notes default to 288x288; use 192 height for short notes and 384 for long ones. The title should be 2-6 words.

Colors are the sticky palette: apricot, butter (default), meadow, sea, orchid, rose, clay, mist, oat.

| Argument    | Type   | Required | Description                                                                                                |
| ----------- | ------ | -------- | ---------------------------------------------------------------------------------------------------------- |
| `canvas_id` | string | Required | Canvas id.                                                                                                 |
| `color`     | string | Optional | Sticky color (default butter).                                                                             |
| `content`   | string | Required | Markdown body (required).                                                                                  |
| `font`      | string | Optional | Font family: "Inter, sans-serif", "Georgia, serif", "'Courier New', monospace", "'Comic Sans MS', cursive" |
| `font_size` | string | Optional | Body font size, CSS px (e.g. "14px").                                                                      |
| `height`    | number | Optional | Height (default 288; 192 short, 384 long).                                                                 |
| `id`        | string | Optional | Node id (UUID v4); omit to auto-generate — set it only to reference the node in the same batch.            |
| `position`  | string | Required | Top-left corner "x,y" (required; 16px lattice).                                                            |
| `title`     | string | Required | Note title, 2-6 words (required).                                                                          |
| `width`     | number | Optional | Width (default 288).                                                                                       |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_add\_shape

**Hints** — writes (no read-only or destructive hint)

Add a shape (rectangle, circle, diamond, triangle, pentagon, cylinder). Adds a shape, optionally with centered label text (content). Shapes default to 144x144; 192x96 works well for sequence-diagram boxes.

fill takes the sticky palette (apricot, butter, meadow, sea, orchid, rose, clay, mist, oat); stroke takes the spectrum palette and defaults to the stroke paired with the fill. no\_fill draws a stroke-only outline.

| Argument       | Type    | Required | Description                                                                                                                                          |
| -------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------- |
| `canvas_id`    | string  | Required | Canvas id.                                                                                                                                           |
| `content`      | string  | Optional | Centered label text.                                                                                                                                 |
| `fill`         | string  | Optional | Sticky fill color. Defaults to `butter`.                                                                                                             |
| `height`       | number  | Optional | Height (default 144).                                                                                                                                |
| `id`           | string  | Optional | Node id (UUID v4); omit to auto-generate.                                                                                                            |
| `no_fill`      | boolean | Optional | Stroke-only outline.                                                                                                                                 |
| `position`     | string  | Required | Top-left corner "x,y" (required; 16px lattice).                                                                                                      |
| `shape`        | string  | Required | Rectangle, circle, diamond, triangle, pentagon, or cylinder (required). One of `rectangle`, `circle`, `diamond`, `triangle`, `pentagon`, `cylinder`. |
| `stroke`       | string  | Optional | Spectrum stroke color (defaults to the fill's pair).                                                                                                 |
| `stroke_style` | string  | Optional | Solid (default), dashed, or dotted. One of `solid`, `dashed`, `dotted`.                                                                              |
| `stroke_width` | integer | Optional | 1, 2 (default), or 4.                                                                                                                                |
| `width`        | number  | Optional | Width (default 144).                                                                                                                                 |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_delete

**Hints** — destructive

Delete nodes from a canvas. Deletes nodes by node id. Deleting a file's node removes the card from the canvas; whether the file itself survives follows the platform's file rules (a reference's deletion removes only the reference).

| Argument    | Type            | Required | Description |
| ----------- | --------------- | -------- | ----------- |
| `canvas_id` | string          | Required | Canvas id.  |
| `node_ids`  | array of string | Required | Node ids.   |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_get

**Hints** — read-only, idempotent

Read nodes in full. Fetches the complete stored content of specific nodes — the full text of notes that `cohesive_canvas_view` truncates, complete entity data, exact geometry.

If a node's content shows it is a file record (entity base "file\_record"), the node holds only file METADATA: the file's content is a different id and a different command — read it with `cohesive_file_read` `<file-id>` (metadata with `cohesive_file_get` `<file-id>`). Passing a file id to this command fails with exactly that pointer.

| Argument    | Type            | Required | Description |
| ----------- | --------------- | -------- | ----------- |
| `canvas_id` | string          | Required | Canvas id.  |
| `node_ids`  | array of string | Required | Node ids.   |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_move

**Hints** — destructive, idempotent

Move a node to a new position. Repositions one node by its node id (top-left corner, canvas coordinates, 16px lattice). Works for every node type, including files and generated media. Content is untouched.

| Argument    | Type   | Required | Description                           |
| ----------- | ------ | -------- | ------------------------------------- |
| `canvas_id` | string | Required | Canvas id.                            |
| `node_id`   | string | Required | Node id.                              |
| `position`  | string | Required | New top-left corner "x,y" (required). |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_resize

**Hints** — destructive, idempotent

Resize a node. Resizes one node by its node id (dimensions in canvas units, 16px lattice). position moves it in the same call.

| Argument    | Type   | Required | Description               |
| ----------- | ------ | -------- | ------------------------- |
| `canvas_id` | string | Required | Canvas id.                |
| `node_id`   | string | Required | Node id.                  |
| `height`    | number | Optional | New height.               |
| `position`  | string | Optional | New top-left corner "x,y" |
| `width`     | number | Optional | New width.                |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_node\_update

**Hints** — destructive, idempotent

Update a node's content or style. Updates a canvas-native node in place: pass only the flags to change; the rest of the node is untouched (the platform merges partially). The node's current type decides which flags apply — title/content/color for notes and labels, fill/stroke/shape/content for shapes, start/end and stroke flags for connectors.

Only canvas-native nodes (notes, labels, shapes, connectors) update this way. A file's content is edited through the file itself, and an HTML block through "file" commands on its file id — the canvas card re-renders on its own.

| Argument       | Type    | Required | Description                                        |
| -------------- | ------- | -------- | -------------------------------------------------- |
| `canvas_id`    | string  | Required | Canvas id.                                         |
| `node_id`      | string  | Required | Node id.                                           |
| `color`        | string  | Optional | Note sticky color, label/connector spectrum color. |
| `content`      | string  | Optional | Note/label body or shape label.                    |
| `curve`        | string  | Optional | Connector curve: smooth, straight, or step.        |
| `end`          | string  | Optional | Connector end "x,y"                                |
| `fill`         | string  | Optional | Shape fill (sticky palette).                       |
| `font`         | string  | Optional | Font family.                                       |
| `font_size`    | string  | Optional | Font size.                                         |
| `shape`        | string  | Optional | Shape type.                                        |
| `start`        | string  | Optional | Connector start "x,y"                              |
| `stroke`       | string  | Optional | Shape stroke (spectrum palette).                   |
| `stroke_style` | string  | Optional | Solid, dashed, or dotted.                          |
| `stroke_width` | integer | Optional | 1, 2, or 4.                                        |
| `title`        | string  | Optional | Note title.                                        |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_publish

**Hints** — idempotent

Publish a canvas to a public URL. Publishes a canvas as a read-only public snapshot — anyone with the URL can view it, no Cohesive account needed. The URL is printed as "Public URL" (view\_url in JSON) and is the one to give a person; dashboard\_url opens the canvas in the app for a signed-in user. Revoke with `cohesive_canvas_unpublish`.

Publishing runs server-side and takes a while (it rebuilds the snapshot and the social card), so this waits for it to finish and reports the outcome. The snapshot is a point-in-time copy: later canvas edits are not published until you publish again. view\_url is the public URL to show a person; dashboard\_url opens the canvas in the app for a signed-in user.

| Argument    | Type   | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `canvas_id` | string | Required | Canvas id.  |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_raw

**Hints** — read-only, idempotent

Print a canvas's full content document. Prints the canvas's full content document as `{nodes, edges}`, each keyed by id. Node and edge shapes follow the canvas frontend's document model and are not a stable contract.

Full documents can be very large — survey with `cohesive_canvas_view` first, then use node\_ids here to fetch specific nodes in full.

| Argument    | Type            | Required | Description                                                                              |
| ----------- | --------------- | -------- | ---------------------------------------------------------------------------------------- |
| `canvas_id` | string          | Required | Canvas id.                                                                               |
| `node_ids`  | array of string | Optional | Restrict to these node IDs (and edges between them). Values containing commas are split. |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_rename

**Hints** — destructive, idempotent

Rename a canvas.

| Argument    | Type   | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `canvas_id` | string | Required | Canvas id.  |
| `new_name`  | string | Required | New name.   |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_restore

**Hints** — idempotent

Restore an archived canvas.

| Argument    | Type   | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `canvas_id` | string | Required | Canvas id.  |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_unpublish

**Hints** — destructive

Revoke a canvas's public URL. Takes a published canvas offline: the public URL stops serving, and a publish still in flight is cancelled. The canvas itself is untouched.

| Argument    | Type   | Required | Description |
| ----------- | ------ | -------- | ----------- |
| `canvas_id` | string | Required | Canvas id.  |

**Returns** — JSON, as text content and as structured content.

## cohesive\_canvas\_view

**Hints** — read-only, idempotent

Survey a canvas's nodes and edges. Renders the canvas's compact projection — identity, geometry, and semantic content with styling stripped and free text truncated — as node and edge tables. With output json, emits the same compact data as JSON. Use `cohesive_canvas_raw` node\_ids to fetch specific nodes in full.

| Argument    | Type            | Required | Description                                                                              |
| ----------- | --------------- | -------- | ---------------------------------------------------------------------------------------- |
| `canvas_id` | string          | Required | Canvas id.                                                                               |
| `node_ids`  | array of string | Optional | Restrict to these node IDs (and edges between them). Values containing commas are split. |

**Returns** — JSON, as text content and as structured content.
