Skip to main content
Glama

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. Dates show when Glama detected each change.

  1. First observed

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden, and it delivers: it discloses the commit/versioning behavior ("edit is committed back to the SAME design_id"), the absence of bounds validation ("the caller owns the coordinates"), and a safe default ("The heavy background image is never moved unless you name its id"). It does not explicitly address reversibility or auth side effects, but the version-commit framing and risk warnings are substantial.

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 the core purpose and uses three short paragraphs, each earning its place: motivation, mechanism/commit semantics, and validation caveats. There is minor redundancy with the schema (e.g., commit/version details appear in both places), but the prose is efficient and readable for the tool's complexity.

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 mutating tool with no annotations and an output schema present, the description covers the key contextual gaps: when to use it, why it exists, how edits behave, what is not validated, and where to find input ids. It does not mention the closely related roastify_update_design_text for text-only cases, but the high parameter-level detail and output schema make the definition sufficiently complete for an agent 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 high at 86%, so the baseline is 3, but the description adds real parameter-level meaning beyond the schema: it tells the caller that coordinates are not validated and are the caller's responsibility, that the background image id should generally not be included, and that element ids/current geometry should be sourced from roastify_get_design_text. These are practical semantics an agent could not infer from the JSON schema alone.

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 and resource: "Move a group of elements together and/or resize elements; commit a new version." It also differentiates itself from siblings by explicitly contrasting with add_design_element ("Nothing is validated against panel bounds here") and by describing the unique rigid-block relocking use case. An agent can distinguish this from the many design-manipulation siblings without opening the schema.

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 a concrete triggering scenario ("a block of layered content ... drifts out of alignment"), explains that this tool relocks the block, and explicitly names an alternative: "unlike add_design_element." It also tells the caller to source ids from roastify_get_design_text. It does not, however, clarify when the related roastify_update_design_text would be preferred for text-only edits, so the guidance is strong but not fully exhaustive.

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.

TDQS

B3.4/5.0
Disambiguation4/5

Most tools target clearly distinct resources—patron balances vs. operator Authority balances, design text vs. full design fetches, operator vs. patron credentials—and the verbose descriptions carefully separate request/receive flows. A few pairs could still be confused at a glance, such as service_status/session_status, forget_coupon/delete_coupon, and get_design_text/fetch_design.

Naming Consistency4/5

All tools share the roastify_ snake_case prefix and mostly follow a verb_noun pattern like list_, get_, update_, delete_, and create. However, several noun-only names (service_status, session_status, account_statement, oracle_about) and the inconsistent forget_ vs. delete_ distinction for credential/coupon removal keep it from being fully consistent.

Tool Count1/5

69 tools is an extreme count for a single MCP surface and far exceeds the 25+ threshold. Even though the tools span many subdomains—design, payments, coupons, credentials, pricing, notarization, oracle—the sheer number will be heavy on agent context and selection accuracy.

Completeness3/5

Core workflows are largely covered: design storage/editing, coupon lifecycle, credential vaults, credit purchasing, pricing models, notarization, and the oracle all have reasonable read/write surfaces. However, session_status explicitly tells not_registered operators to call register_operator, which does not exist in the tool set, and design editing lacks any delete-element operation, leaving notable dead ends.