Skip to main content
Glama

var2_create_image

Create a STILL IMAGE from a text prompt — "make/generate/draw an image of X", variations of an image — or edit one (type=image-to-image + image_url; image_refs[] locks character/style). A storyboard / N frames / N panels / comic strip with a consistent character = still IMAGES, one call per frame, not a video. Use var2_list_models for the complete current model list and supported settings; do not infer model availability from examples. Upscale/"sharper" → var2_modify_image; animate → var2_create_video; 3D → var2_create_3d.

Input Schema

NameRequiredDescriptionDefault
typeNoDefault text-to-image. grok-imagine-image-2 only: segment-map (FREE — splits image_url into named segments, returns segment_map_id + segments[{index,name,mask_url}]; prompt is ignored) then segment-edit (segment_map_id + mask_indexes + prompt — redraws only those segments).
modelNoDefault gpt-image-2.
promptYes
image_urlNoRequired for type=image-to-image. Storage URL, var2 share link (www.var2.ai/image/<id> — auto-resolved), or any public https URL.
image_refsNoOptional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2, gpt-image-2-5, grok-imagine-image-2, seedream-5-pro); ignored by others.
resolutionNoOutput size of the NEW generation — does not upscale an existing image (that is var2_modify_image). seedream-5-pro: 1K or 2K (default 2K).
webhook_urlNoOptional. https:// URL var2 POSTs a signed delivery to when the asset is ready (or fails). Signature header: X-VAR2-Signature: t=<unix>, v1=<hex(hmac_sha256(webhook_secret, t + "." + body))>. Retried with exponential backoff (8 attempts over ~4 days).
aspect_ratioNo
mask_indexesNotype=segment-edit: segment index values (from segments[].index) to redraw.
segment_map_idNotype=segment-edit: the segment_map_id returned by type=segment-map.
idempotency_keyNoOptional. Retries with the same key never double-bill (dedupes on ai_jobs.request_id). Use a stable per-user-action value (e.g. a UUID).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • changedInput schema / properties / image_refs / description
      Previous value: -"Optional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2, gpt-image-2-5, grok-imagine-image-2); ignored by others."New value: +"Optional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2, gpt-image-2-5, grok-imagine-image-2, seedream-5-pro); ignored by others."
    • changedInput schema / properties / resolution / description
      Previous value: -"Output size of the NEW generation — does not upscale an existing image (that is var2_modify_image)."New value: +"Output size of the NEW generation — does not upscale an existing image (that is var2_modify_image). seedream-5-pro: 1K or 2K (default 2K)."
  2. Changed5 schema fields changed
    • changedInput schema / properties / image_refs / description
      Previous value: -"Optional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2, gpt-image-2-5); ignored by others."New value: +"Optional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2, gpt-image-2-5, grok-imagine-image-2); ignored by others."
    • addedInput schema / properties / mask_indexes
      Added value: +{
      +  "description": "type=segment-edit: segment index values (from segments[].index) to redraw.",
      +  "items": {
      +    "minimum": 0,
      +    "type": "integer"
      +  },
      +  "minItems": 1,
      +  "type": "array"
      +}
    • addedInput schema / properties / segment_map_id
      Added value: +{
      +  "description": "type=segment-edit: the segment_map_id returned by type=segment-map.",
      +  "type": "string"
      +}
    • changedInput schema / properties / type / description
      Previous value: -"Default text-to-image."New value: +"Default text-to-image. grok-imagine-image-2 only: segment-map (FREE — splits image_url into named segments, returns segment_map_id + segments[{index,name,mask_url}]; prompt is ignored) then segment-edit (segment_map_id + mask_indexes + prompt — redraws only those segments)."
    • changedInput schema / properties / type / enum
      Previous value: -[
      -  "text-to-image",
      -  "image-to-image"
      -]New value: +[
      +  "text-to-image",
      +  "image-to-image",
      +  "segment-map",
      +  "segment-edit"
      +]
  3. Changed1 schema field changed
    • changedInput schema / properties / image_refs / description
      Previous value: -"Optional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2); ignored by others."New value: +"Optional refs for type=image-to-image. Character/style lock on ref-aware models (nano-banana*, gpt-image-2, gpt-image-2-5); ignored by others."
  4. First observed

TDQS

A4.3/5.0
Behavior4/5

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

With only a title annotation, the description carries the behavioral burden and does add real context: segment-map is FREE and ignores the prompt, image_refs are ignored by non-ref-aware models, model availability must be checked via var2_list_models rather than inferred from examples. It stops short of disclosing the async job lifecycle (that webhook/polling is needed and that var2_get_image_result retrieves output), which is the one material behavioral gap.

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?

A single dense paragraph, front-loaded with the core capability and then the routing directives. It is information-efficient, though the mode/routing clauses are packed tightly enough that it reads more like a decision tree than prose.

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 an 11-parameter tool with no output schema and no annotations, the description covers modes, model caveats, and sibling routing well enough to call correctly. It omits how the result is retrieved (var2_get_image_result / webhook or idempotency flow), which is the remaining completeness gap.

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 high (82%), so the baseline is 3. Most of the description's parameter guidance (type semantics, image_url requirement for image-to-image, image_refs locking, resolution not upscaling) is already stated in the schema's own field descriptions, so the description adds little that the agent doesn't already have.

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?

States a specific verb + resource ('Create a STILL IMAGE from a text prompt') and immediately enumerates the supported modes (text-to-image, image-to-image edit, storyboard per-frame). It explicitly distinguishes itself from var2_create_video, var2_create_3d, and var2_modify_image, so an agent can route without opening a 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?

Gives explicit when-to-use and when-not-to-use rules: upscale/'sharper' → var2_modify_image, animate → var2_create_video, 3D → var2_create_3d, model list → var2_list_models. It also pre-empts a common misclassification by declaring a multi-panel storyboard is N still-image calls, not a video.

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