← WebMCP Directory

Tool tree

storedeck.byanr.com

Developer ToolsTools verified
Website
Design App Store, Google Play, desktop and TV store screenshots in your browser. Projects stay on your device.
Explore capabilities

    page: Every page

    get_app_stateAnswer

    START HERE. Returns the open project (languages, variants → platform decks → screens with ids, image languages and headline/subheadline copy), all saved projects, the current selection and view, undo history and next-step hints. Image bytes are not included (use get_images). Call again after structural changes.

    View tool JSON
    {
      "name": "get_app_state",
      "kind": "answer",
      "impl": "imperative",
      "description": "START HERE. Returns the open project (languages, variants → platform decks → screens with ids, image languages and headline/subheadline copy), all saved projects, the current selection and view, undo history and next-step hints. Image bytes are not included (use get_images). Call again after structural changes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "variantId": {
            "type": "string",
            "description": "Only include this variant"
          },
          "includeCopy": {
            "type": "boolean",
            "description": "Include headline/subheadline text per screen (default true)"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    get_screenAnswer

    Full design of one screen (default: selected): background, device, text style, copy per language, elements, popouts, image info, output size, plus computed layout (device and text rectangles in output px) and warnings such as text overlapping the device or running off-canvas.

    View tool JSON
    {
      "name": "get_screen",
      "kind": "answer",
      "impl": "imperative",
      "description": "Full design of one screen (default: selected): background, device, text style, copy per language, elements, popouts, image info, output size, plus computed layout (device and text rectangles in output px) and warnings such as text overlapping the device or running off-canvas.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "language": {
            "type": "string",
            "description": "Language used for layout warnings (default: current)"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    get_platform_catalogAnswer

    Store screenshot specs: every platform id with its output sizes, orientation, screenshot count limits and requirements. Stores: app-store, google-play, microsoft-store, steam, amazon-appstore, tv-stores, web.

    View tool JSON
    {
      "name": "get_platform_catalog",
      "kind": "answer",
      "impl": "imperative",
      "description": "Store screenshot specs: every platform id with its output sizes, orientation, screenshot count limits and requirements. Stores: app-store, google-play, microsoft-store, steam, amazon-appstore, tv-stores, web.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "store": {
            "type": "string",
            "enum": [
              "app-store",
              "google-play",
              "microsoft-store",
              "steam",
              "amazon-appstore",
              "tv-stores",
              "web"
            ],
            "description": "Filter by store"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    get_stringsAnswer

    The localization table: every headline, subheadline and text-element string per language, with missing translations listed. Filter by variant/platform. Use before translating, then write with set_copy.

    View tool JSON
    {
      "name": "get_strings",
      "kind": "answer",
      "impl": "imperative",
      "description": "The localization table: every headline, subheadline and text-element string per language, with missing translations listed. Filter by variant/platform. Use before translating, then write with set_copy.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "variantId": {
            "type": "string"
          },
          "deckId": {
            "type": "string"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Only these languages"
          },
          "onlyMissing": {
            "type": "boolean",
            "description": "Only rows with missing translations"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    get_imagesAnswer

    Images for visual QA. mode "rendered" (default) returns the styled composition exactly as exported, downscaled to maxDimension (default 900 px, JPEG). mode "original" returns uploaded source screenshots (use to read the app UI before writing copy). Waits for fonts, images and 3D models. Target with screenId/screenIds/screenIndex or scope.

    View tool JSON
    {
      "name": "get_images",
      "kind": "answer",
      "impl": "imperative",
      "description": "Images for visual QA. mode \"rendered\" (default) returns the styled composition exactly as exported, downscaled to maxDimension (default 900 px, JPEG). mode \"original\" returns uploaded source screenshots (use to read the app UI before writing copy). Waits for fonts, images and 3D models. Target with screenId/screenIds/screenIndex or scope.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Several screen ids at once.",
            "minItems": 1,
            "maxItems": 200
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "scope": {
            "type": "string",
            "enum": [
              "screen",
              "platform",
              "variant"
            ],
            "description": "screen (default): one screen. platform: every screen in the platform deck. variant: every screen of every platform in the selected variant."
          },
          "language": {
            "type": "string",
            "description": "Language to render (default: current)"
          },
          "mode": {
            "type": "string",
            "enum": [
              "rendered",
              "original"
            ]
          },
          "maxDimension": {
            "type": "integer",
            "description": "Longest side in px (200-1600, default 900). Never upscales.",
            "minimum": 200,
            "maximum": 1600
          },
          "format": {
            "type": "string",
            "enum": [
              "jpeg",
              "png"
            ],
            "description": "Default jpeg (smaller for agent context)"
          },
          "maxImages": {
            "type": "integer",
            "description": "Cap for multi-screen requests (default 6)",
            "minimum": 1,
            "maximum": 12
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    selectAction

    Moves the editor focus so the user sees what you work on: variantId (A/B variant), deckId (platform), screenId or screenIndex, and language (preview language). Switching variant keeps the same platform and screen position when possible.

    View tool JSON
    {
      "name": "select",
      "kind": "act",
      "impl": "imperative",
      "description": "Moves the editor focus so the user sees what you work on: variantId (A/B variant), deckId (platform), screenId or screenIndex, and language (preview language). Switching variant keeps the same platform and screen position when possible.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "variantId": {
            "type": "string"
          },
          "deckId": {
            "type": "string"
          },
          "screenId": {
            "type": "string"
          },
          "screenIndex": {
            "type": "integer",
            "minimum": 0
          },
          "language": {
            "type": "string",
            "description": "Project language code, e.g. \"de\""
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    set_viewAction

    Controls the editor UI: view (design = single screen canvas, board = all screens × languages grid, strings = localization table, compare = A/B variants side by side), inspectorTab, selected element/popout, which variants to compare, and the store safe-area overlay.

    View tool JSON
    {
      "name": "set_view",
      "kind": "act",
      "impl": "imperative",
      "description": "Controls the editor UI: view (design = single screen canvas, board = all screens × languages grid, strings = localization table, compare = A/B variants side by side), inspectorTab, selected element/popout, which variants to compare, and the store safe-area overlay.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "design",
              "board",
              "strings",
              "compare"
            ]
          },
          "inspectorTab": {
            "type": "string",
            "enum": [
              "background",
              "device",
              "text",
              "elements",
              "popouts"
            ]
          },
          "selectedElementId": {
            "type": "string",
            "description": "Element id or \"\" to clear"
          },
          "selectedPopoutId": {
            "type": "string",
            "description": "Popout id or \"\" to clear"
          },
          "compareVariantIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Variants shown in compare view (2-4)",
            "minItems": 1,
            "maxItems": 4
          },
          "showSafeArea": {
            "type": "boolean"
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_projectAction

    Projects are the top-level container (one per app). Actions: create {name, appName?, platformIds?, languages?} — new project with an "Original" variant; open {projectId}; rename {name, appName?}; duplicate {projectId?, name?}; delete {projectId, confirm:true} (permanent); export_file {projectId?} downloads a .storedeck.json backup for the user; import_file {bundle} imports a backup (object or JSON string).

    View tool JSON
    {
      "name": "manage_project",
      "kind": "act",
      "impl": "imperative",
      "description": "Projects are the top-level container (one per app). Actions: create {name, appName?, platformIds?, languages?} — new project with an \"Original\" variant; open {projectId}; rename {name, appName?}; duplicate {projectId?, name?}; delete {projectId, confirm:true} (permanent); export_file {projectId?} downloads a .storedeck.json backup for the user; import_file {bundle} imports a backup (object or JSON string).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "create",
              "open",
              "rename",
              "duplicate",
              "delete",
              "export_file",
              "import_file"
            ]
          },
          "name": {
            "type": "string",
            "description": "Project name (1-100 chars)",
            "minLength": 1,
            "maxLength": 100
          },
          "appName": {
            "type": "string",
            "description": "App name used in guides/exports"
          },
          "projectId": {
            "type": "string"
          },
          "platformIds": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "app-store-iphone",
                "app-store-ipad",
                "app-store-mac",
                "app-store-apple-tv",
                "app-store-vision-pro",
                "app-store-watch",
                "google-play-phone",
                "google-play-tablet-7",
                "google-play-tablet-10",
                "google-play-chromebook",
                "google-play-tv",
                "google-play-wear",
                "google-play-xr",
                "google-play-automotive",
                "google-play-artwork",
                "ms-store-desktop",
                "ms-store-xbox",
                "steam-screenshots",
                "steam-capsules",
                "amazon-fire-tv",
                "amazon-fire-tablet",
                "smart-tv",
                "web-social"
              ]
            },
            "description": "create: initial platforms (default app-store-iphone)"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "create: initial languages (default [\"en\"])"
          },
          "confirm": {
            "type": "boolean",
            "description": "delete: must be true"
          },
          "bundle": {
            "description": "import_file: project bundle object or JSON string"
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_variantAction

    Variants are alternative screenshot sets for A/B tests (App Store Product Page Optimization, Google Play store listing experiments). Actions: create {name?, cloneFromVariantId?, blank?, platformIds?} — clones the selected variant by default so you only change what the test is about; update {variantId, name?, status?, hypothesis?} (status draft|control|testing|winner|archived — one control/winner at a time); delete {variantId}; move {variantId, toIndex}.

    View tool JSON
    {
      "name": "manage_variant",
      "kind": "act",
      "impl": "imperative",
      "description": "Variants are alternative screenshot sets for A/B tests (App Store Product Page Optimization, Google Play store listing experiments). Actions: create {name?, cloneFromVariantId?, blank?, platformIds?} — clones the selected variant by default so you only change what the test is about; update {variantId, name?, status?, hypothesis?} (status draft|control|testing|winner|archived — one control/winner at a time); delete {variantId}; move {variantId, toIndex}.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "create",
              "update",
              "delete",
              "move"
            ]
          },
          "variantId": {
            "type": "string"
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 80
          },
          "cloneFromVariantId": {
            "type": "string"
          },
          "blank": {
            "type": "boolean",
            "description": "create: start with empty platforms instead of cloning"
          },
          "platformIds": {
            "type": "array",
            "items": {
              "type": "string",
              "enum": [
                "app-store-iphone",
                "app-store-ipad",
                "app-store-mac",
                "app-store-apple-tv",
                "app-store-vision-pro",
                "app-store-watch",
                "google-play-phone",
                "google-play-tablet-7",
                "google-play-tablet-10",
                "google-play-chromebook",
                "google-play-tv",
                "google-play-wear",
                "google-play-xr",
                "google-play-automotive",
                "google-play-artwork",
                "ms-store-desktop",
                "ms-store-xbox",
                "steam-screenshots",
                "steam-capsules",
                "amazon-fire-tv",
                "amazon-fire-tablet",
                "smart-tv",
                "web-social"
              ]
            },
            "description": "create+blank: platforms to add"
          },
          "status": {
            "type": "string",
            "enum": [
              "draft",
              "control",
              "testing",
              "winner",
              "archived"
            ]
          },
          "hypothesis": {
            "type": "string",
            "description": "What this variant tests, e.g. \"Benefit-first headlines lift installs\"",
            "maxLength": 500
          },
          "toIndex": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_platformAction

    Each variant holds one deck per store platform (iPhone, iPad, Android phone, Mac, Apple TV, Android TV, Windows, Steam, Fire TV, …; ids via get_platform_catalog). Actions: add {platformId, sizeId?, variantId?, cloneFromDeckId?, allVariants?} — cloneFromDeckId copies screens, images and copy and rescales the design to the new size (the fastest way to go from iPhone to Android/iPad); remove {deckId}; set_size {deckId?, sizeId? | width+height, orientation?} — design values rescale automatically.

    View tool JSON
    {
      "name": "manage_platform",
      "kind": "act",
      "impl": "imperative",
      "description": "Each variant holds one deck per store platform (iPhone, iPad, Android phone, Mac, Apple TV, Android TV, Windows, Steam, Fire TV, …; ids via get_platform_catalog). Actions: add {platformId, sizeId?, variantId?, cloneFromDeckId?, allVariants?} — cloneFromDeckId copies screens, images and copy and rescales the design to the new size (the fastest way to go from iPhone to Android/iPad); remove {deckId}; set_size {deckId?, sizeId? | width+height, orientation?} — design values rescale automatically.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "add",
              "remove",
              "set_size"
            ]
          },
          "platformId": {
            "type": "string",
            "enum": [
              "app-store-iphone",
              "app-store-ipad",
              "app-store-mac",
              "app-store-apple-tv",
              "app-store-vision-pro",
              "app-store-watch",
              "google-play-phone",
              "google-play-tablet-7",
              "google-play-tablet-10",
              "google-play-chromebook",
              "google-play-tv",
              "google-play-wear",
              "google-play-xr",
              "google-play-automotive",
              "google-play-artwork",
              "ms-store-desktop",
              "ms-store-xbox",
              "steam-screenshots",
              "steam-capsules",
              "amazon-fire-tv",
              "amazon-fire-tablet",
              "smart-tv",
              "web-social"
            ]
          },
          "sizeId": {
            "type": "string",
            "description": "Size id from the catalog, or \"custom\" with width/height"
          },
          "variantId": {
            "type": "string"
          },
          "deckId": {
            "type": "string"
          },
          "cloneFromDeckId": {
            "type": "string"
          },
          "allVariants": {
            "type": "boolean",
            "description": "add: add to every variant"
          },
          "width": {
            "type": "integer",
            "description": "set_size: custom width",
            "minimum": 100,
            "maximum": 8000
          },
          "height": {
            "type": "integer",
            "description": "set_size: custom height",
            "minimum": 100,
            "maximum": 8000
          },
          "orientation": {
            "type": "string",
            "enum": [
              "portrait",
              "landscape"
            ]
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_screensAction

    Screens are the individual store images of a platform deck. Actions: upload {screenshots:[{filename, dataUrl, language?}], deckId?, screenId?} — PNG/JPEG data URLs, max 10 per call; language suffixes in filenames (home_de.png, home-pt-br.png) are detected, and files whose base name matches an existing screen become its localized image; new screens copy the selected screen's style. add_blank {deckId?, name?}; delete {screenId}; duplicate {screenId}; move {screenId, toIndex} (store order); rename {screenId, name}; remove_image {screenId, language}.

    View tool JSON
    {
      "name": "manage_screens",
      "kind": "act",
      "impl": "imperative",
      "description": "Screens are the individual store images of a platform deck. Actions: upload {screenshots:[{filename, dataUrl, language?}], deckId?, screenId?} — PNG/JPEG data URLs, max 10 per call; language suffixes in filenames (home_de.png, home-pt-br.png) are detected, and files whose base name matches an existing screen become its localized image; new screens copy the selected screen's style. add_blank {deckId?, name?}; delete {screenId}; duplicate {screenId}; move {screenId, toIndex} (store order); rename {screenId, name}; remove_image {screenId, language}.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "upload",
              "add_blank",
              "delete",
              "duplicate",
              "move",
              "rename",
              "remove_image"
            ]
          },
          "screenshots": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "filename": {
                  "type": "string",
                  "description": "e.g. \"home_de.png\""
                },
                "dataUrl": {
                  "type": "string",
                  "description": "data:image/png;base64,..."
                },
                "language": {
                  "type": "string",
                  "description": "Overrides filename detection"
                }
              },
              "required": [
                "filename",
                "dataUrl"
              ],
              "additionalProperties": false
            },
            "description": "upload: images",
            "minItems": 1,
            "maxItems": 10
          },
          "deckId": {
            "type": "string"
          },
          "screenId": {
            "type": "string"
          },
          "screenIndex": {
            "type": "integer",
            "minimum": 0
          },
          "name": {
            "type": "string",
            "minLength": 1,
            "maxLength": 120
          },
          "toIndex": {
            "type": "integer",
            "minimum": 0
          },
          "language": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_languagesAction

    Project languages (lower-case BCP-47 like "de", "pt-br", "zh-tw", "te"). Actions: add {languages:[...]}, remove {language} (copy is kept and returns if re-added), set_default {language} (fallback for missing copy/images), switch {language} (preview language — same as select).

    View tool JSON
    {
      "name": "manage_languages",
      "kind": "act",
      "impl": "imperative",
      "description": "Project languages (lower-case BCP-47 like \"de\", \"pt-br\", \"zh-tw\", \"te\"). Actions: add {languages:[...]}, remove {language} (copy is kept and returns if re-added), set_default {language} (fallback for missing copy/images), switch {language} (preview language — same as select).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "add",
              "remove",
              "set_default",
              "switch"
            ]
          },
          "language": {
            "type": "string"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 60
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    set_copyAction

    Writes store copy (the words, not styling) in bulk. Each entry targets a screen (screenId, or screenIndex + optional deckId), a field (headline, subheadline, or "element:<elementId>" for text badges), a language and text. Languages are added to the project automatically. Copywriting: headline 2–5 words, benefit-first; subheadline 4–10 words that expand it; every screen tells a different part of the story and screen 1 carries the core value proposition. Use \n for manual line breaks. Prefer one call with all entries.

    View tool JSON
    {
      "name": "set_copy",
      "kind": "act",
      "impl": "imperative",
      "description": "Writes store copy (the words, not styling) in bulk. Each entry targets a screen (screenId, or screenIndex + optional deckId), a field (headline, subheadline, or \"element:<elementId>\" for text badges), a language and text. Languages are added to the project automatically. Copywriting: headline 2–5 words, benefit-first; subheadline 4–10 words that expand it; every screen tells a different part of the story and screen 1 carries the core value proposition. Use \\n for manual line breaks. Prefer one call with all entries.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entries": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "screenId": {
                  "type": "string"
                },
                "screenIndex": {
                  "type": "integer",
                  "minimum": 0
                },
                "deckId": {
                  "type": "string"
                },
                "field": {
                  "type": "string",
                  "description": "headline | subheadline | element:<id>"
                },
                "language": {
                  "type": "string"
                },
                "text": {
                  "type": "string",
                  "maxLength": 1000
                }
              },
              "required": [
                "field",
                "language",
                "text"
              ],
              "additionalProperties": false
            },
            "minItems": 1,
            "maxItems": 300
          }
        },
        "required": [
          "entries"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    copy_stringsAction

    Copies headline/subheadline copy from one platform deck to another by screen position (e.g. reuse iPhone copy for Android). Optional languages filter.

    View tool JSON
    {
      "name": "copy_strings",
      "kind": "act",
      "impl": "imperative",
      "description": "Copies headline/subheadline copy from one platform deck to another by screen position (e.g. reuse iPhone copy for Android). Optional languages filter.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "fromDeckId": {
            "type": "string"
          },
          "toDeckId": {
            "type": "string"
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "fromDeckId",
          "toDeckId"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    set_backgroundAction

    Background of the targeted screens: type gradient|solid|image; gradient {kind linear|radial, angle (CSS degrees, 0 = up), stops [{color, position 0-100}]}; gradientPreset (Indigo Rush, Midnight Abyss, Obsidian Plum, Carbon Slate, Steel Blue, Neon Horizon, Electric Surge, Synthwave Dusk, Northern Lights, Deep Forest, Emerald Canopy, Ocean Pulse, Desert Dusk, Ember Glow, Mocha Silk, Golden Hour, Pacific Sunset, Volcanic Dawn, Deep Ocean, Reef Lagoon, Gold Noir, Velvet Noir, Morning Mist, Sage Whisper, Royal Navy, Paper White); solid; imageDataUrl (sets type image); imageFit cover|contain|stretch; imageBlur; overlayColor/overlayOpacity (tint for contrast); noise/noiseIntensity.

    View tool JSON
    {
      "name": "set_background",
      "kind": "act",
      "impl": "imperative",
      "description": "Background of the targeted screens: type gradient|solid|image; gradient {kind linear|radial, angle (CSS degrees, 0 = up), stops [{color, position 0-100}]}; gradientPreset (Indigo Rush, Midnight Abyss, Obsidian Plum, Carbon Slate, Steel Blue, Neon Horizon, Electric Surge, Synthwave Dusk, Northern Lights, Deep Forest, Emerald Canopy, Ocean Pulse, Desert Dusk, Ember Glow, Mocha Silk, Golden Hour, Pacific Sunset, Volcanic Dawn, Deep Ocean, Reef Lagoon, Gold Noir, Velvet Noir, Morning Mist, Sage Whisper, Royal Navy, Paper White); solid; imageDataUrl (sets type image); imageFit cover|contain|stretch; imageBlur; overlayColor/overlayOpacity (tint for contrast); noise/noiseIntensity.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Several screen ids at once.",
            "minItems": 1,
            "maxItems": 200
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "scope": {
            "type": "string",
            "enum": [
              "screen",
              "platform",
              "variant"
            ],
            "description": "screen (default): one screen. platform: every screen in the platform deck. variant: every screen of every platform in the selected variant."
          },
          "type": {
            "type": "string",
            "enum": [
              "gradient",
              "solid",
              "image"
            ]
          },
          "gradient": {
            "type": "object",
            "properties": {
              "kind": {
                "type": "string",
                "enum": [
                  "linear",
                  "radial"
                ]
              },
              "angle": {
                "type": "number",
                "description": "CSS angle in degrees",
                "minimum": 0,
                "maximum": 360
              },
              "stops": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "color": {
                      "type": "string",
                      "pattern": "^#[0-9a-fA-F]{6}$",
                      "description": "Hex color #rrggbb"
                    },
                    "position": {
                      "type": "number",
                      "minimum": 0,
                      "maximum": 100
                    }
                  },
                  "required": [
                    "color",
                    "position"
                  ],
                  "additionalProperties": false
                },
                "minItems": 2,
                "maxItems": 8
              }
            },
            "required": [],
            "additionalProperties": false
          },
          "gradientPreset": {
            "type": "string",
            "enum": [
              "Indigo Rush",
              "Midnight Abyss",
              "Obsidian Plum",
              "Carbon Slate",
              "Steel Blue",
              "Neon Horizon",
              "Electric Surge",
              "Synthwave Dusk",
              "Northern Lights",
              "Deep Forest",
              "Emerald Canopy",
              "Ocean Pulse",
              "Desert Dusk",
              "Ember Glow",
              "Mocha Silk",
              "Golden Hour",
              "Pacific Sunset",
              "Volcanic Dawn",
              "Deep Ocean",
              "Reef Lagoon",
              "Gold Noir",
              "Velvet Noir",
              "Morning Mist",
              "Sage Whisper",
              "Royal Navy",
              "Paper White"
            ]
          },
          "solid": {
            "type": "string",
            "pattern": "^#[0-9a-fA-F]{6}$",
            "description": "Hex color #rrggbb"
          },
          "imageDataUrl": {
            "type": "string",
            "description": "data:image/... background image"
          },
          "imageFit": {
            "type": "string",
            "enum": [
              "cover",
              "contain",
              "stretch"
            ]
          },
          "imageBlur": {
            "type": "number",
            "description": "px",
            "minimum": 0,
            "maximum": 100
          },
          "overlayColor": {
            "type": "string",
            "pattern": "^#[0-9a-fA-F]{6}$",
            "description": "Hex color #rrggbb"
          },
          "overlayOpacity": {
            "type": "number",
            "description": "0-100",
            "minimum": 0,
            "maximum": 100
          },
          "noise": {
            "type": "boolean"
          },
          "noiseIntensity": {
            "type": "number",
            "description": "0-100",
            "minimum": 0,
            "maximum": 100
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    set_deviceAction

    How the screenshot is presented. preset (centered: Centered; bleed-bottom: Bleed bottom; bleed-top: Bleed top; float-center: Float center; tilt-left: Tilt left; tilt-right: Tilt right; perspective: Perspective; float-bottom: Float bottom; side-right: Text left, device right; side-left: Device left, text right) — explicit fields override it. scale (% of canvas width), x/y (50 = centered; <0 or >100 bleeds off-canvas), rotation, perspective, cornerRadius; chrome {style: none|phone|tablet|laptop|monitor|browser|window|tv|watch, color} draws a 2D device frame (phone for mobile, laptop/window/browser for desktop, tv for TV); use3D with model3D iphone|samsung, modelColor and rotation3D {x,y,z}; shadow {...}; border {...} (outline stroke).

    View tool JSON
    {
      "name": "set_device",
      "kind": "act",
      "impl": "imperative",
      "description": "How the screenshot is presented. preset (centered: Centered; bleed-bottom: Bleed bottom; bleed-top: Bleed top; float-center: Float center; tilt-left: Tilt left; tilt-right: Tilt right; perspective: Perspective; float-bottom: Float bottom; side-right: Text left, device right; side-left: Device left, text right) — explicit fields override it. scale (% of canvas width), x/y (50 = centered; <0 or >100 bleeds off-canvas), rotation, perspective, cornerRadius; chrome {style: none|phone|tablet|laptop|monitor|browser|window|tv|watch, color} draws a 2D device frame (phone for mobile, laptop/window/browser for desktop, tv for TV); use3D with model3D iphone|samsung, modelColor and rotation3D {x,y,z}; shadow {...}; border {...} (outline stroke).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Several screen ids at once.",
            "minItems": 1,
            "maxItems": 200
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "scope": {
            "type": "string",
            "enum": [
              "screen",
              "platform",
              "variant"
            ],
            "description": "screen (default): one screen. platform: every screen in the platform deck. variant: every screen of every platform in the selected variant."
          },
          "preset": {
            "type": "string",
            "enum": [
              "centered",
              "bleed-bottom",
              "bleed-top",
              "float-center",
              "tilt-left",
              "tilt-right",
              "perspective",
              "float-bottom",
              "side-right",
              "side-left"
            ]
          },
          "scale": {
            "type": "number",
            "description": "% of canvas width",
            "minimum": 10,
            "maximum": 150
          },
          "x": {
            "type": "number",
            "minimum": -100,
            "maximum": 200
          },
          "y": {
            "type": "number",
            "minimum": -100,
            "maximum": 200
          },
          "rotation": {
            "type": "number",
            "description": "Degrees",
            "minimum": -180,
            "maximum": 180
          },
          "perspective": {
            "type": "number",
            "description": "Shear -50..50",
            "minimum": -50,
            "maximum": 50
          },
          "cornerRadius": {
            "type": "number",
            "minimum": 0,
            "maximum": 200
          },
          "chrome": {
            "type": "object",
            "properties": {
              "style": {
                "type": "string",
                "enum": [
                  "none",
                  "phone",
                  "tablet",
                  "laptop",
                  "monitor",
                  "browser",
                  "window",
                  "tv",
                  "watch"
                ]
              },
              "color": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "Bezel color"
              }
            },
            "required": [],
            "additionalProperties": false
          },
          "use3D": {
            "type": "boolean"
          },
          "model3D": {
            "type": "string",
            "enum": [
              "iphone",
              "samsung"
            ]
          },
          "modelColor": {
            "type": "string",
            "description": "iphone: natural|blue|white|black|desert|deep-purple|gold|red; samsung: gray|black|silverblue|whitesilver|pinkgold|jadegreen|jetblack"
          },
          "rotation3D": {
            "type": "object",
            "properties": {
              "x": {
                "type": "number",
                "minimum": -60,
                "maximum": 60
              },
              "y": {
                "type": "number",
                "minimum": -60,
                "maximum": 60
              },
              "z": {
                "type": "number",
                "minimum": -60,
                "maximum": 60
              }
            },
            "required": [],
            "additionalProperties": false
          },
          "shadow": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "color": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "Hex color #rrggbb"
              },
              "blur": {
                "type": "number",
                "description": "Blur radius in output px",
                "minimum": 0,
                "maximum": 400
              },
              "opacity": {
                "type": "number",
                "description": "0-100",
                "minimum": 0,
                "maximum": 100
              },
              "x": {
                "type": "number",
                "description": "Offset x in output px",
                "minimum": -400,
                "maximum": 400
              },
              "y": {
                "type": "number",
                "description": "Offset y in output px",
                "minimum": -400,
                "maximum": 400
              }
            },
            "required": [],
            "additionalProperties": false
          },
          "border": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean"
              },
              "color": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "Hex color #rrggbb"
              },
              "width": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "opacity": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "required": [],
            "additionalProperties": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    set_text_styleAction

    Typography and layout of the headline/subheadline (content is set with set_copy). headline/subheadline {enabled, font, size (output px), weight, color, opacity, italic, underline, strikethrough, uppercase, letterSpacing}; position top|bottom; align left|center|right (mirrored automatically for RTL languages); offsetY (% from edge); x (block center %) and maxWidth (% of width) for side-by-side layouts; lineHeight (%); gap (% of headline size). With language set, headline/subheadline size, offsetY and lineHeight are stored as an override for that language only (for long German or short CJK copy); resetLanguageOverride removes it.

    View tool JSON
    {
      "name": "set_text_style",
      "kind": "act",
      "impl": "imperative",
      "description": "Typography and layout of the headline/subheadline (content is set with set_copy). headline/subheadline {enabled, font, size (output px), weight, color, opacity, italic, underline, strikethrough, uppercase, letterSpacing}; position top|bottom; align left|center|right (mirrored automatically for RTL languages); offsetY (% from edge); x (block center %) and maxWidth (% of width) for side-by-side layouts; lineHeight (%); gap (% of headline size). With language set, headline/subheadline size, offsetY and lineHeight are stored as an override for that language only (for long German or short CJK copy); resetLanguageOverride removes it.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Several screen ids at once.",
            "minItems": 1,
            "maxItems": 200
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "scope": {
            "type": "string",
            "enum": [
              "screen",
              "platform",
              "variant"
            ],
            "description": "screen (default): one screen. platform: every screen in the platform deck. variant: every screen of every platform in the selected variant."
          },
          "language": {
            "type": "string",
            "description": "Store size/offset/lineHeight as a per-language override"
          },
          "resetLanguageOverride": {
            "type": "boolean"
          },
          "headline": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "Show this line"
              },
              "font": {
                "type": "string",
                "description": "Google Fonts family (e.g. \"Inter\", \"Plus Jakarta Sans\", \"Noto Sans JP\") or a CSS font-family list"
              },
              "size": {
                "type": "number",
                "description": "Font size in output pixels",
                "minimum": 4,
                "maximum": 1000
              },
              "weight": {
                "type": "string",
                "enum": [
                  "300",
                  "400",
                  "500",
                  "600",
                  "700",
                  "800",
                  "900"
                ]
              },
              "color": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "Hex color #rrggbb"
              },
              "opacity": {
                "type": "number",
                "description": "0-100",
                "minimum": 0,
                "maximum": 100
              },
              "italic": {
                "type": "boolean"
              },
              "underline": {
                "type": "boolean"
              },
              "strikethrough": {
                "type": "boolean"
              },
              "uppercase": {
                "type": "boolean"
              },
              "letterSpacing": {
                "type": "number",
                "description": "Letter spacing in 1/100 em (e.g. -2 tight, 5 loose)",
                "minimum": -20,
                "maximum": 50
              }
            },
            "required": [],
            "additionalProperties": false
          },
          "subheadline": {
            "type": "object",
            "properties": {
              "enabled": {
                "type": "boolean",
                "description": "Show this line"
              },
              "font": {
                "type": "string",
                "description": "Google Fonts family (e.g. \"Inter\", \"Plus Jakarta Sans\", \"Noto Sans JP\") or a CSS font-family list"
              },
              "size": {
                "type": "number",
                "description": "Font size in output pixels",
                "minimum": 4,
                "maximum": 1000
              },
              "weight": {
                "type": "string",
                "enum": [
                  "300",
                  "400",
                  "500",
                  "600",
                  "700",
                  "800",
                  "900"
                ]
              },
              "color": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "Hex color #rrggbb"
              },
              "opacity": {
                "type": "number",
                "description": "0-100",
                "minimum": 0,
                "maximum": 100
              },
              "italic": {
                "type": "boolean"
              },
              "underline": {
                "type": "boolean"
              },
              "strikethrough": {
                "type": "boolean"
              },
              "uppercase": {
                "type": "boolean"
              },
              "letterSpacing": {
                "type": "number",
                "description": "Letter spacing in 1/100 em (e.g. -2 tight, 5 loose)",
                "minimum": -20,
                "maximum": 50
              }
            },
            "required": [],
            "additionalProperties": false
          },
          "position": {
            "type": "string",
            "enum": [
              "top",
              "bottom"
            ]
          },
          "align": {
            "type": "string",
            "enum": [
              "left",
              "center",
              "right"
            ]
          },
          "offsetY": {
            "type": "number",
            "description": "% from top/bottom edge",
            "minimum": -50,
            "maximum": 100
          },
          "x": {
            "type": "number",
            "description": "Text block center in % of width",
            "minimum": 0,
            "maximum": 100
          },
          "maxWidth": {
            "type": "number",
            "description": "% of canvas width",
            "minimum": 10,
            "maximum": 100
          },
          "lineHeight": {
            "type": "number",
            "description": "%",
            "minimum": 50,
            "maximum": 300
          },
          "gap": {
            "type": "number",
            "description": "% of headline size",
            "minimum": 0,
            "maximum": 300
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_elementsAction

    Floating overlays on a screen (badges, awards, emoji, icons, logos — not the headline). Actions: add {kind: text|emoji|icon|image, text+language (text), emoji, icon (Lucide name), imageDataUrl (image), properties?}; update {elementId, properties?, text?, language?}; delete {elementId}; reorder {elementId, toIndex} (later = on top). Layers: behind-device, above-device, above-text.

    View tool JSON
    {
      "name": "manage_elements",
      "kind": "act",
      "impl": "imperative",
      "description": "Floating overlays on a screen (badges, awards, emoji, icons, logos — not the headline). Actions: add {kind: text|emoji|icon|image, text+language (text), emoji, icon (Lucide name), imageDataUrl (image), properties?}; update {elementId, properties?, text?, language?}; delete {elementId}; reorder {elementId, toIndex} (later = on top). Layers: behind-device, above-device, above-text.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "add",
              "update",
              "delete",
              "reorder"
            ]
          },
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "elementId": {
            "type": "string"
          },
          "kind": {
            "type": "string",
            "enum": [
              "text",
              "emoji",
              "icon",
              "image"
            ]
          },
          "text": {
            "type": "string",
            "maxLength": 500
          },
          "language": {
            "type": "string"
          },
          "emoji": {
            "type": "string"
          },
          "icon": {
            "type": "string"
          },
          "imageDataUrl": {
            "type": "string"
          },
          "properties": {
            "type": "object",
            "properties": {
              "name": {
                "type": "string"
              },
              "x": {
                "type": "number",
                "description": "Center x in % of canvas width",
                "minimum": -50,
                "maximum": 150
              },
              "y": {
                "type": "number",
                "description": "Center y in % of canvas height",
                "minimum": -50,
                "maximum": 150
              },
              "width": {
                "type": "number",
                "description": "Width in % of canvas width",
                "minimum": 1,
                "maximum": 200
              },
              "rotation": {
                "type": "number",
                "description": "Degrees",
                "minimum": -180,
                "maximum": 180
              },
              "opacity": {
                "type": "number",
                "description": "0-100",
                "minimum": 0,
                "maximum": 100
              },
              "layer": {
                "type": "string",
                "enum": [
                  "behind-device",
                  "above-device",
                  "above-text"
                ]
              },
              "font": {
                "type": "string",
                "description": "text: font family"
              },
              "fontSize": {
                "type": "number",
                "description": "text: size in output px",
                "minimum": 4,
                "maximum": 1000
              },
              "fontWeight": {
                "type": "string",
                "enum": [
                  "300",
                  "400",
                  "500",
                  "600",
                  "700",
                  "800",
                  "900"
                ]
              },
              "color": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "text/icon color"
              },
              "italic": {
                "type": "boolean",
                "description": "text"
              },
              "frame": {
                "type": "string",
                "enum": [
                  "none",
                  "pill",
                  "outline-pill",
                  "laurel-simple",
                  "laurel-simple-star",
                  "laurel-detailed",
                  "laurel-detailed-star",
                  "badge-circle",
                  "badge-ribbon"
                ],
                "description": "text: decorative frame — pill is a filled badge (text sits on frameColor)"
              },
              "frameColor": {
                "type": "string",
                "pattern": "^#[0-9a-fA-F]{6}$",
                "description": "text: frame color"
              },
              "frameScale": {
                "type": "number",
                "description": "text: frame size %",
                "minimum": 20,
                "maximum": 300
              },
              "emoji": {
                "type": "string",
                "description": "emoji: the emoji character"
              },
              "icon": {
                "type": "string",
                "description": "icon: Lucide icon name, e.g. \"star\", \"shield-check\""
              },
              "strokeWidth": {
                "type": "number",
                "description": "icon: stroke width",
                "minimum": 0.5,
                "maximum": 4
              },
              "shadow": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "color": {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$",
                    "description": "Hex color #rrggbb"
                  },
                  "blur": {
                    "type": "number",
                    "description": "Blur radius in output px",
                    "minimum": 0,
                    "maximum": 400
                  },
                  "opacity": {
                    "type": "number",
                    "description": "0-100",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "x": {
                    "type": "number",
                    "description": "Offset x in output px",
                    "minimum": -400,
                    "maximum": 400
                  },
                  "y": {
                    "type": "number",
                    "description": "Offset y in output px",
                    "minimum": -400,
                    "maximum": 400
                  }
                },
                "required": [],
                "additionalProperties": false
              }
            },
            "required": [],
            "additionalProperties": false,
            "description": "Element properties; only those matching the element kind apply."
          },
          "toIndex": {
            "type": "integer",
            "minimum": 0
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    manage_popoutsAction

    Popouts crop a region of the screen's source screenshot and show it enlarged (callouts for key UI). Actions: add {properties?}, update {popoutId, properties}, delete {popoutId}. Crop values are % of the source image; placement is % of the canvas.

    View tool JSON
    {
      "name": "manage_popouts",
      "kind": "act",
      "impl": "imperative",
      "description": "Popouts crop a region of the screen's source screenshot and show it enlarged (callouts for key UI). Actions: add {properties?}, update {popoutId, properties}, delete {popoutId}. Crop values are % of the source image; placement is % of the canvas.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "add",
              "update",
              "delete"
            ]
          },
          "screenId": {
            "type": "string",
            "description": "Screen id. Defaults to the selected screen."
          },
          "screenIndex": {
            "type": "integer",
            "description": "0-based screen position within deckId (or the selected platform); alternative to screenId.",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Platform deck id used with screenIndex or scope. Defaults to the selected platform."
          },
          "popoutId": {
            "type": "string"
          },
          "properties": {
            "type": "object",
            "properties": {
              "cropX": {
                "type": "number",
                "description": "Crop left in % of the source screenshot",
                "minimum": 0,
                "maximum": 99
              },
              "cropY": {
                "type": "number",
                "description": "Crop top in %",
                "minimum": 0,
                "maximum": 99
              },
              "cropWidth": {
                "type": "number",
                "description": "Crop width in %",
                "minimum": 1,
                "maximum": 100
              },
              "cropHeight": {
                "type": "number",
                "description": "Crop height in %",
                "minimum": 1,
                "maximum": 100
              },
              "x": {
                "type": "number",
                "description": "Center x in % of canvas",
                "minimum": -50,
                "maximum": 150
              },
              "y": {
                "type": "number",
                "description": "Center y in % of canvas",
                "minimum": -50,
                "maximum": 150
              },
              "width": {
                "type": "number",
                "description": "Display width in % of canvas width",
                "minimum": 1,
                "maximum": 200
              },
              "rotation": {
                "type": "number",
                "description": "Degrees",
                "minimum": -180,
                "maximum": 180
              },
              "opacity": {
                "type": "number",
                "description": "0-100",
                "minimum": 0,
                "maximum": 100
              },
              "cornerRadius": {
                "type": "number",
                "description": "Corner radius",
                "minimum": 0,
                "maximum": 300
              },
              "shadow": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "color": {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$",
                    "description": "Hex color #rrggbb"
                  },
                  "blur": {
                    "type": "number",
                    "description": "Blur radius in output px",
                    "minimum": 0,
                    "maximum": 400
                  },
                  "opacity": {
                    "type": "number",
                    "description": "0-100",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "x": {
                    "type": "number",
                    "description": "Offset x in output px",
                    "minimum": -400,
                    "maximum": 400
                  },
                  "y": {
                    "type": "number",
                    "description": "Offset y in output px",
                    "minimum": -400,
                    "maximum": 400
                  }
                },
                "required": [],
                "additionalProperties": false
              },
              "border": {
                "type": "object",
                "properties": {
                  "enabled": {
                    "type": "boolean"
                  },
                  "color": {
                    "type": "string",
                    "pattern": "^#[0-9a-fA-F]{6}$",
                    "description": "Hex color #rrggbb"
                  },
                  "width": {
                    "type": "number",
                    "description": "px",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "opacity": {
                    "type": "number",
                    "description": "0-100",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "required": [],
                "additionalProperties": false
              }
            },
            "required": [],
            "additionalProperties": false
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    transfer_styleAction

    Copies design from a source screen to targets — across screens, platforms or variants. Copy (words) and screenshots stay with each target; pixel values rescale when sizes differ. parts selects background/device/text/elements (all by default). Targets: targetScreenIds, or targetScope platform (source deck) | variant (every deck in source variant) | project (everything).

    View tool JSON
    {
      "name": "transfer_style",
      "kind": "act",
      "impl": "imperative",
      "description": "Copies design from a source screen to targets — across screens, platforms or variants. Copy (words) and screenshots stay with each target; pixel values rescale when sizes differ. parts selects background/device/text/elements (all by default). Targets: targetScreenIds, or targetScope platform (source deck) | variant (every deck in source variant) | project (everything).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "sourceScreenId": {
            "type": "string"
          },
          "sourceScreenIndex": {
            "type": "integer",
            "minimum": 0
          },
          "deckId": {
            "type": "string",
            "description": "Deck for sourceScreenIndex"
          },
          "targetScreenIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "maxItems": 500
          },
          "targetScope": {
            "type": "string",
            "enum": [
              "platform",
              "variant",
              "project"
            ]
          },
          "parts": {
            "type": "object",
            "properties": {
              "background": {
                "type": "boolean"
              },
              "device": {
                "type": "boolean"
              },
              "text": {
                "type": "boolean"
              },
              "elements": {
                "type": "boolean"
              }
            },
            "required": [],
            "additionalProperties": false
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    exportAction

    Renders full-resolution store images. delivery "return" (default) returns data URLs to save as files (max 24 per call — narrow with screenIds/deckIds/languages). delivery "download" builds a ZIP in the browser for the user (variant/platform-WxH/lang/NN-name.png). Defaults: selected platform deck, current language, PNG. JPEG is flattened (stores reject alpha).

    View tool JSON
    {
      "name": "export",
      "kind": "act",
      "impl": "imperative",
      "description": "Renders full-resolution store images. delivery \"return\" (default) returns data URLs to save as files (max 24 per call — narrow with screenIds/deckIds/languages). delivery \"download\" builds a ZIP in the browser for the user (variant/platform-WxH/lang/NN-name.png). Defaults: selected platform deck, current language, PNG. JPEG is flattened (stores reject alpha).",
      "inputSchema": {
        "type": "object",
        "properties": {
          "variantIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "deckIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "screenIds": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "languages": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "allLanguages": {
            "type": "boolean",
            "description": "Every project language"
          },
          "allPlatforms": {
            "type": "boolean",
            "description": "Every deck of the selected variant(s)"
          },
          "format": {
            "type": "string",
            "enum": [
              "png",
              "jpeg"
            ]
          },
          "delivery": {
            "type": "string",
            "enum": [
              "return",
              "download"
            ]
          }
        },
        "required": [],
        "additionalProperties": false
      },
      "page": "/editor"
    }
    historyAnswer

    Undo or redo document changes (yours and the user's). steps defaults to 1.

    View tool JSON
    {
      "name": "history",
      "kind": "answer",
      "impl": "imperative",
      "description": "Undo or redo document changes (yours and the user's). steps defaults to 1.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "undo",
              "redo"
            ]
          },
          "steps": {
            "type": "integer",
            "minimum": 1,
            "maximum": 50
          }
        },
        "required": [
          "action"
        ],
        "additionalProperties": false
      },
      "page": "/editor"
    }