Skip to main content
Glama

Create an asset

create_asset

PAID (one image call). Creates a NEW asset from a prompt in any of the six types. The default dry run now returns a strictly text-free artwork brief: no captions, labels, lettering, digits or pseudo-writing unless the user explicitly requests specific intrinsic writing on an object. Environment Kit overlays must not have die-cut sticker borders or backing. It returns both the exact semantic plan (plan.preview, item count/list, camera, project-derived look) and planToken. SHOW that preview to the user. A real call requires the same request plus that planToken; changing the prompt, project settings, type, model, or output settings invalidates it and requires a new dry run. Standard models cost 60 credits at 1K, 100 at 2K, or 150 at 4K per image/sheet, including automatic background removal and fallback; use the dry-run quote. Object (assetType: "static", formerly Static Asset) defaults to four separately editable design alternatives of the requested object, not a state sequence. All four share project style and one of five world cameras; explicitly requested flat inventory/UI icons use front/content_type. Explicit one remains supported. Clean cutouts omit incidental scenery and sticker backing, not real outlines or integral bases. Never automatically reroute asset types. Object States (staged) is one object in exactly four ordered states on a 2×2 sheet; no filler or automatic animation. Preserve identity, shared physical scale and real size changes. Object Collection (tileset) and Environment Kit (terrain) propose 1–25 useful pieces when no count is specified; explicit lists/counts are preserved without grid-filler extras. Object Collections contain independently editable mixed items, variants, matching families, icons/symbols or cards/tokens—not automatic animation stages. World props follow project camera; flat icons/cards use front-facing presentation even in isometric projects, unless the user explicitly requests another view. Preserve requested intrinsic symbols/text, never external captions. Material uses one transparent 1K donor sheet through the configured Material provider route and yields two platformer fill+surface families or four topdown/isometric fills, and background to one image when the user did not specify a count. Explicit counts/semantic sets override defaults, and non-square counts for other grid types are filled to the smallest supported 2×2–5×5 square with disclosed supplemental items. Environment Kit camera follows the project; request a different camera explicitly in the prompt. Kit pieces are placed over Materials, not used as deterministic terrain donors or guaranteed seamless brushes. projectId is REQUIRED — the project supplies gameType, which decides how the art is drawn, and keeps the asset findable in the web app. A fan-out create returns one jobId — the asset ids appear in get_job as gridAssetIds once the job finishes. Environment Kit has NO per-tile edit path: revising a terrain asset regenerates the whole sheet. DEFAULTS TO A PLAN + COST PREVIEW — see dryRun. Returns { jobId, assetId } — poll get_job, then call get_asset. Generated atlases are cut by logical foreground objects, not trusted row geometry; get_asset exposes extraction status/warnings.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameNoDisplay name (defaults to the prompt).
slugNoStable handle used by every /assets/:id call ([a-z0-9-]). Auto-derived from the name when omitted.
styleNoOverride the project's art style for this asset only.
bgTypeNoREQUIRED for assetType "background" — prefer scene (one opaque full scene), distant_backdrop (one opaque far vista), depth_layer (one scenery layer with transparent gaps), or foreground_overlay (transparent edge framing). All four support every camera. One image per call, no automatic parallax pack, collision/navigation or verified seamless repeat. Angled top-down and strict overhead stay distinct; atmospheric vistas need no forced isometric geometry. Preserve project style. Legacy values remain view-specific: platformer → parallax_far/parallax_mid/parallax_near/platform_scene/static_backdrop/scrolling_backdrop; topdown + topdown_overhead → ground_fill/overhead_map/functional_map/scrolling_floor/parallax_underlay; isometric → iso_ground/iso_scene/iso_far/iso_platform_surface; point_and_click → full_scene/room_stage/parallax_strip/platform_scene_front/vista_backdrop. A mismatch, or omitting it, is rejected with 400. Each sub-type runs a different tuned prompt, so this decides what KIND of image you get — a far parallax sky and a functional platform scene are not interchangeable. Ask the user which layer they want if their request does not make it obvious.
dryRunNoDEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a normal confirmation question. Prefer the client's native question UI with Approve / Decline / Discuss choices when available; otherwise accept any unambiguous conversational approval. Never require a fixed phrase or ask the user to type a magic word. Only after approval, re-call with dryRun:false to actually spend.
promptYesWhat to generate. Describe the subject, not the art style — style comes from the project.
gridColsNoLegacy compatibility only; the confirmed plan decides columns.
gridRowsNoLegacy compatibility only. The confirmed semantic plan owns layout. Object Collection and Environment Kit never add items just to fill cells.
tileSizeNoTERRAIN only — output tile size in px (64, 128 or 256).
assetTypeYes`static` = Object (formerly Static Asset), four separately editable design alternatives by default (explicit one supported); each may also be animated; tileset = Object Collection, one coordinated set of independently editable items; staged = one subject in N progressive stages (the input animate_asset expects); background = scenery, never a game object; terrain = Environment Kit, individually placed props, surface details or connecting modules; texture = Terrain Material, brushable fill/surface donors (wire names unchanged; editor topology is deterministic).
planTokenNoREQUIRED when dryRun=false. Copy unchanged from the immediately preceding dry-run response.
projectIdYesREQUIRED. Owning project (create_project / list_projects). Supplies gameType + default style.
bgViewTypeNoBACKGROUND only — which view the background is drawn for. Defaults to the project gameType.
imageModelNoOverride the image model for non-Material assets. Materials use the server-owned MATERIAL_IMAGE_PRIMARY provider route.
runtimeUseNoOBJECT only (`assetType: "static"`; formerly Static Asset). Material is locked to deterministic brush rendering server-side. Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice or shader_effect — which changes the prompt AND the export metadata. Anything other than plain_image on a non-Object type is rejected. path_follow remains accepted for legacy clients but must not be used for new assets; path motion is configured per placement in the level editor. It can also be set later with set_asset_runtime_intent, for free.
aspectRatioNoBACKGROUND only — OPTIONAL, and best left unset: the server applies the recommended ratio for the chosen sub-type (e.g. 21:9 for a parallax layer, 1:1 for a ground fill), which is what the web wizard preselects. Only pass a value if the user asked for a specific shape. 21:9 is the widest and 9:16 the tallest the image model accepts.
perspectiveNoEnvironment Kit only — legacy three-value camera override. Omit to retain the project’s distinct side, angled top-down, overhead, isometric or adventure camera; request finer camera changes in the prompt.
textureKindNoLEGACY compatibility only. New Materials derive platformer/topdown/isometric projection from the project gameType; this value does not change their donor contract.
idempotencyKeyNoOptional Idempotency-Key for the real (dryRun:false) call. Omit and one is minted per call. Reuse the SAME value when retrying a call that failed with ENTITY_BUSY / 402 / 429 so the retry cannot double-dispatch.
targetTileSizeNoOutput tile side in px (16-512).
referenceAssetUrlsNoUp to 4 reference image URLs to condition the generation. URLs only — raw base64 is rejected on this surface.
backgroundResolutionNoBACKGROUND only — output tier (default 2K). 4K costs more.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / prompt / maxLength
      Added value: +20000
  2. Changed1 schema field changed
    • changedInput schema / properties / dryRun / description
      Previous value: -"DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits and get an explicit yes for that amount, THEN re-call with dryRun:false to actually spend."New value: +"DEFAULTS TO TRUE. While true this returns only a cost quote ({ estimatedCredits, balance, spendCapDaily, spentLast24h, capRemaining }) and executes nothing. Show the user estimatedCredits, then ask a normal confirmation question. Prefer the client's native question UI with Approve / Decline / Discuss choices when available; otherwise accept any unambiguous conversational approval. Never require a fixed phrase or ask the user to type a magic word. Only after approval, re-call with dryRun:false to actually spend."
  3. Changed8 schema fields changed
    • changedInput schema / properties / assetType / description
      Previous value: -"`static` = Object (formerly Static Asset), one sprite/prop that may also be animated; tileset = a grid of related tiles; staged = one subject in N progressive stages (the input animate_asset expects); background = scenery, never a game object; terrain = auto-tiling 3×3 ground sheet; texture = seamless tileable material."New value: +"`static` = Object (formerly Static Asset), four separately editable design alternatives by default (explicit one supported); each may also be animated; tileset = Object Collection, one coordinated set of independently editable items; staged = one subject in N progressive stages (the input animate_asset expects); background = scenery, never a game object; terrain = Environment Kit, individually placed props, surface details or connecting modules; texture = Terrain Material, brushable fill/surface donors (wire names unchanged; editor topology is deterministic)."
    • changedInput schema / properties / bgType / description
      Previous value: -"REQUIRED for assetType \"background\" — the sub-type, and it must be legal for the view: platformer → parallax_far/parallax_mid/parallax_near/platform_scene/static_backdrop/scrolling_backdrop; topdown + topdown_overhead → ground_fill/overhead_map/functional_map/scrolling_floor/parallax_underlay; isometric → iso_ground/iso_scene/iso_far/iso_platform_surface; point_and_click → full_scene/room_stage/parallax_strip/platform_scene_front/vista_backdrop. A mismatch, or omitting it, is rejected with 400. Each sub-type runs a different tuned prompt, so this decides what KIND of image you get — a far parallax sky and a functional platform scene are not interchangeable. Ask the user which layer they want if their request does not make it obvious."New value: +"REQUIRED for assetType \"background\" — prefer scene (one opaque full scene), distant_backdrop (one opaque far vista), depth_layer (one scenery layer with transparent gaps), or foreground_overlay (transparent edge framing). All four support every camera. One image per call, no automatic parallax pack, collision/navigation or verified seamless repeat. Angled top-down and strict overhead stay distinct; atmospheric vistas need no forced isometric geometry. Preserve project style. Legacy values remain view-specific: platformer → parallax_far/parallax_mid/parallax_near/platform_scene/static_backdrop/scrolling_backdrop; topdown + topdown_overhead → ground_fill/overhead_map/functional_map/scrolling_floor/parallax_underlay; isometric → iso_ground/iso_scene/iso_far/iso_platform_surface; point_and_click → full_scene/room_stage/parallax_strip/platform_scene_front/vista_backdrop. A mismatch, or omitting it, is rejected with 400. Each sub-type runs a different tuned prompt, so this decides what KIND of image you get — a far parallax sky and a functional platform scene are not interchangeable. Ask the user which layer they want if their request does not make it obvious."
    • changedInput schema / properties / bgType / enum
      Previous value: -[
      -  "parallax_far",
      -  "parallax_mid",
      -  "parallax_near",
      -  "platform_scene",
      -  "static_backdrop",
      -  "scrolling_backdrop",
      -  "ground_fill",
      -  "overhead_map",
      -  "functional_map",
      -  "scrolling_floor",
      -  "parallax_underlay",
      -  "iso_ground",
      -  "iso_scene",
      -  "iso_far",
      -  "iso_platform_surface",
      -  "full_scene",
      -  "room_stage",
      -  "parallax_strip",
      -  "platform_scene_front",
      -  "vista_backdrop"
      -]New value: +[
      +  "scene",
      +  "distant_backdrop",
      +  "depth_layer",
      +  "foreground_overlay",
      +  "parallax_far",
      +  "parallax_mid",
      +  "parallax_near",
      +  "platform_scene",
      +  "static_backdrop",
      +  "scrolling_backdrop",
      +  "ground_fill",
      +  "overhead_map",
      +  "functional_map",
      +  "scrolling_floor",
      +  "parallax_underlay",
      +  "iso_ground",
      +  "iso_scene",
      +  "iso_far",
      +  "iso_platform_surface",
      +  "full_scene",
      +  "room_stage",
      +  "parallax_strip",
      +  "platform_scene_front",
      +  "vista_backdrop"
      +]
    • changedInput schema / properties / gridRows / description
      Previous value: -"Legacy compatibility only. New generations derive a supported square layout from the confirmed semantic plan."New value: +"Legacy compatibility only. The confirmed semantic plan owns layout. Object Collection and Environment Kit never add items just to fill cells."
    • changedInput schema / properties / imageModel / description
      Previous value: -"Override the image model."New value: +"Override the image model for non-Material assets. Materials use the server-owned MATERIAL_IMAGE_PRIMARY provider route."
    • changedInput schema / properties / perspective / description
      Previous value: -"TERRAIN only — camera perspective. Defaults from the project gameType."New value: +"Environment Kit only — legacy three-value camera override. Omit to retain the project’s distinct side, angled top-down, overhead, isometric or adventure camera; request finer camera changes in the prompt."
    • changedInput schema / properties / runtimeUse / description
      Previous value: -"OBJECT only (`assetType: \"static\"`; formerly Static Asset). Texture is locked to repeat_fill server-side. Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice or shader_effect — which changes the prompt AND the export metadata. Anything other than plain_image on a non-Object type is rejected. path_follow remains accepted for legacy clients but must not be used for new assets; path motion is configured per placement in the level editor. It can also be set later with set_asset_runtime_intent, for free."New value: +"OBJECT only (`assetType: \"static\"`; formerly Static Asset). Material is locked to deterministic brush rendering server-side. Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice or shader_effect — which changes the prompt AND the export metadata. Anything other than plain_image on a non-Object type is rejected. path_follow remains accepted for legacy clients but must not be used for new assets; path motion is configured per placement in the level editor. It can also be set later with set_asset_runtime_intent, for free."
    • changedInput schema / properties / textureKind / description
      Previous value: -"TEXTURE only — fill = uniform material tiling in all directions (walls/floors/ground); strip = has a directional top surface and repeats left↔right (platformer platforms). Defaults per gameType. Created cells are RAW: read metadata.seamless.seamMetric.pass from get_asset and only pay fix_asset_seams for the ones that fail."New value: +"LEGACY compatibility only. New Materials derive platformer/topdown/isometric projection from the project gameType; this value does not change their donor contract."
  4. Changed2 schema fields changed
    • changedInput schema / properties / assetType / description
      Previous value: -"static = one sprite/prop; tileset = a grid of related tiles; staged = one subject in N progressive stages (the input animate_asset expects); background = scenery, never a game object; terrain = auto-tiling 3×3 ground sheet; texture = seamless tileable material."New value: +"`static` = Object (formerly Static Asset), one sprite/prop that may also be animated; tileset = a grid of related tiles; staged = one subject in N progressive stages (the input animate_asset expects); background = scenery, never a game object; terrain = auto-tiling 3×3 ground sheet; texture = seamless tileable material."
    • changedInput schema / properties / runtimeUse / description
      Previous value: -"STATIC only (texture is locked to repeat_fill server-side). Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice or shader_effect — which changes the prompt AND the export metadata. Anything other than plain_image on a non-static type is rejected. path_follow remains accepted for legacy clients but must not be used for new assets; path motion is configured per placement in the level editor. It can also be set later with set_asset_runtime_intent, for free."New value: +"OBJECT only (`assetType: \"static\"`; formerly Static Asset). Texture is locked to repeat_fill server-side. Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice or shader_effect — which changes the prompt AND the export metadata. Anything other than plain_image on a non-Object type is rejected. path_follow remains accepted for legacy clients but must not be used for new assets; path motion is configured per placement in the level editor. It can also be set later with set_asset_runtime_intent, for free."
  5. Changed1 schema field changed
    • changedInput schema / properties / runtimeUse / description
      Previous value: -"STATIC only (texture is locked to repeat_fill server-side). Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice, shader_effect, path_follow — which changes the prompt AND the export metadata. Anything other than plain_image on a non-static type is rejected. It can also be set later with set_asset_runtime_intent, for free."New value: +"STATIC only (texture is locked to repeat_fill server-side). Declares how the art is meant to be rendered — particle_emitter, deformable_strip, nine_slice or shader_effect — which changes the prompt AND the export metadata. Anything other than plain_image on a non-static type is rejected. path_follow remains accepted for legacy clients but must not be used for new assets; path motion is configured per placement in the level editor. It can also be set later with set_asset_runtime_intent, for free."
  6. Changed3 schema fields changed
    • changedInput schema / properties / gridCols / description
      Previous value: -"Grid columns — see gridRows."New value: +"Legacy compatibility only; the confirmed plan decides columns."
    • changedInput schema / properties / gridRows / description
      Previous value: -"REQUIRED for tileset and staged — they are split into a grid, and without it the image is generated ungridded and every tile comes out cut. Optional elsewhere; on static, 2x2 means four variations from one paid call."New value: +"Legacy compatibility only. New generations derive a supported square layout from the confirmed semantic plan."
    • addedInput schema / properties / planToken
      Added value: +{
      +  "description": "REQUIRED when dryRun=false. Copy unchanged from the immediately preceding dry-run response.",
      +  "type": "string"
      +}
  7. First observed

