Skip to main content
Glama

Roastify Move Elements

roastify_move_elements

Move a group of elements together and/or resize elements; commit a new version.

The Designer can move only one layer at a time, so a block of layered content (a spec panel, a logo lockup) drifts out of alignment when its backing shape is moved alone. This relocks that block: name the ids and shift them as one rigid object, and separately re-centre or resize individual rectangles. The store is configuration management: the edit is committed back to the SAME design_id (git tracks the diff). Apply it onto the product with the browser courier.

Nothing is validated against panel bounds here (unlike add_design_element): you are re-aligning existing, deliberately-placed content, so the caller owns the coordinates. The heavy background image is never moved unless you name its id.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
npubNoRequired. Your Nostr public key (npub1...) for credit billing.
editsYesA list of geometry edits, each one of: - group shift: {"ids": ["a", "b", ...], "dx": N, "dy": M} — add the same delta to every listed element's x/y (design units; +dy is down, +dx is right). Use this to move a whole block together. - absolute set: {"id": "a", "x": ?, "y": ?, "width": ?, "height": ?, "fontSize": ?, "fill": ?, "stroke": ?, "align": ?, "fontFamily": ?, "z": ?} — set only the keys you include. What the size keys mean depends on the element: on a RECTANGLE/line/image, width and height are the frame and set directly; on a TEXT layer, width is the wrap frame and fontSize the type size (both settable) while height is DERIVED — it re-measures from the reflowed text, and a height you pass for a text layer is ignored. Use fontSize to match one label's size to a peer. align (left|center|right|justify) and fontFamily apply to TEXT only — use them when a repurposed layer still carries a donor's right-align or face (read `fonts` from get_design_text for known families). fill/stroke are colour strings settable on any element — e.g. give a roast-scale dot a dark fill to fill it, or clear the fill to empty it (read each dot's current fill from roastify_get_design_text's `elements`). z reorders paint order in the elements array: an integer index, or "front" / "back". Get element ids and their current geometry from roastify_get_design_text.
labelNoRename the design (optional). Defaults to keeping its current label.
design_idYesThe design to edit, from roastify_list_designs.
dpop_tokenNo
version_tagNoThe NEXT semver version (MAJOR.MINOR.PATCH, e.g. 1.3.0, no 'v') — call roastify_list_design_versions and increment. Required; reusing one is refused.
commit_messageNoA specific description of WHAT changed and WHY — a real commit message, not a placeholder like 'save this' or 'update'. Required.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are present, so the description carries the behavioral burden. It does well by disclosing that edits commit back to the same design_id, that git tracks the diff, that coordinates are not validated against panel bounds, and that the heavy background image is only moved if explicitly named. It could add more about error conditions or irreversibility, but versioning implies some safety net.

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?

The description is front-loaded with a clear one-sentence purpose, followed by a motivating use case and caveats. It is somewhat wordy and includes an opaque phrase ('Apply it onto the product with the browser courier'), but the structure is logical and most content earns its place.

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

Completeness4/5

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

For a complex edit tool with no annotations and an output schema, the description covers the key contextual gaps: when to use it, what it does to versioning, what it does not validate, and the special behavior around the background image. Combined with the highly detailed input schema, an agent has enough to select and invoke the tool correctly.

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

Parameters3/5

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

Schema description coverage is 86%, so the schema already documents parameters thoroughly. The description does add useful operating context ('the caller owns the coordinates', 'the heavy background image is never moved unless you name its id'), but it does not need to—and does not—expand on the individual parameter formats beyond what the schema provides. This is a solid baseline-3 case.

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 first sentence states a precise operation: 'Move a group of elements together and/or resize elements; commit a new version.' It goes on to explain the exact problem it solves — moving a multi-layer block as one rigid object — and clearly distinguishes itself from add_design_element by noting it does not validate against panel bounds.

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

Usage Guidelines5/5

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

The description gives a concrete scenario ('the Designer can move only one layer at a time... drifts out of alignment') and names an explicit alternative: 'Nothing is validated against panel bounds here (unlike add_design_element)'. It also warns about the background image not being moved unless named, helping the agent decide when and how to call the tool.

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.