gradeNot graded
visually_get_editor_stateAnswer
Get the active page, page list, element summaries, current selection, zoom, and undo/redo availability.
View tool JSON
{
"name": "visually_get_editor_state",
"kind": "answer",
"impl": "imperative",
"description": "Get the active page, page list, element summaries, current selection, zoom, and undo/redo availability.",
"inputSchema": {
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}
}visually_list_templatesAnswer
List premade design templates, optionally filtered by name or category. Returns dimensions and identifiers accepted by visually_apply_template.
View tool JSON
{
"name": "visually_list_templates",
"kind": "answer",
"impl": "imperative",
"description": "List premade design templates, optionally filtered by name or category. Returns dimensions and identifiers accepted by visually_apply_template.",
"inputSchema": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": "Optional case-insensitive template name search."
},
"category": {
"type": "string",
"description": "Optional exact template category."
}
},
"required": [],
"additionalProperties": false
}
}visually_apply_templateAction
Replace the active page with a premade template. The change is undoable.
View tool JSON
{
"name": "visually_apply_template",
"kind": "act",
"impl": "imperative",
"description": "Replace the active page with a premade template. The change is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"templateId": {
"type": "string",
"description": "Template identifier from visually_list_templates."
}
},
"required": [
"templateId"
],
"additionalProperties": false
}
}visually_add_textAction
Add and select an editable text element on the active page. The change is undoable.
View tool JSON
{
"name": "visually_add_text",
"kind": "act",
"impl": "imperative",
"description": "Add and select an editable text element on the active page. The change is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"text": {
"type": "string",
"description": "Text content, up to 10,000 characters."
},
"name": {
"type": "string",
"description": "Optional layer name."
},
"x": {
"type": "number",
"description": "Left position in page pixels."
},
"y": {
"type": "number",
"description": "Top position in page pixels."
},
"width": {
"type": "number",
"description": "Text box width in pixels.",
"minimum": 1,
"maximum": 10000
},
"height": {
"type": "number",
"description": "Text box height in pixels.",
"minimum": 1,
"maximum": 10000
},
"fontSize": {
"type": "number",
"description": "Font size in pixels.",
"minimum": 1,
"maximum": 1000
},
"fontFamily": {
"type": "string",
"description": "CSS font family."
},
"fill": {
"type": "string",
"description": "CSS text color."
},
"align": {
"type": "string",
"description": "Horizontal alignment.",
"enum": [
"left",
"center",
"right",
"justify"
]
}
},
"required": [
"text"
],
"additionalProperties": false
}
}visually_add_shapeAction
Add and select a rectangle, circle, ellipse, triangle, polygon, or star on the active page. The change is undoable.
View tool JSON
{
"name": "visually_add_shape",
"kind": "act",
"impl": "imperative",
"description": "Add and select a rectangle, circle, ellipse, triangle, polygon, or star on the active page. The change is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"shape": {
"type": "string",
"description": "Shape kind.",
"enum": [
"rect",
"circle",
"ellipse",
"triangle",
"polygon",
"star"
]
},
"name": {
"type": "string",
"description": "Optional layer name."
},
"x": {
"type": "number",
"description": "Left position in page pixels."
},
"y": {
"type": "number",
"description": "Top position in page pixels."
},
"width": {
"type": "number",
"description": "Shape width in pixels.",
"minimum": 1,
"maximum": 10000
},
"height": {
"type": "number",
"description": "Shape height in pixels.",
"minimum": 1,
"maximum": 10000
},
"fill": {
"type": "string",
"description": "CSS fill color."
},
"stroke": {
"type": "string",
"description": "Optional CSS stroke color."
},
"strokeWidth": {
"type": "number",
"description": "Optional stroke width.",
"minimum": 0,
"maximum": 1000
},
"cornerRadius": {
"type": "number",
"description": "Corner radius for rectangles.",
"minimum": 0,
"maximum": 5000
}
},
"required": [
"shape"
],
"additionalProperties": false
}
}visually_select_elementsAction
Select active-page elements by their IDs. Pass an empty array to clear selection.
View tool JSON
{
"name": "visually_select_elements",
"kind": "act",
"impl": "imperative",
"description": "Select active-page elements by their IDs. Pass an empty array to clear selection.",
"inputSchema": {
"type": "object",
"properties": {
"elementIds": {
"type": "array",
"description": "Element IDs from visually_get_editor_state.",
"items": {
"type": "string"
},
"uniqueItems": true,
"maxItems": 1000
}
},
"required": [
"elementIds"
],
"additionalProperties": false
}
}visually_update_elementAction
Update safe visual properties of one active-page element. Type-specific fields are applied only to compatible elements. The change is undoable.
View tool JSON
{
"name": "visually_update_element",
"kind": "act",
"impl": "imperative",
"description": "Update safe visual properties of one active-page element. Type-specific fields are applied only to compatible elements. The change is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"elementId": {
"type": "string",
"description": "Element ID from visually_get_editor_state."
},
"name": {
"type": "string",
"description": "Layer name."
},
"x": {
"type": "number",
"description": "Left position."
},
"y": {
"type": "number",
"description": "Top position."
},
"width": {
"type": "number",
"description": "Width.",
"minimum": 1,
"maximum": 10000
},
"height": {
"type": "number",
"description": "Height.",
"minimum": 1,
"maximum": 10000
},
"rotation": {
"type": "number",
"description": "Rotation in degrees.",
"minimum": -36000,
"maximum": 36000
},
"opacity": {
"type": "number",
"description": "Opacity.",
"minimum": 0,
"maximum": 1
},
"locked": {
"type": "boolean",
"description": "Whether editing is locked."
},
"hidden": {
"type": "boolean",
"description": "Whether the layer is hidden."
},
"text": {
"type": "string",
"description": "Text content for text elements."
},
"fontSize": {
"type": "number",
"description": "Font size for text elements.",
"minimum": 1,
"maximum": 1000
},
"fontFamily": {
"type": "string",
"description": "Font family for text elements."
},
"fill": {
"type": "string",
"description": "Text or shape fill color."
},
"cornerRadius": {
"type": "number",
"description": "Corner radius for shape or image elements.",
"minimum": 0,
"maximum": 5000
}
},
"required": [
"elementId"
],
"additionalProperties": false
}
}visually_arrange_selectionAction
Align, distribute, group, ungroup, duplicate, or move selected layers in the stack. The change is undoable.
View tool JSON
{
"name": "visually_arrange_selection",
"kind": "act",
"impl": "imperative",
"description": "Align, distribute, group, ungroup, duplicate, or move selected layers in the stack. The change is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "Arrangement operation.",
"enum": [
"align",
"distribute",
"group",
"ungroup",
"duplicate",
"layer"
]
},
"value": {
"type": "string",
"description": "For align: left, center, right, top, middle, bottom. For distribute: horizontal or vertical. For layer: up, down, top, bottom."
}
},
"required": [
"operation"
],
"additionalProperties": false
}
}visually_delete_selectionSensitive Action
Delete selected, unlocked elements. This destructive tool requires confirm=true and remains undoable.
View tool JSON
{
"name": "visually_delete_selection",
"kind": "transact",
"impl": "imperative",
"description": "Delete selected, unlocked elements. This destructive tool requires confirm=true and remains undoable.",
"inputSchema": {
"type": "object",
"properties": {
"confirm": {
"type": "boolean",
"description": "Must be true to delete the selected elements."
}
},
"required": [
"confirm"
],
"additionalProperties": false
}
}visually_manage_pageAction
Add, duplicate, switch, or delete pages. Deletion requires confirm=true. Document mutations are undoable.
View tool JSON
{
"name": "visually_manage_page",
"kind": "act",
"impl": "imperative",
"description": "Add, duplicate, switch, or delete pages. Deletion requires confirm=true. Document mutations are undoable.",
"inputSchema": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "Page operation.",
"enum": [
"add",
"duplicate",
"switch",
"delete"
]
},
"pageIndex": {
"type": "integer",
"description": "Zero-based page index for switch/delete.",
"minimum": 0
},
"confirm": {
"type": "boolean",
"description": "Must be true for page deletion."
}
},
"required": [
"operation"
],
"additionalProperties": false
}
}visually_resize_pageAction
Set the active page dimensions, name, or background. Supports square, portrait, landscape, print, and custom sizes. The change is undoable.
View tool JSON
{
"name": "visually_resize_page",
"kind": "act",
"impl": "imperative",
"description": "Set the active page dimensions, name, or background. Supports square, portrait, landscape, print, and custom sizes. The change is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"width": {
"type": "number",
"description": "Page width in pixels.",
"minimum": 1,
"maximum": 10000
},
"height": {
"type": "number",
"description": "Page height in pixels.",
"minimum": 1,
"maximum": 10000
},
"name": {
"type": "string",
"description": "Optional page/design name."
},
"background": {
"type": "string",
"description": "Optional CSS background color."
}
},
"required": [],
"additionalProperties": false
}
}visually_historyAnswer
Undo or redo the latest document change.
View tool JSON
{
"name": "visually_history",
"kind": "answer",
"impl": "imperative",
"description": "Undo or redo the latest document change.",
"inputSchema": {
"type": "object",
"properties": {
"operation": {
"type": "string",
"description": "History operation.",
"enum": [
"undo",
"redo"
]
}
},
"required": [
"operation"
],
"additionalProperties": false
}
}visually_export_designAction
Return either the full project JSON or the active page as SVG without starting a download.
View tool JSON
{
"name": "visually_export_design",
"kind": "act",
"impl": "imperative",
"description": "Return either the full project JSON or the active page as SVG without starting a download.",
"inputSchema": {
"type": "object",
"properties": {
"format": {
"type": "string",
"description": "Export format.",
"enum": [
"json",
"svg"
]
}
},
"required": [
"format"
],
"additionalProperties": false
}
}visually_import_projectAction
Validate and load Visually project JSON. Replacing the open project requires confirm=true and is undoable.
View tool JSON
{
"name": "visually_import_project",
"kind": "act",
"impl": "imperative",
"description": "Validate and load Visually project JSON. Replacing the open project requires confirm=true and is undoable.",
"inputSchema": {
"type": "object",
"properties": {
"projectJson": {
"type": "string",
"description": "Visually or legacy Canvasly project JSON, page object, or page array. Maximum 5 MB."
},
"confirm": {
"type": "boolean",
"description": "Must be true to replace the currently open project."
}
},
"required": [
"projectJson",
"confirm"
],
"additionalProperties": false
}
}visually_create_campaignAction
Create coordinated, semantically tagged campaign pages from one brief. Replaces the open project only with confirm=true and records one undo step.
View tool JSON
{
"name": "visually_create_campaign",
"kind": "act",
"impl": "imperative",
"description": "Create coordinated, semantically tagged campaign pages from one brief. Replaces the open project only with confirm=true and records one undo step.",
"inputSchema": {
"type": "object",
"properties": {
"brandName": {
"type": "string",
"description": "Brand name used consistently across campaign formats.",
"maxLength": 120
},
"headline": {
"type": "string",
"description": "Primary campaign headline.",
"maxLength": 280
},
"subheadline": {
"type": "string",
"description": "Supporting campaign message.",
"maxLength": 500
},
"cta": {
"type": "string",
"description": "Call-to-action label.",
"maxLength": 100
},
"primaryColor": {
"type": "string",
"description": "Primary CSS color, preferably hex.",
"maxLength": 64
},
"secondaryColor": {
"type": "string",
"description": "Secondary or page-background CSS color, preferably hex.",
"maxLength": 64
},
"accentColor": {
"type": "string",
"description": "Accent CSS color, preferably hex.",
"maxLength": 64
},
"textColor": {
"type": "string",
"description": "Campaign text CSS color, preferably hex.",
"maxLength": 64
},
"fontFamily": {
"type": "string",
"description": "Campaign font family.",
"maxLength": 120
},
"formats": {
"type": "array",
"description": "Unique output formats. Defaults to all five supported campaign formats.",
"items": {
"type": "string",
"enum": [
"instagram_post",
"instagram_story",
"youtube_thumbnail",
"poster",
"landscape_banner"
]
},
"minItems": 1,
"maxItems": 5,
"uniqueItems": true
},
"confirm": {
"type": "boolean",
"description": "Must be true to replace the open project with the generated campaign."
}
},
"required": [
"brandName",
"headline",
"confirm"
],
"additionalProperties": false
}
}visually_apply_brand_updateAction
Update tagged brand copy, colors, and typography across every campaign page in one semantic, undoable operation.
View tool JSON
{
"name": "visually_apply_brand_update",
"kind": "act",
"impl": "imperative",
"description": "Update tagged brand copy, colors, and typography across every campaign page in one semantic, undoable operation.",
"inputSchema": {
"type": "object",
"properties": {
"brandName": {
"type": "string",
"description": "Brand name used consistently across campaign formats.",
"maxLength": 120
},
"headline": {
"type": "string",
"description": "Primary campaign headline.",
"maxLength": 280
},
"subheadline": {
"type": "string",
"description": "Supporting campaign message.",
"maxLength": 500
},
"cta": {
"type": "string",
"description": "Call-to-action label.",
"maxLength": 100
},
"primaryColor": {
"type": "string",
"description": "Primary CSS color, preferably hex.",
"maxLength": 64
},
"secondaryColor": {
"type": "string",
"description": "Secondary or page-background CSS color, preferably hex.",
"maxLength": 64
},
"accentColor": {
"type": "string",
"description": "Accent CSS color, preferably hex.",
"maxLength": 64
},
"textColor": {
"type": "string",
"description": "Campaign text CSS color, preferably hex.",
"maxLength": 64
},
"fontFamily": {
"type": "string",
"description": "Campaign font family.",
"maxLength": 120
}
},
"required": [],
"additionalProperties": false
}
}visually_audit_designAction
Read-only audit for overflow, text contrast, safe-area crossings, missing image alt text, and cross-page brand consistency.
View tool JSON
{
"name": "visually_audit_design",
"kind": "act",
"impl": "imperative",
"description": "Read-only audit for overflow, text contrast, safe-area crossings, missing image alt text, and cross-page brand consistency.",
"inputSchema": {
"type": "object",
"properties": {
"scope": {
"type": "string",
"description": "Audit the active page or the full project.",
"enum": [
"active_page",
"all_pages"
]
}
},
"required": [],
"additionalProperties": false
}
}