Skip to main content
Glama

Roastify Get Design Text

roastify_get_design_text

List the editable text layers of a stored design — the fields you can change.

Returns each text layer's id, current text, chars (its length), font, align, box geometry (fontSize, width, height), and z (paint-order index in the top-level elements array) — but NOT the design's images, so it stays small enough to reason over in a conversation. Each layer's current text is its own label: infer its role (product name, tagline, story, recipe, tasting notes, …) from the words it holds. The same name often appears in several layers and inside longer blurbs; change every id that should carry it.

Also returns sheet (the overall design extent), panels (the box's panel columns — front/back/left/right — recovered from the dieline, each with bounds; empty for single-face products like Tubes, where placement uses sheet instead), and a real face per layer/element (which panel its x-centre sits on, not the constant "sheet"; when panels is empty, layers keep their native faceId such as "wrap"). And elements — the NON-text elements (images, shapes, rules), each with id, type, name, bounds, z, and its fill/stroke colours — so a roast scale can be audited (a filled dot has a dark fill, an empty one none) and set with roastify_move_elements. fonts lists the families loaded on the design plus any family a layer already uses — pick from it when setting fontFamily via move_elements. Read those before judging the design: a header with no text value beneath it is NOT necessarily a defect — the value may be a graphic in elements (e.g. a five-dot roast scale under a ROAST header), and it tells you where NOT to place new text. Roastify's migrated format carries no visibility flag, so a layer that exists may still not print — do not report a missing value as a production error.

Geometry: each layer's x/y is its top-left corner in design units (the sheet origin is its top-left). width/height are MEASURED text bounds, not fixed frames — text does not clip, it grows, so a revision that holds the line count and longest-line length keeps the footprint. z is paint order (lower draws first / behind); change it with roastify_move_elements {"id", "z": "front"|"back"|N}.

Two things to respect:

  • A stash label states INTENT, not content: a design labeled for one coffee may still hold a donor template's words. Trust these layers, not the label.

  • width is the fixed wrap frame; height is the grown extent and re-measures when you edit the text. Keep each replacement within roughly ±10% of the layer's chars; longer copy grows the box downward and can overrun its neighbour, which the merchant then fixes by hand. fontSize/width gauge how tight a layer is; to change a label's fontSize, wrap frame, align, or fontFamily, use roastify_move_elements.

Also returns description — the product's store-page prose (outside the design, syncs to Shopify), versioned with the design. Refine it and write it back with roastify_set_product_description.

Pair with roastify_update_design_text to save text changes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
npubNoRequired. Your Nostr public key (npub1...) for credit billing.
design_idYesThe id from roastify_list_designs.
dpop_tokenNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.2/5.0
Behavior5/5

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

With no annotations, this description carries the full burden of behavioral disclosure, and it delivers: it explains that text layers may not print due to missing visibility flags, that stash labels state intent not content, and that width is a fixed wrap while height re-measures with text growth. It also defines z-order semantics and warns about the ±10% chars constraint. This is far beyond a generic 'get' description.

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

Conciseness3/5

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

The description is front-loaded with the core purpose and is well-structured into paragraphs and bullet-like lists, but it is quite long and contains some redundancy (e.g., width/height semantics stated in two places, repeated references to roastify_move_elements). It is wordy but each section carries useful domain nuance.

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

Completeness5/5

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

For a read tool with no annotations, this description is comprehensive: it explains the full return shape (text layers, sheet/panels/face, elements, fonts, description), geometry semantics, caveats about missing visibility flags, and how to pair with sibling tools for edits. An agent has everything needed to invoke and interpret this tool correctly.

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

Parameters2/5

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

The description provides no additional meaning for the three input parameters; it focuses entirely on the return payload. The schema already covers npub and design_id (67% coverage), but dpop_token remains undocumented in both schema and description. Since coverage is not high and the description adds zero param-level guidance, this dimension is weak.

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?

The opening sentence states a specific verb ('List') and resource ('editable text layers of a stored design'), and immediately scopes what is returned ('NOT the design's images'). It is clearly distinct from siblings like roastify_update_design_text (saves changes) and roastify_move_elements (changes geometry/font).

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?

The description gives explicit routing: use roastify_move_elements to change fontSize/wrap frame/align/fontFamily or z, roastify_update_design_text to save text changes, and roastify_set_product_description for store-page prose. It also tells the agent to read these layers before judging a design and warns about images being excluded, though it never names the sibling that returns images. This is clear context with minor exclusion gaps.

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.