Skip to main content
Glama

Create, rename, rewrite, or delete canvases (collaborative Markdown documents). Use `action=replaceContent` with the `If-Match` ETag from getCanvasContent to rewrite the body; use `update` for title or workspace access only. To read a canvas, use getCanvas or getCanvasContent. Set `action` to one of: create, delete, replaceContent, update. Then provide the fields for the selected action. action=create: Create a new canvas, optionally seeded with Markdown or from a template. Use this when the user wants a new document to write or collaborate in. `title` is required (1–255 chars). Supply either `content` (Markdown) or `template_id`; when a template is given, `content` is ignored and the caller must be able to read the template (else 404 `template_not_found`). `workspace_canvas_role` defaults to `NOACCESS`; `VIEWER` shares read access with the whole workspace. The 201 body includes the canvas plus the initial `etag` for a first v1UpdateCanvasContent. Send an `Idempotency-Key` to avoid duplicates on retry. 402 means the plan lacks canvases; 422 means the Markdown could not be converted. action=delete: Delete a canvas the user owns. Use this only when the user explicitly wants a canvas removed. Soft-deletes the canvas row and best-effort removes the collaborative document. Owner only: any non-owner who can see the canvas (editor or viewer) gets 403; unknown or inaccessible canvases get 404. Returns 204; a repeat delete 404s, so retries are safe. There is no restore through this API. action=replaceContent: Replace the entire body of a canvas with new Markdown, guarded by the ETag from the last read. Use this to rewrite a canvas after reading it with getCanvasContent. Full replacement, not a patch: send the complete new body in `content` (non-empty; use v1DeleteCanvas to remove a canvas). `If-Match` is required and must be the `etag` from v1GetCanvasContent or a prior write — missing gives 400 `checksum_required`; stale gives 409 `checksum_mismatch` with the current ETag in the `ETag` header. On 409, re-read the content, re-apply the user's intent to the fresh body, and retry once with the new ETag; never merge blindly. The 200 body carries the new `etag` for the next write. Requires editor access; viewers get 404. 422 means the Markdown could not be converted. action=update: Rename a canvas or change its workspace-wide access. Use this for metadata changes; to change the body, use the replaceContent action. Partial update (PATCH) of `title` (1–255 chars) and/or `workspace_canvas_role` (`VIEWER` or `NOACCESS`); at least one is required. Scalar last-writer-wins — no `If-Match` is needed and the body is untouched. Requires editor access; viewers and unknown canvases return 404. 402 means the plan lacks canvases.

manageCanvases
DestructiveIdempotent

Create, rename, rewrite, or delete canvases (collaborative Markdown documents). Use action=replaceContent with the If-Match ETag from getCanvasContent to rewrite the body; use update for title or workspace access only. To read a canvas, use getCanvas or getCanvasContent.

Set action to one of: create, delete, replaceContent, update. Then provide the fields for the selected action.

action=create: Create a new canvas, optionally seeded with Markdown or from a template. Use this when the user wants a new document to write or collaborate in.

title is required (1–255 chars). Supply either content (Markdown) or template_id; when a template is given, content is ignored and the caller must be able to read the template (else 404 template_not_found). workspace_canvas_role defaults to NOACCESS; VIEWER shares read access with the whole workspace. The 201 body includes the canvas plus the initial etag for a first v1UpdateCanvasContent. Send an Idempotency-Key to avoid duplicates on retry. 402 means the plan lacks canvases; 422 means the Markdown could not be converted.

action=delete: Delete a canvas the user owns. Use this only when the user explicitly wants a canvas removed.

Soft-deletes the canvas row and best-effort removes the collaborative document. Owner only: any non-owner who can see the canvas (editor or viewer) gets 403; unknown or inaccessible canvases get 404. Returns 204; a repeat delete 404s, so retries are safe. There is no restore through this API.

action=replaceContent: Replace the entire body of a canvas with new Markdown, guarded by the ETag from the last read. Use this to rewrite a canvas after reading it with getCanvasContent.

Full replacement, not a patch: send the complete new body in content (non-empty; use v1DeleteCanvas to remove a canvas). If-Match is required and must be the etag from v1GetCanvasContent or a prior write — missing gives 400 checksum_required; stale gives 409 checksum_mismatch with the current ETag in the ETag header. On 409, re-read the content, re-apply the user's intent to the fresh body, and retry once with the new ETag; never merge blindly. The 200 body carries the new etag for the next write. Requires editor access; viewers get 404. 422 means the Markdown could not be converted.

action=update: Rename a canvas or change its workspace-wide access. Use this for metadata changes; to change the body, use the replaceContent action.

Partial update (PATCH) of title (1–255 chars) and/or workspace_canvas_role (VIEWER or NOACCESS); at least one is required. Scalar last-writer-wins — no If-Match is needed and the body is untouched. Requires editor access; viewers and unknown canvases return 404. 402 means the plan lacks canvases.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoCanvas ID
titleNoCanvas title (1-255 characters)
actionYesThe operation to perform
contentNoInitial body in Markdown. Ignored when template_id is supplied, since the template provides the body.
If-MatchNoETag of the body the replacement was authored against
template_idNoCanvas template to instantiate. The caller must be able to read the template.
Idempotency-KeyNoOptional client-generated idempotency key (max 255 printable ASCII). Repeat requests with the same key replay the original 2xx response.
workspace_canvas_roleNoAccess for workspace members who are not explicit collaborators: VIEWER or NOACCESS (default NOACCESS)

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=false, idempotentHint=true, and destructiveHint=true. The description goes far beyond these, disclosing detailed behaviors: soft-delete semantics, owner-only access with 403/404 errors, ETag guards and 409 handling, error codes (400, 402, 422), idempotency via Idempotency-Key, default workspace roles, and explicit no-restore guarantee. It enriches the annotation profile with concrete operational details and does not contradict any annotation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but appropriately structured: it opens with the overall purpose and the key distinction between replaceContent and update, then breaks down each action in a consistent format. Every sentence carries operational weight—no filler. The front-loaded summary ensures an agent immediately understands the core usage pattern, and the per-action sections provide depth where needed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a complex tool with 8 parameters, no output schema, and four distinct operations, the description is exhaustive. It covers every action's inputs, prerequisites, error conditions, retry guidance, and access requirements. It addresses edge cases like stale ETags, template readability, idempotency, and soft-delete behavior. No critical information appears missing; an agent can invoke this tool correctly across all scenarios.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already describes all 8 parameters with 100% coverage, so the baseline is 3. The description adds substantial meaning beyond the schema: it explains that content is ignored when template_id is supplied, that If-Match must be the ETag from a prior read, that Idempotency-Key prevents duplicates, and that workspace_canvas_role defaults to NOACCESS. These enrichments clarify relationships and constraints that the schema alone does not convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

Tautological: description restates name/title.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance for each action: 'Use this when the user wants a new document' for create, 'Use this only when the user explicitly wants a canvas removed' for delete, 'Use this to rewrite a canvas after reading it with getCanvasContent' for replaceContent, and 'Use this for metadata changes' for update. It also names the alternative tools for reading (getCanvas, getCanvasContent) and states exclusions like 'never merge blindly' on 409. This leaves no ambiguity about selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources