← WebMCP Directory

logo.allsvgicons.com

logo.allsvgicons.com

live Unverified (seed import) Productivity & Business 9 tools imperative implementation

Free SVG logo editor with WebMCP tools an AI agent can drive directly, built for the OpenAI WebMCP Challenge.

First seen 2026-11-05 · Last seen 2026-11-05 · Source: webmcp.com

Answer 4 · Act 4 · Transact 1 · Score: Not yet scored

Tool inspector

update_logo_maker_state

act imperative

Smart partial editor updates: modifies background, applies authentic brand presets' background/style only, no icon layer (e.g. "instagram", "facebook", "spotify", "stripe", "linear", "supabase"; see applyBrand's own description), toggles safe zone keylines, adds new layers, updates existing layers (by ID or 0-based index), removes layers, clears layers, randomizes the whole design, or updates selection without needing to re-send the whole state. updateLayers patches only the fields you send on the targeted layer: every other field, including fill/stroke colors, is left untouched; if a targeted update doesn't match any layer, it's listed in the response's unmatchedUpdates field instead of silently doing nothing, and an invalid enum value (e.g. fillType outside "solid"/"linear"/"radial", "gradient" is not a value) is reported in the response's fieldWarnings field instead of silently being dropped. Top-level args this tool doesn't recognize (e.g. sending get_logo_maker_state's "layers" array here instead of addLayers/updateLayers) are listed in the response's unrecognizedArgs field rather than silently no-opping. The response also includes safeZoneViolations and lowContrastLayers (same checks as get_logo_maker_state) so you can check and fix them without an extra round trip. This is the tool to use for toggling overwriteFill/overwriteStroke on or off without losing a previously set color, or any other incremental tweak; use replace_logo_maker_state only when loading a complete logo from scratch. For a gradient icon set fillType: "linear" or "radial" with fillStops (and overwriteFill: true) rather than writing customSvg. For a non-square shape (a band, a bar, a stretched mark) set scaleY on the layer instead of composing several layers. For a two-tone or four-colour block background set background.type: "split" with splitLayout and gradientColors. A centered layer's on-canvas footprint is roughly 200 * scale square; to stay inside the safe-zone circle (radius = canvasS…

Input schema

PropertyTypeRequiredDescription
canvasSize object no Partial canvas size update.
background object no Logo background configuration. Supported types: solid, gradient, radial, split.
applyBrand string no Apply an authentic real-world brand preset's background/style only (color, gradient, shape, pattern, border radius) (e.g. "instagram", "facebook", "spotify", "duolingo", "youtube", "whatsapp", "discord", "stripe", "linear", "supabase", "raycast", "netflix", "apple", "github", "google", "figma", "airbnb", "twitch", "slack"). Does not add, remove, or recolor any icon layer, existing layers are left exactly as they are: follow it with updateLayers to set the icon/fill yourself, or use load_logo_maker_share's brand argument instead if you want the complete pre-built brand logo (background and matching icon layer) loaded in one step.
showSafeZone boolean no Toggle Android & iOS app icon safe zone keylines overlay.
showDesignGrid boolean no Show/hide the Apple/iOS icon keyline alignment grid overlay.
safeZoneRatio number no Inner safe-zone circle diameter ratio (default 0.611, Android adaptive icons strict spec). Fixed outer guide at 75% is always shown alongside it.
addLayers array no New layers to append on top of existing layers. Missing fields default to centered position and standard styles.
updateLayers array no Modifications to existing layers (targeted by id or 0-based index).
removeLayers array no Array of layer IDs or 0-based index strings to remove.
clearLayers boolean no If true, clears all current layers before applying addLayers.
selectedLayerId string no Layer ID to select, or empty string / null to deselect all layers.
randomize boolean no If true, replaces the current layers and background with a freshly randomized design (matched icon, palette, and shape). Overrides addLayers/updateLayers/removeLayers/clearLayers when both are present. Canvas size is left as-is.
randomKeyword string no Optional theme keyword for randomize (e.g. "tech", "nature", "star", "animal", "code"). Ignored unless randomize is true.
includeSvg boolean no If true, returns rendered SVG string in response.
Raw JSON schema
{
  "type": "object",
  "properties": {
    "canvasSize": {
      "type": "object",
      "description": "Partial canvas size update.",
      "properties": {
        "width": {
          "type": "number",
          "description": "Canvas width in pixels."
        },
        "height": {
          "type": "number",
          "description": "Canvas height in pixels."
        }
      }
    },
    "background": {
      "type": "object",
      "description": "Logo background configuration. Supported types: solid, gradient, radial, split.",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "solid",
            "gradient",
            "radial",
            "split"
          ]
        },
        "splitLayout": {
          "type": "string",
          "enum": [
            "halves",
            "thirds",
            "quadrant",
            "pinwheel"
          ],
          "description": "Hard-edged colour blocks, used when type is \"split\". Colours come from gradientColors (halves 2, thirds 3, quadrant and pinwheel 4, cycled if fewer). halves and thirds run left to right, or top to bottom when gradientDirection is \"to bottom\". quadrant order: top-left, top-right, bottom-right, bottom-left. pinwheel order: top, right, bottom, left. Use this instead of stacking oversized square layers."
        },
        "solidColor": {
          "type": "string",
          "description": "Hex or CSS color for solid background."
        },
        "gradientColors": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "Array of colors for gradient/radial background."
        },
        "gradientPositions": {
          "type": "array",
          "items": {
            "type": "number"
          },
          "description": "Array of stop percentages (0 to 100) for each color."
        },
        "gradientDirection": {
          "type": "string",
          "description": "CSS gradient direction, e.g. \"to right\", \"to bottom right\", \"to top\"."
        },
        "noise": {
          "type": "number",
          "description": "Noise texture intensity from 0 to 1."
        },
        "borderRadius": {
          "type": "number",
          "description": "Corner radius in pixels, clamped to >=0 (no fixed max). Only affects shape: \"rectangle\". Ignored when shape is \"circle\" or \"squircle\": those always use a full round/squircle clip regardless of this value."
        },
        "pattern": {
          "type": "string",
          "enum": [
            "none",
            "grid",
            "dots",
            "checker",
            "lines",
            "diagonal",
            "circles",
            "zigzag"
          ],
          "description": "Pattern texture overlay."
        },
        "patternColor": {
          "type": "string",
          "description": "Pattern overlay color."
        },
        "patternOpacity": {
          "type": "number",
          "description": "Pattern overlay opacity (0 to 1)."
        },
        "shape": {
          "type": "string",
          "enum": [
            "rectangle",
            "circle",
            "squircle"
          ],
          "description": "Canvas clipping shape."
        },
        "radialCenterX": {
          "type": "number",
          "description": "Radial gradient center X % (0 to 100)."
        },
        "radialCenterY": {
          "type": "number",
          "description": "Radial gradient center Y % (0 to 100)."
        },
        "radialRadius": {
          "type": "number",
          "description": "Radial gradient radius % (0 to 100)."
        },
        "borderWidth": {
          "type": "number",
          "description": "Border outline width in pixels (0 to 24)."
        },
        "borderColor": {
          "type": "string",
          "description": "Border outline hex/CSS color."
        },
        "borderStyle": {
          "type": "string",
          "enum": [
            "solid",
            "dashed",
            "dotted",
            "double"
          ],
          "description": "Border outline style."
        }
      }
    },
    "applyBrand": {
      "type": "string",
      "description": "Apply an authentic real-world brand preset's background/style only (color, gradient, shape, pattern, border radius) (e.g. \"instagram\", \"facebook\", \"spotify\", \"duolingo\", \"youtube\", \"whatsapp\", \"discord\", \"stripe\", \"linear\", \"supabase\", \"raycast\", \"netflix\", \"apple\", \"github\", \"google\", \"figma\", \"airbnb\", \"twitch\", \"slack\"). Does not add, remove, or recolor any icon layer, existing layers are left exactly as they are: follow it with updateLayers to set the icon/fill yourself, or use load_logo_maker_share's brand argument instead if you want the complete pre-built brand logo (background and matching icon layer) loaded in one step."
    },
    "showSafeZone": {
      "type": "boolean",
      "description": "Toggle Android & iOS app icon safe zone keylines overlay."
    },
    "showDesignGrid": {
      "type": "boolean",
      "description": "Show/hide the Apple/iOS icon keyline alignment grid overlay."
    },
    "safeZoneRatio": {
      "type": "number",
      "description": "Inner safe-zone circle diameter ratio (default 0.611, Android adaptive icons strict spec). Fixed outer guide at 75% is always shown alongside it."
    },
    "addLayers": {
      "type": "array",
      "description": "New layers to append on top of existing layers. Missing fields default to centered position and standard styles.",
      "items": {
        "type": "object",
        "description": "Logo layer object.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Optional layer ID (UUID generated if omitted)."
          },
          "iconName": {
            "type": "string",
            "description": "Icon identifier in pack:name format (e.g. \"lucide:sparkles\", \"solar:shield-bold\", \"ph:coffee-fill\")."
          },
          "url": {
            "type": "string",
            "description": "Direct SVG URL. If omitted, resolved from iconName."
          },
          "customSvg": {
            "type": "string",
            "description": "Raw SVG markup for a custom shape layer. When set, this overrides icon-based rendering for the layer: iconName still doubles as a label/identity. Pass an empty string to clear it back to icon-based rendering."
          },
          "x": {
            "type": "number",
            "description": "Horizontal position as a percentage (0-100) of canvas width, from the left edge. 50 is always center, on any canvas size. Omit to default to 50 (center)."
          },
          "y": {
            "type": "number",
            "description": "Vertical position as a percentage (0-100) of canvas height, from the top edge. 50 is always center, on any canvas size. Omit to default to 50 (center)."
          },
          "scale": {
            "type": "number",
            "description": "Scale multiplier: 1 draws the icon in a 200 px box on the canvas (default 1.6 = 320 px, canvas is 512 px). Check bounds in get_logo_maker_state after setting it."
          },
          "scaleY": {
            "type": "number",
            "description": "Vertical scale multiplier. Omit for a square box (same as scale). Use scale 3 and scaleY 0.4 for a colour band, for example. Pass null to go back to square."
          },
          "rotation": {
            "type": "number",
            "description": "Rotation angle in degrees (-180 to 180)."
          },
          "fill": {
            "type": "string",
            "description": "Fill hex/CSS color or \"none\"."
          },
          "fillType": {
            "type": "string",
            "enum": [
              "solid",
              "linear",
              "radial"
            ],
            "description": "Fill paint type. \"linear\" or \"radial\" use fillStops and ignore fill. Needs overwriteFill: true. Use this instead of customSvg for a gradient icon."
          },
          "fillStops": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Gradient colours in order (2 or more), e.g. [\"#ff6b6b\", \"#feca57\"]."
          },
          "fillPositions": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Stop offsets in percent, one per colour. Omit for evenly spaced."
          },
          "fillAngle": {
            "type": "number",
            "description": "Linear gradient angle in degrees, CSS convention: 0 = to top, 90 = to right (default)."
          },
          "stroke": {
            "type": "string",
            "description": "Stroke hex/CSS color or \"none\"."
          },
          "strokeWidth": {
            "type": "number",
            "description": "Stroke width override in pixels."
          },
          "strokeDasharray": {
            "type": "string",
            "description": "Stroke dash pattern, e.g. \"none\", \"6 4\", \"2 4\"."
          },
          "overwriteFill": {
            "type": "boolean",
            "description": "Force overwrite icon original fill. Only visible if the icon itself uses a fill paint: many icon packs (e.g. Lucide) are stroke-only outline icons where a fill override has no visible effect; if the color doesn't seem to apply, try overwriteStroke instead."
          },
          "overwriteStroke": {
            "type": "boolean",
            "description": "Force overwrite icon original stroke. Only visible if the icon itself uses a stroke paint: many icon packs are solid fill-only icons with no stroke where a stroke override has no visible effect; if the color doesn't seem to apply, try overwriteFill instead."
          },
          "opacity": {
            "type": "number",
            "description": "Layer opacity from 0 to 1."
          },
          "blendMode": {
            "type": "string",
            "enum": [
              "normal",
              "multiply",
              "screen",
              "overlay",
              "darken",
              "lighten",
              "color-dodge",
              "color-burn",
              "hard-light",
              "soft-light",
              "difference",
              "exclusion"
            ],
            "description": "CSS mix-blend-mode for how this layer's pixels combine with what's beneath it."
          },
          "animationType": {
            "type": "string",
            "enum": [
              "none",
              "rotate",
              "float",
              "pulse",
              "sway",
              "custom"
            ],
            "description": "[Experimental] Looping CSS animation for this layer. Niche feature, most logos should stay static: only set this when the user explicitly asks for motion."
          },
          "animationDuration": {
            "type": "number",
            "description": "Animation duration in seconds."
          },
          "animationTarget": {
            "type": "string",
            "description": "CSS selector matched against the icon's own SVG children (e.g. \"path:nth-of-type(2)\", \"circle\") to animate only that part instead of the whole icon. Omit to animate the whole icon."
          },
          "animationCustomKeyframes": {
            "type": "string",
            "description": "Raw CSS @keyframes stops body, without the @keyframes wrapper. Only used when animationType is \"custom\" (e.g. \"0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); }\")."
          },
          "visible": {
            "type": "boolean",
            "description": "Layer visibility."
          },
          "locked": {
            "type": "boolean",
            "description": "Lock layer from canvas drag/selection."
          },
          "shadowColor": {
            "type": "string",
            "description": "Drop shadow color."
          },
          "shadowBlur": {
            "type": "number",
            "description": "Drop shadow blur radius in pixels (0 for hard shadow)."
          },
          "shadowOffsetX": {
            "type": "number",
            "description": "Drop shadow horizontal offset."
          },
          "shadowOffsetY": {
            "type": "number",
            "description": "Drop shadow vertical offset."
          },
          "shadowOpacity": {
            "type": "number",
            "description": "Drop shadow opacity from 0 to 1."
          }
        },
        "required": [
          "iconName"
        ]
      }
    },
    "updateLayers": {
      "type": "array",
      "description": "Modifications to existing layers (targeted by id or 0-based index).",
      "items": {
        "type": "object",
        "description": "Partial layer updates. Match the target layer by id or 0-based index.",
        "properties": {
          "id": {
            "type": "string",
            "description": "Target layer ID."
          },
          "index": {
            "type": "number",
            "description": "Target layer 0-based index (0 = bottom-most layer)."
          },
          "iconName": {
            "type": "string",
            "description": "Replace icon with a new pack:icon name."
          },
          "url": {
            "type": "string",
            "description": "Direct SVG URL override."
          },
          "customSvg": {
            "type": "string",
            "description": "Raw SVG markup for a custom shape layer. When set, this overrides icon-based rendering for the layer: iconName still doubles as a label/identity. Pass an empty string to clear it back to icon-based rendering."
          },
          "x": {
            "type": "number",
            "description": "Horizontal position as a percentage (0-100) of canvas width, from the left edge. 50 is always center, on any canvas size. Omit to default to 50 (center)."
          },
          "y": {
            "type": "number",
            "description": "Vertical position as a percentage (0-100) of canvas height, from the top edge. 50 is always center, on any canvas size. Omit to default to 50 (center)."
          },
          "scale": {
            "type": "number",
            "description": "Scale multiplier: 1 draws the icon in a 200 px box on the canvas (canvas is 512 px)."
          },
          "scaleY": {
            "type": "number",
            "description": "Vertical scale multiplier. Omit for a square box (same as scale). Use scale 3 and scaleY 0.4 for a colour band, for example. Pass null to go back to square."
          },
          "rotation": {
            "type": "number",
            "description": "Rotation angle in degrees."
          },
          "fill": {
            "type": "string",
            "description": "Fill hex/CSS color or \"none\"."
          },
          "fillType": {
            "type": "string",
            "enum": [
              "solid",
              "linear",
              "radial"
            ],
            "description": "Fill paint type. \"linear\" or \"radial\" use fillStops and ignore fill. Needs overwriteFill: true. Use this instead of customSvg for a gradient icon."
          },
          "fillStops": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Gradient colours in order (2 or more), e.g. [\"#ff6b6b\", \"#feca57\"]."
          },
          "fillPositions": {
            "type": "array",
            "items": {
              "type": "number"
            },
            "description": "Stop offsets in percent, one per colour. Omit for evenly spaced."
          },
          "fillAngle": {
            "type": "number",
            "description": "Linear gradient angle in degrees, CSS convention: 0 = to top, 90 = to right (default)."
          },
          "stroke": {
            "type": "string",
            "description": "Stroke hex/CSS color or \"none\"."
          },
          "strokeWidth": {
            "type": "number",
            "description": "Stroke width in pixels."
          },
          "strokeDasharray": {
            "type": "string",
            "description": "Stroke dash pattern, e.g. \"none\", \"6 4\", \"2 4\"."
          },
          "overwriteFill": {
            "type": "boolean",
            "description": "Force overwrite fill. Only visible if the icon itself uses a fill paint: many icon packs (e.g. Lucide) are stroke-only outline icons where a fill override has no visible effect; if the color doesn't seem to apply, try overwriteStroke instead."
          },
          "overwriteStroke": {
            "type": "boolean",
            "description": "Force overwrite stroke. Only visible if the icon itself uses a stroke paint: many icon packs are solid fill-only icons with no stroke where a stroke override has no visible effect; if the color doesn't seem to apply, try overwriteFill instead."
          },
          "opacity": {
            "type": "number",
            "description": "Opacity from 0 to 1."
          },
          "blendMode": {
            "type": "string",
            "enum": [
              "normal",
              "multiply",
              "screen",
              "overlay",
              "darken",
              "lighten",
              "color-dodge",
              "color-burn",
              "hard-light",
              "soft-light",
              "difference",
              "exclusion"
            ],
            "description": "CSS mix-blend-mode for how this layer's pixels combine with what's beneath it."
          },
          "animationType": {
            "type": "string",
            "enum": [
              "none",
              "rotate",
              "float",
              "pulse",
              "sway",
              "custom"
            ],
            "description": "[Experimental] Looping CSS animation for this layer. Niche feature, most logos should stay static: only set this when the user explicitly asks for motion."
          },
          "animationDuration": {
            "type": "number",
            "description": "Animation duration in seconds."
          },
          "animationTarget": {
            "type": "string",
            "description": "CSS selector matched against the icon's own SVG children (e.g. \"path:nth-of-type(2)\", \"circle\") to animate only that part instead of the whole icon. Omit to animate the whole icon."
          },
          "animationCustomKeyframes": {
            "type": "string",
            "description": "Raw CSS @keyframes stops body, without the @keyframes wrapper. Only used when animationType is \"custom\" (e.g. \"0% { transform: scale(1); } 50% { transform: scale(1.2); } 100% { transform: scale(1); }\"). Pass an empty string to clear it."
          },
          "visible": {
            "type": "boolean",
            "description": "Layer visibility."
          },
          "locked": {
            "type": "boolean",
            "description": "Layer lock status."
          },
          "shadowColor": {
            "type": "string",
            "description": "Drop shadow color."
          },
          "shadowBlur": {
            "type": "number",
            "description": "Drop shadow blur radius (0 for hard shadow)."
          },
          "shadowOffsetX": {
            "type": "number",
            "description": "Drop shadow X offset."
          },
          "shadowOffsetY": {
            "type": "number",
            "description": "Drop shadow Y offset."
          },
          "shadowOpacity": {
            "type": "number",
            "description": "Drop shadow opacity from 0 to 1."
          }
        }
      }
    },
    "removeLayers": {
      "type": "array",
      "description": "Array of layer IDs or 0-based index strings to remove.",
      "items": {
        "type": "string"
      }
    },
    "clearLayers": {
      "type": "boolean",
      "description": "If true, clears all current layers before applying addLayers."
    },
    "selectedLayerId": {
      "type": "string",
      "description": "Layer ID to select, or empty string / null to deselect all layers."
    },
    "randomize": {
      "type": "boolean",
      "description": "If true, replaces the current layers and background with a freshly randomized design (matched icon, palette, and shape). Overrides addLayers/updateLayers/removeLayers/clearLayers when both are present. Canvas size is left as-is."
    },
    "randomKeyword": {
      "type": "string",
      "description": "Optional theme keyword for randomize (e.g. \"tech\", \"nature\", \"star\", \"animal\", \"code\"). Ignored unless randomize is true."
    },
    "includeSvg": {
      "type": "boolean",
      "description": "If true, returns rendered SVG string in response."
    }
  }
}

