Skip to main content
Glama

Generate Any App Illustration

generate_composition

Generate any standalone illustration needed for an app, landing page, webapp, website, dashboard, SaaS product, marketing page, design system, product UI, hero section, feature section, onboarding flow, empty state, success state, error state, documentation page, card, modal, or diagram-like visual.

Use as the default general-purpose illustration tool whenever the user needs polished visual assets that make an app, website, SaaS product, marketing page, or design-system surface look better, and does not need the same mascot/character reused across poses.

Before calling, read svgapp.conf.json from the project root and pass artStyleId and colorPaletteId from that file when available.

Do not use when the user wants the same existing mascot in a new action or emotion; use generate_mascot_pose for mascot continuity.

Generation is asynchronous. This tool returns imageUrl and assetUrl immediately; you can embed this url immediately. It might resolve to a placeholder, so try to just embed the remote url. Poll get_generation_status until completed before downloading the final image. If the final image needs to sit cleanly over cards, modals, dashboards, or colored backgrounds, call remove_image_background after completion.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "prompt": "<prompt>",
      "artStyleId": "<artStyleId>"
    },
    "name": "generate_composition"
  }
}

Input Schema

NameRequiredDescriptionDefault
promptYesDetailed standalone illustration prompt. Include the app/page/screen context, UI purpose, subject, mood, layout constraints, and what the asset should communicate.
workspaceNoOptional workspace id or slug from list_workspaces. Defaults to the user's personal workspace. Use the same workspace for every call in a workflow, because generations, mascots, and palettes belong to one workspace.
artStyleIdYesArt style id from svgapp.conf.json. If missing, call init_svgapp_config first.
aspectRatioNoOptional output aspect ratio. Use 16:9 for heroes, 4:3 for empty states/cards, 1:1 for icons or compact panels, and 9:16 for mobile-first artwork.
colorPaletteIdNoOptional palette id from svgapp.conf.json. Pass it when the illustration should match brand/app colors.

Output Schema

NameRequiredDescriptionDefault
statusYesCurrent async state. If pending, poll get_generation_status. If completed, call get_generated_asset.
assetUrlNoEmbeddable asset URL for the generation, matching imageUrl for images and videoUrl for animations. It can be used immediately while polling continues.
canvasIdNoUnderlying SVG App canvas id when the generation produced an image. Kept for UI integration and background removal.
imageUrlNoEmbeddable image URL. It is returned immediately, serves a frontend placeholder while pending, and redirects to the final image when ready.
mimeTypeNoMIME type of the final asset when known, for example image/png or video/mp4.
videoUrlNoEmbeddable video URL for animation generations. It is returned immediately, serves a frontend placeholder video while pending, and redirects to the final transparent WebM video when ready.
nextActionYesThe exact next MCP action the model/client should take for this generation.
animationIdNoUnderlying SVG App video generation id when the generation produced an animation.
resourceUriNoOptional MCP resource URI for clients that explicitly choose to read resources. Do not rely on resources for polling.
generationIdYesPass this exact id to get_generation_status until status is completed. The returned asset URL can be used immediately.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only say non-readonly, open-world, non-idempotent, non-destructive. The description adds the crucial trait that generation is asynchronous, that the returned imageUrl/assetUrl may resolve to a placeholder, and that get_generation_status must be polled before download — none of which is inferable from the annotations or schema.

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?

Front-loaded with purpose, then exclusion, then prerequisites, then async lifecycle — a sensible order. The opening sentence's 20-item enumeration of surfaces is inflated and could be trimmed to a representative handful without losing meaning.

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 5-param async generation tool with an output schema, everything an agent needs is present: required config inputs, aspect-ratio conventions, the polling loop, and the optional background-removal follow-up. Return values are already covered by the output schema, so the extra note about placeholder URLs is a bonus rather than a gap.

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 real sourcing information the schema lacks: artStyleId and colorPaletteId come from svgapp.conf.json at the project root and should be passed 'when available'. It adds little for aspectRatio and workspace beyond the existing schema text.

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?

Opens with a specific verb+resource ('Generate any standalone illustration') and enumerates concrete surface types (hero, empty state, modal, diagram). It explicitly excludes the mascot case, so the agent can separate it from generate_mascot_pose and create_generation without opening either schema.

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?

Declares itself the 'default general-purpose illustration tool' for polished assets, gives an explicit when-not clause ('same existing mascot in a new action or emotion'), and redirects to the correct sibling. It also supplies a prerequisite (read svgapp.conf.json) and a post-step (remove_image_background) conditional on the surface.

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.