TDQS

A3.7/5.0
Behavior4/5

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

Annotations only say readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, so the description carries the behavioral burden and does so extensively: the dry-run default, planToken invalidation rules, credit cost tiers, automatic background removal and fallback, terrain's lack of per-tile edit path, and the fact that atlases are cut by logical foreground objects rather than row geometry. This goes well beyond annotation coverage. It loses a point for not addressing rate limits or idempotency retry nuances beyond the schema's idempotencyKey note.

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

Conciseness2/5

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

The description is extraordinarily long — several hundred words — and heavily redundant with the input schema. The assetType enum's schema description already explains each type, yet the prose re-explains each in detail. Multiple behaviors (no grid-filler, no automatic animation, camera conventions) are restated across different type sections. The critical dry-run/plan-token flow is front-loaded, which is good, but the sheer volume of repetition means many sentences fail to earn their place.

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 complex tool with 22 parameters, 6 asset types, and a two-phase dry-run/confirm flow, the description is remarkably complete. It specifies the return shape ({ jobId, assetId }), the polling handoff (poll get_job, then get_asset), the preview requirement, extraction warnings on get_asset, credit quoting, and per-type default behaviors. Despite no output schema, an agent has everything needed to drive the full lifecycle 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 meaningful interplay context beyond the schema: dryRun defaults to true and returns only a quote, planToken is required when dryRun=false and must be copied unchanged, bgType is REQUIRED for background and mismatches get rejected with 400, assetType 'static' defaults to four design alternatives, and idempotencyKey should be reused when retrying ENTITY_BUSY/402/429. This enriches the structured field definitions rather than repeating them.

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

Purpose4/5

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

States a specific verb and resource — 'Creates a NEW asset from a prompt in any of the six types.' The opening line is clear about the core action and the asset-type taxonomy (static, tileset, staged, background, terrain, texture) distinguishes it from siblings like create_character, create_project, and create_ui_composition. It loses a point because the purpose is buried under a very long preamble about paid calls and dry runs before the type breakdown, and sibling differentiation is implicit rather than explicit.

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

Usage Guidelines3/5

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

Provides substantial usage flow guidance: defaults to dry run, show the preview to the user, re-call with dryRun:false after approval, poll get_job then get_asset. It also tells the user to ask which layer they want when bgType is ambiguous. However, it never explicitly contrasts with alternatives like revise_asset or import_asset_image, nor states when NOT to use this tool versus those siblings — the when-to-use is implied by the workflow narrative, not stated as a routing decision.

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