Similar websites

econsor.de

econsor.de

German digital agency building portals, e-commerce sites and online marketing, combining strategy, design and AI to grow clients' visibility and customer base.

live Unverified Productivity & Business Transact tools
143 tools A0 / Act142 / T1 Not yet scored Seen 2026-11-05
econsor_click_search econsor_click_image econsor_click_menu econsor_click_burger_menu_icon econsor_click_previous_button
Inspect tools
inkframe-eta.vercel.app

inkframe-eta.vercel.app

Browser-native Elah video editor for 9:16 and 16:9 exports

live Unverified Productivity & Business Transact tools
87 tools A12 / Act71 / T4 Not yet scored Seen 2026-11-05
get_capabilities list_templates navigate_workspace open_template editor_inspect_video_moments
Inspect tools
agentdesk-demo.vercel.app

agentdesk-demo.vercel.app

Meridian Ops

live Unverified Productivity & Business Transact tools
83 tools A43 / Act24 / T16 Not yet scored Seen 2026-11-05
find_capabilities invoke_capability get_context get_action_status search_customers
Inspect tools
eworker.ca

eworker.ca

E-Worker is business infrastructure powered by AI, with focused apps and connected business work.

live Unverified Productivity & Business
73 tools A10 / Act63 / T0 Not yet scored Seen 2026-11-05
eworker_site_status eworker_list_apps eworker_resolve_app eworker_open_app ewdoc_status
Inspect tools

Related on Influzer