Skip to main content
Glama

Create a mug design draft

create_design_link
Read-onlyIdempotent

Turns a design description into a link that opens the LivaGlow designer with the finished draft (texts, cliparts, background, photo placeholder, optional template). Nothing is stored or ordered: the customer opens the link, checks the 3D preview, uploads their photo if a placeholder is present, and orders. Texts are placed automatically (centred column) unless x/y are given; with a template, texts replace the template's text slots in order. Photos cannot be passed; use photo:{shape} to reserve a placeholder. Call get_design_options first for valid fonts, cliparts and templates.

Input Schema

NameRequiredDescriptionDefault
itemsNoTexts and cliparts in top-to-bottom order
photoNoReserve a photo placeholder the customer fills in the designer
layoutNoColumn for automatically placed items (default: opposite the photo, else center)
templateNoTemplate id from get_design_options (optional)
backgroundNoBackground preset id (e.g. "creme", "sonnenuntergang") or {kind:"solid",color:"#rrggbb"} or {kind:"gradient",from:"#rrggbb",to:"#rrggbb",angle:135}

Output Schema

NameRequiredDescriptionDefault
urlYesDesigner link with the draft
nextNo
priceYes
localeYes
summaryYes
warningsYes
previewUrlYesPNG of the flat print area
previewNoteNo
elementCountNo
hasPhotoPlaceholderYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / items / items / oneOf
      Previous value: -[
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "arc": {
      -        "description": "Curve the text: negative = arch down, positive = arch up",
      -        "maximum": 100,
      -        "minimum": -100,
      -        "type": "integer"
      -      },
      -      "bold": {
      -        "type": "boolean"
      -      },
      -      "color": {
      -        "description": "#rrggbb",
      -        "type": "string"
      -      },
      -      "font": {
      -        "enum": [
      -          "Anton",
      -          "Arial",
      -          "Bangers",
      -          "Caveat",
      -          "Courier New",
      -          "Dancing Script",
      -          "Georgia",
      -          "Impact",
      -          "Lobster",
      -          "Pacifico",
      -          "Roboto Slab",
      -          "Verdana"
      -        ],
      -        "type": "string"
      -      },
      -      "italic": {
      -        "type": "boolean"
      -      },
      -      "position": {
      -        "enum": [
      -          "left",
      -          "center",
      -          "right"
      -        ],
      -        "type": "string"
      -      },
      -      "size": {
      -        "description": "Font size in print px (auto if omitted)",
      -        "maximum": 400,
      -        "minimum": 40,
      -        "type": "integer"
      -      },
      -      "text": {
      -        "description": "Up to 4 lines (\\n). Emojis allowed.",
      -        "maxLength": 120,
      -        "type": "string"
      -      },
      -      "type": {
      -        "const": "text",
      -        "type": "string"
      -      },
      -      "x": {
      -        "maximum": 2362,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "y": {
      -        "maximum": 1063,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "text"
      -    ],
      -    "type": "object"
      -  },
      -  {
      -    "additionalProperties": false,
      -    "properties": {
      -      "color": {
      -        "description": "#rrggbb",
      -        "type": "string"
      -      },
      -      "id": {
      -        "description": "Clipart id from get_design_options",
      -        "type": "string"
      -      },
      -      "position": {
      -        "enum": [
      -          "left",
      -          "center",
      -          "right"
      -        ],
      -        "type": "string"
      -      },
      -      "size": {
      -        "maximum": 900,
      -        "minimum": 100,
      -        "type": "integer"
      -      },
      -      "type": {
      -        "const": "clipart",
      -        "type": "string"
      -      },
      -      "x": {
      -        "maximum": 2362,
      -        "minimum": 0,
      -        "type": "integer"
      -      },
      -      "y": {
      -        "maximum": 1063,
      -        "minimum": 0,
      -        "type": "integer"
      -      }
      -    },
      -    "required": [
      -      "type",
      -      "id"
      -    ],
      -    "type": "object"
      -  }
      -]New value: +[
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "arc": {
      +        "description": "Curve the text: negative = arch down, positive = arch up",
      +        "maximum": 100,
      +        "minimum": -100,
      +        "type": "integer"
      +      },
      +      "bold": {
      +        "type": "boolean"
      +      },
      +      "color": {
      +        "description": "#rrggbb",
      +        "type": "string"
      +      },
      +      "font": {
      +        "enum": [
      +          "Anton",
      +          "Arial",
      +          "Bangers",
      +          "Caveat",
      +          "Courier New",
      +          "Dancing Script",
      +          "Georgia",
      +          "Impact",
      +          "Lobster",
      +          "Pacifico",
      +          "Roboto Slab",
      +          "Verdana"
      +        ],
      +        "type": "string"
      +      },
      +      "italic": {
      +        "type": "boolean"
      +      },
      +      "position": {
      +        "enum": [
      +          "left",
      +          "center",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "size": {
      +        "description": "Font size in print px (auto if omitted)",
      +        "maximum": 400,
      +        "minimum": 40,
      +        "type": "integer"
      +      },
      +      "text": {
      +        "description": "Up to 4 lines (\\n). Emojis allowed.",
      +        "maxLength": 120,
      +        "type": "string"
      +      },
      +      "type": {
      +        "const": "text",
      +        "type": "string"
      +      },
      +      "x": {
      +        "maximum": 2362,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "y": {
      +        "maximum": 1098,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "text"
      +    ],
      +    "type": "object"
      +  },
      +  {
      +    "additionalProperties": false,
      +    "properties": {
      +      "color": {
      +        "description": "#rrggbb",
      +        "type": "string"
      +      },
      +      "id": {
      +        "description": "Clipart id from get_design_options",
      +        "type": "string"
      +      },
      +      "position": {
      +        "enum": [
      +          "left",
      +          "center",
      +          "right"
      +        ],
      +        "type": "string"
      +      },
      +      "size": {
      +        "maximum": 900,
      +        "minimum": 100,
      +        "type": "integer"
      +      },
      +      "type": {
      +        "const": "clipart",
      +        "type": "string"
      +      },
      +      "x": {
      +        "maximum": 2362,
      +        "minimum": 0,
      +        "type": "integer"
      +      },
      +      "y": {
      +        "maximum": 1098,
      +        "minimum": 0,
      +        "type": "integer"
      +      }
      +    },
      +    "required": [
      +      "type",
      +      "id"
      +    ],
      +    "type": "object"
      +  }
      +]
  2. Changed3 schema fields changed
    • addedOutput schema / properties / price / properties / shipping / description
      Added value: +"Shipping of the default method below the free-shipping threshold"
    • addedOutput schema / properties / price / properties / shippingAboveFreeThreshold
      Added value: +{
      +  "type": "number"
      +}
    • addedOutput schema / properties / price / properties / shippingMethodLabel
      Added value: +{
      +  "type": "string"
      +}
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, and the description reinforces this with a crucial side-effect disclosure: 'Nothing is stored or ordered.' It further reveals non-obvious behavioral rules — photos cannot be passed in and must be reserved via photo:{shape}, auto-placement is centered unless x/y are supplied, and template mode replaces text slots in order.

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

Conciseness4/5

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

Front-loaded with the core outcome, then behavioral rules, then the prerequisite call. The middle sentences are dense with comma-lists, but every clause carries actionable information; only minor tightening is possible.

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

Completeness5/5

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

An output schema exists, so return-value explanation is unnecessary. For a 5-parameter, no-required-params builder tool, the description covers the artifact produced, the side-effect profile, placement defaults, template behavior, photo handling, and tool ordering — everything an agent needs to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema does not carry: the auto-placement rule for omitted x/y, the template slot-substitution behavior, and the fact that photo accepts only a placeholder reservation rather than an image. It stops short of explaining item ordering beyond what the schema's maxItems/description already says.

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

Purpose5/5

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

States a specific verb and artifact: turning a design description into a link that opens the LivaGlow designer with a finished draft. It enumerates the draft's parts (texts, cliparts, background, photo placeholder, template) and clearly positions itself apart from get_design_options, which it points to as a prerequisite.

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

Usage Guidelines4/5

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

Gives an explicit prerequisite ('Call get_design_options first for valid fonts, cliparts and templates') and describes the downstream workflow (customer opens link, checks 3D preview, uploads photo, orders). It does not, however, name an alternative tool or state a when-not-to-use condition, since none of the sibling tools overlap.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources