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 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. Static defaults to four sprites, tileset to 16 items, staged to four stages, terrain to 25 pieces, texture to four samples, and background to one image when the user did not specify a count. Explicit counts/semantic sets override defaults, and non-square counts are filled to the smallest supported 2×2–5×5 square with disclosed supplemental items. 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. Terrain 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" — 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.
dryRunNoDEFAULTS 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.
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. New generations derive a supported square layout from the confirmed semantic plan.
tileSizeNoTERRAIN only — output tile size in px (64, 128 or 256).
assetTypeYesstatic = 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.
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.
runtimeUseNoSTATIC 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.
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.
perspectiveNoTERRAIN only — camera perspective. Defaults from the project gameType.
textureKindNoTEXTURE 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.
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.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations only supply coarse flags, but the description discloses critical behaviors: it is paid, defaults to a cost preview, requires unanimous planToken for real calls, has per-asset defaults, returns a jobId for fan-out creates, and notes terrain regeneration and atlas cutting behavior. This greatly exceeds the structured annotations.

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 dense and every major statement earns its place, but it is a large run-on paragraph with a redundant 'DEFAULTS TO A PLAN + COST PREVIEW' near the end and no structural delimitation. It would be clearer with bullets or headed sections.

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?

Given the tool has 22 parameters and no output schema, the description covers the full invocation flow: return keys, polling via get_job, subsequent get_asset call, extraction status, cost flow, and invalidation conditions. An agent has enough to call and interpret this tool correctly.

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

Parameters5/5

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

Schema coverage is 100%, but the description adds real meaning beyond the schema: semantic defaults per assetType, non-square count filling, why `projectId` is required, `planToken` lifecycle constraints, and type-specific caveats. This is far above the baseline of 'schema already documents everything.'

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 action, resource, and scope: 'Creates a NEW asset from a prompt in any of the six types.' This clearly separates create_asset from sibling tools like revise_asset, reprocess_asset, or animate_asset without needing to open their schemas.

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 an explicit two-phase workflow: dry-run first, show the preview, get user approval, then re-call with `planToken`; it also lists what invalidates the plan. It does not, however, directly name sibling alternatives or give explicit 'use this instead of X' guidance, so it falls just short of a perfect 5.

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

A3.9/5.0
Disambiguation4/5

Most tools have clearly distinct purposes, and the descriptions are extremely detailed with cross-references (e.g., animate_asset vs frame_animation vs generate_character_animation). A few pairs like reprocess_asset vs revise_asset could be confused initially, but their descriptions and use cases are explicit enough to prevent misselection.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., create_project, get_asset, cancel_job). Verbs are imperative and nouns are appropriately singular/plural, making the API predictable and readable.

Tool Count2/5

At 41 tools, the server is far beyond the 15-25 range considered reasonable for most APIs. While the domain is broad (project, assets, characters, animations, jobs, exports, credits), the sheer number creates a heavy surface that may overwhelm agents and suggests the API could be consolidated into higher-level operations.

Completeness4/5

The tool set covers the full creative pipeline: project creation, asset/character generation, animation (both AI and frame-based), revisions, exports, and job management. Minor gaps include lack of delete operations for assets/characters/projects and no listing of all jobs, but these are not critical for the core workflow and are likely intentional for a generative art platform.

Resources