Skip to main content
Glama

Server Details

AI photoshoot studio: garments, avatars, locations, and art direction

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

TDQS

A3.5/5.0

Scored across 68 tools

Disambiguation3/5

Most tools have detailed descriptions and distinct resource/action pairs, but the set contains several near-overlapping clusters: avatar creation/saving paths, credit checkout (create_credit_checkout_session vs mcp_create_credit_checkout_session), and upload source variants. An agent choosing among generate_avatar, create_avatar_from_references, add_avatar_reference, save_generated_avatar, and upload_avatar_from_chat_file would need to read carefully. Descriptions help, but the overlap is much broader than one or two ambiguous pairs.

Naming Consistency4/5

Tool names overwhelmingly follow snake_case verb_noun conventions (create_*, get_*, list_*, update_*, upload_*), with only a few oddities like author_art_direction and copy_template_to_generate_node_config. The mcp_* prefix identifies app-only tools consistently, though mixing those with public equivalents slightly weakens readability. Overall the pattern is predictable and readable.

Tool Count1/5

68 tools is far beyond a well-scoped MCP surface; even allowing for the broad fashion-photoshoot domain, the count exceeds the 50+ threshold. Many resources have multiple variants (upload paths, QA paths, context helpers), making the toolset feel like an entire platform API rather than a focused server.

Completeness3/5

The domain coverage is extensive: garments, avatars, outfits, locations, ArtDirections, templates, briefs, generation, QA, montage, credits, tags, and search are all present. However, several resource types have obvious lifecycle gaps — no delete or update for avatars/outfits/locations, no delete for garments/tags/ArtDirections, and no cancel operation for generation jobs. These are notable omissions even though agents can often work around them.

Available Tools

68 tools
add_avatar_referenceAdd Avatar ReferenceA
Destructive
Inspect

Fill or replace one reference slot on an existing owned avatar/model from an owned workspace file, an owned generation result, or a public image URL. Creator-linked slots keep their source guard.

ParametersJSON Schema
NameRequiredDescriptionDefault
slotYesReference slot to fill or replace.
avatar_idYesOwned avatar to update.
image_urlNoPublic HTTP(S) image URL. Use exactly one source field.
uploaded_file_idNoOwned workspace file ID. Use exactly one source field.
generation_result_idNoOwned image result ID. Use exactly one source field.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, and the description aligns with this by saying 'fill or replace.' It adds a behavioral nuance: 'Creator-linked slots keep their source guard,' which is not present in the schema or annotations and helps the agent understand source-ownership constraints.

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

Conciseness5/5

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

The description is two sentences long and front-loaded with the core action. Every word adds value—no redundancy or filler.

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?

The description covers the key logic (one-of sources, replace semantics) and a notable edge case (creator-linked slots) for a destructive mutation. There is no output schema, so not specifying return values is acceptable, but slightly more detail on the result (e.g., success/failure behavior) would make it fully complete.

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 coverage is 100%, so all parameters are already well-documented with descriptions like 'Use exactly one source field.' The description mostly echoes these source types without adding new syntax or format details, so it earns the baseline score for high schema coverage.

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 description clearly states the action ('fill or replace'), the target resource ('reference slot on an existing owned avatar/model'), and the three source types (workspace file, generation result, public URL). It distinguishes from sibling tools like create_avatar_from_references by explicitly mentioning 'existing' avatar/model.

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 implies when to use the tool—updating an existing avatar's reference slots—which is distinct from creating a new avatar or generating one. It does not explicitly name alternatives or exclusions, but the 'existing' qualifier provides clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_backdropApply BackdropAInspect

Remove or replace an image background through Uwear's canonical free backdrop generation path. Provide exactly one foreground source: generation_result_id, clothing_item_asset_id, or a public HTTPS image_url. Use backdrop_mode transparent, solid with color_hex, or image with background_image_url. Returns generation_id; poll get_generation_status, then fetch get_generation_results.

ParametersJSON Schema
NameRequiredDescriptionDefault
color_hexNoRequired for solid mode, for example #FFFFFF.
image_urlNoPublic HTTPS foreground image URL; provide exactly one source.
backdrop_modeYestransparent removes the background, solid uses color_hex, and image uses background_image_url.
background_image_urlNoRequired for image mode; public HTTPS replacement background.
generation_result_idNoExisting generation result foreground; provide exactly one source.
clothing_item_asset_idNoExact owned garment asset foreground; provide exactly one source. Find asset IDs with get_garment or list_garments.

TDQS

A4.5/5.0
Behavior4/5

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

Beyond the annotations, the description discloses the asynchronous generation behavior by stating it 'Returns generation_id' and instructs the agent to poll status before fetching results. It also clarifies the exclusivity constraint without contradicting annotations. It does not discuss side effects on source assets or error conditions, but the 'replace' language combined with destructiveHint=false is not contradictory.

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

Conciseness5/5

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

Four short sentences deliver the outcome, source requirements, mode-to-parameter mapping, and lifecycle instructions with no filler. The most important constraint ('exactly one foreground source') appears early, and the follow-up flow is front-loaded before any less critical details.

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 tool with no output schema and six parameters, the description covers what is needed to invoke the tool correctly: source selection, mode mapping, required parameters, and the return/status/result workflow. It also notes the public HTTPS requirement for image URLs. An agent has enough context to understand both the call and the subsequent polling behavior.

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?

The schema already has 100% parameter coverage and describes each field individually. The description adds value by explaining cross-parameter relationships: exactly one foreground source must be chosen, and each backdrop_mode requires a specific supporting parameter. This is meaningful semantic information beyond the flat schema.

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 description opens with a specific action, 'Remove or replace an image background,' and identifies the exact resource and path: 'Uwear's canonical free backdrop generation path.' This clearly distinguishes the tool from siblings like generate_avatar or upload_garment_from_public_url, which serve different purposes.

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 explicit operational guidance: 'Provide exactly one foreground source' and maps each backdrop_mode to its required parameter. It also specifies the follow-up flow: 'poll get_generation_status, then fetch get_generation_results.' However, it does not name alternative tools or state when not to use this tool, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

author_art_directionCreate Art DirectionAInspect

Queue the conversation for asynchronous ArtDirection authoring using Uwear's prompt system. Use save=true when the user wants to create, build, or save a reusable ArtDirection. Use save=false when the user explicitly wants an unsaved draft or brainstorming pass. This returns a job ID; call get_art_direction_authoring_job until status is done or failed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional requested ArtDirection name
saveNoSet true when the user wants to create, build, or save a reusable ArtDirection. Set false when the user explicitly wants an unsaved draft or brainstorming pass.
sourcesNoSupported authoring sources such as text, public URLs, image URLs, uploaded files, or durable reference image attachments
user_textNoConversation text to compile into ArtDirection markdown
image_urlsNoDraft-only reference image URLs to analyze into the ArtDirection. For saved ArtDirections, first save/select assets and pass reference_image_attachments.
reference_image_attachmentsNoPersistent authoring references as asset IDs. Use for save=true so the user can iterate the ArtDirection later. These are not generation-time references.

TDQS

A4.2/5.0
Behavior4/5

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

With all annotations false, no safety or behavioral hints are provided, so the description carries the burden. It clearly discloses that the tool queues work asynchronously and returns a job ID, requiring polling. It also mentions Uwear's prompt system and the save semantics. It does not fully detail all side effects, but the key async behavior is transparent.

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

Conciseness5/5

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

The description is three sentences with no wasted words. It front-loads the primary action, then explains the save distinction, and ends with the required follow-up polling call. Each sentence earns its place and the structure is easy to scan.

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 asynchronous tool with no output schema, the description covers the essential flow: queue, save vs draft, and polling. It does not mention all parameters, but the schema fully documents them. It also lacks an explicit distinction from the sibling create_art_direction, but the async and job-ID details provide sufficient context.

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?

The input schema has 100% coverage with detailed descriptions for all parameters. The tool description adds value by reinforcing the save parameter's meaning, but it does not provide additional semantics beyond the schema for sources, user_text, image_urls, or reference_image_attachments. The baseline of 3 is appropriate when the schema already documents parameters thoroughly.

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 description states a specific action ('Queue the conversation') on a specific resource ('for asynchronous ArtDirection authoring using Uwear's prompt system'). It distinguishes itself from synchronous creation by explicitly mentioning asynchronous processing and returning a job ID. The save=true/false distinction further clarifies the two modes of operation.

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 explicit guidance on when to use save=true versus save=false, and instructs the caller to poll get_art_direction_authoring_job until done. It does not explicitly name alternative tools (e.g., create_art_direction or iterate_art_direction), but the async and polling context implies when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

build_avatar_promptBuild Avatar PromptA
Read-onlyIdempotent
Inspect

Build a highly detailed prompt for generating a unique reusable avatar/model. Use this when the user wants help describing a person before image generation. If the user's prompt is already intentional and specific, Uwear can skip this and pass the user's wording directly to generate_avatar.

ParametersJSON Schema
NameRequiredDescriptionDefault
cameraNoOptional camera key for context, e.g. midshot
user_textNoUser's rough description of the person/model. Leave empty when the user wants the backend to invent a unique avatar prompt.
model_slugNoOptional image model slug for context
aspect_ratioNoOptional aspect ratio for context, e.g. 9:16
camera_labelNoOptional human-readable camera label

TDQS

A4.2/5.0
Behavior3/5

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

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, establishing this as a safe, read-only, idempotent operation. The description adds the context that it should be skipped when the input prompt is already specific, which is useful but not a major behavioral disclosure. Since annotations cover the safety profile, this is adequate.

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

Conciseness5/5

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

The description is exactly two sentences, front-loaded with the purpose and followed by usage guidance. No redundant phrasing.

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 simple, side-effect-free tool with no required parameters and full schema coverage, the description covers the core purpose and the key decision of when to skip it. It doesn't explicitly state the return format, but the tool name and description imply a prompt string, and annotations cover safety. Complete enough.

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?

All 5 parameters are fully described in the schema (100% coverage), so the description doesn't need to repeat them. The description's mention of 'user's rough description' aligns with the user_text parameter, but the schema already documents each parameter thoroughly. Baseline 3 is appropriate.

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 description clearly states the tool's function: building a highly detailed prompt for avatar/model generation. It distinguishes itself from the sibling generate_avatar by explicitly saying that if the user's prompt is already intentional, the system can skip this and pass wording directly to generate_avatar, making sibling differentiation clear.

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?

The description gives explicit conditions for when to use this tool ('when the user wants help describing a person before image generation') and when to skip it in favor of an alternative ('if the user's prompt is already intentional and specific... pass directly to generate_avatar'). This directly addresses usage vs alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

confirm_briefApprove and Run BriefA
DestructiveIdempotent
Inspect

Call this to approve and idempotently execute a visible persisted Uwear brief. In MCP, a one-word 'Confirm' or phrases like 'looks good', 'run it', 'start', or 'generate' mean execute=true unless the user explicitly says to approve without starting. Use the visible/latest BriefProposal brief_id. Repeated calls return or resume the same durable execution.

ParametersJSON Schema
NameRequiredDescriptionDefault
executeNoExecute the brief immediately after confirming. Defaults true because MCP 'confirm the brief' means approve and run. Set false only when the user explicitly wants to save approval without starting generation.
brief_idYesID of the persisted brief to confirm

TDQS

A4.3/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, openWorldHint=true, idempotentHint=true, and destructiveHint=true, and the description aligns with and reinforces these. The description adds meaningful context beyond annotations: it explains idempotency behavior in detail ('Repeated calls return or resume the same durable execution') and the execute=true default nuance. Not a 5 because it doesn't detail what destructive side effects occur or any specific auth/precondition requirements, but with the annotation set present, this is solid coverage.

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 a single, dense paragraph of four sentences, each adding value: purpose, MCP semantics, brief_id scoping, and idempotency. It's front-loaded with the core purpose. Slightly less than a 5 because the MCP-phrase guidance is embedded in the middle rather than separated, and could be tightened, but there's no waste.

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 2-param tool with 100% schema coverage and no output schema (so no need to describe return values), the description covers purpose, idempotency, parameter semantics, and usage context. The only minor gap is not explaining what 'execute' actually does post-confirmation (what gets generated/started) or any rate-limits/duplication risks. Given the tool's simplicity, this is well-complete.

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 100%, so the baseline is 3. The description adds some context for the 'execute' parameter by explaining the MCP-default behavior, and clarifies the brief_id type (visible persisted brief). However, it doesn't add much beyond what the schema's own parameter descriptions already state; the schema description of 'execute' is quite thorough already. Baseline 3 is appropriate.

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 description clearly states what the tool does: 'approve and idempotently execute a visible persisted Uwear brief.' It uses a specific verb+resource combination and distinguishes itself from siblings like propose_brief and update_brief by focusing on the confirm+execute action. The brief_id scoping ('visible/latest BriefProposal') further disambiguates it.

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?

The description provides explicit guidance on MCP phrasing that should map to execute=true ('Confirm', 'looks good', 'run it', 'start', 'generate') versus when to set execute=false ('only when the user explicitly wants to save approval without starting generation'). It also references the related brief_id source (visible/latest BriefProposal), guiding which ID to use. This is explicit, actionable guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

copy_template_to_generate_node_configCopy Template to Generate NodeA
Read-onlyIdempotent
Inspect

Copy one generation-preset Template into a contract-typed, detached Production Workflow Generate-node config. The result does not update a Workflow and carries no live Template dependency; insert it through the canonical workflow version authoring tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesGeneration Template ID
contract_versionNoWorkflow contract to target; omit to use the current authoring contract

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, lowering the burden. The description adds valuable behavioral context beyond annotations: the result carries no live Template dependency, does not update a Workflow, and is meant for insertion through other authoring tools. This clarifies the 'read-only' nature as non-mutating to existing workflow resources.

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

Conciseness5/5

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

The description is a single dense sentence that front-loads the core operation and immediately states the most important constraints: detached, no workflow update, no live dependency, and insertion via canonical authoring tools. No wasted words.

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 tool with two well-documented parameters and safety-focused annotations, the description covers the essential context: what the output is, what it is not, and how it should be used downstream. It does not describe the exact return shape, but no output schema exists and the copy/config semantics make that less critical.

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 100%, so parameter meaning is fully carried by the schema. The description does not add new parameter-level details beyond the schema, but it does reinforce the conceptual role of contract_version through 'contract-typed' phrasing. Baseline 3 is appropriate.

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 and resource: copies a generation-preset Template into a contract-typed, detached Production Workflow Generate-node config. It clearly differentiates from sibling tools like save_template, get_template, and delete_template by emphasizing detachment and the absence of a live Template dependency.

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 clear usage context: the tool produces a detached config that should be inserted through the canonical workflow version authoring tools. It explicitly says it does not update a Workflow, which sets expectations, though it does not name specific alternative tools for when a live workflow update is desired.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_art_directionWrite Art Direction Markdown (Advanced)AInspect

Create a company ArtDirection markdown document. Use author_art_direction first when the user provides rough creative text or reference images. Use this direct writer only for already-structured markdown that follows the Variation Controls parser contract.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the ArtDirection
content_markdownYesComplete ArtDirection markdown document. Prefer author_art_direction for rough briefs. If writing directly, every reusable alternative that should rotate across generations must live under `## Variation Controls` as `###` controls with `A. Option` lines; do not leave selectable worlds, pose families, or shot-role plans only in prose.
reference_image_attachmentsNoAuthoring reference image attachments to keep with the ArtDirection. These are for iterating the markdown only, not generation-time references.

TDQS

A4.2/5.0
Behavior3/5

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

Annotations are all false, so no protective or destructive hints are present. The description adds the key nuance that this is a direct writer for already-structured markdown, but it does not disclose other behaviors such as validation, overwrite semantics, or return values. The parser contract is also repeated in the schema, so the marginal description value is moderate.

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

Conciseness5/5

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

The description is two sentences: the first states the purpose and the second gives usage guidance. It is front-loaded, scannable, and contains no filler, making it an exemplar of concise yet informative writing.

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 creation tool with no output schema and moderate complexity, the description covers the essential decision of when to use it and what input it expects. It could mention the result of the creation (e.g., saved entity) or any side effects, but the sibling tools and schema fill most gaps. A score of 4 reflects solid but not exhaustive completeness.

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 100% with detailed explanations for all three parameters. The description does not add extra parameter semantics beyond referencing the parser contract in content_markdown, so the baseline of 3 is appropriate.

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 description begins with 'Create a company ArtDirection markdown document,' using a specific verb and resource. It immediately distinguishes the tool from its sibling author_art_direction by noting when to prefer that alternative. This makes the purpose clear and uniquely positioned among the tools.

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?

The description explicitly states to use author_art_direction first for rough creative text or reference images, and to use this direct writer only for already-structured markdown that follows the Variation Controls parser contract. This provides clear when-to-use guidance and names the alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_avatar_from_referencesCreate Avatar from ReferencesA
Destructive
Inspect

Create one reusable avatar/model from an ordered set of generated avatar views, owned workspace files, and public image URLs. Each reference fills one durable slot. Traits are optional user-provided facts and are never inferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
buildNoOptional concrete physical build. Never inferred.
age_rangeNoOptional concrete age or age range. Never inferred.
height_cmNoOptional height in centimeters. Never inferred.
referencesYesOrdered reference sources for the new avatar.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate non-read-only and destructive hint, but the description adds behavioral context: references fill durable slots, traits are never inferred, and the avatar is reusable. This goes beyond annotations, though it doesn't elaborate on the destructive nature.

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

Conciseness5/5

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

Two sentences, front-loaded with the main purpose, no redundant info. Each sentence adds key information (inputs, slot concept, trait handling).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (nested objects, 5 params) and no output schema, the description omits return value and potential side-effect details like what happens on name collision. The core concept is well covered, but agent would benefit from knowing what is returned.

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 (80%), and the description clarifies semantic aspects not in the schema: references are ordered, slots are durable, and trait parameters (build, age, height) are never inferred. This adds meaning beyond the raw schema definitions.

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?

Clearly states the tool creates a reusable avatar/model from specific input types (generated views, workspace files, URLs). Uses a specific verb ('create') and resource ('avatar/model'), distinguishing it from sibling tools like generate_avatar.

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?

Describes the input composition (ordered references, optional traits) but provides no explicit when-to-use vs alternatives or exclusions. Contexts like 'generate_avatar' exist as siblings but the description doesn't differentiate when this tool should be chosen instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_credit_checkout_sessionBuy CreditsAInspect

Create a hosted Stripe Checkout URL for buying Uwear generation credits. Use only when the user explicitly asks to buy, add, top up, or purchase credits, or when they ask how to continue after insufficient credits. Do not call during photoshoot planning unless the user requested checkout. The tool only creates a payment link; the user must open and complete payment in Stripe.

ParametersJSON Schema
NameRequiredDescriptionDefault
creditsNoNumber of Uwear credits to purchase
user_agentNoOptional client user-agent recorded with checkout metadata
return_cancel_urlNoOptional checkout cancellation URL; defaults to the Uwear credits page
return_success_urlNoOptional checkout completion URL; defaults to the Uwear frontend

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate a mutating operation (readOnlyHint=false), and the description adds important behavioral context beyond that: 'The tool only creates a payment link; the user must open and complete payment in Stripe.' This clarifies that the tool does not finalize the purchase. However, it does not mention potential side effects like whether credits are reserved or any authorization requirements.

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

Conciseness5/5

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

The description is four sentences, each earning its place: purpose, usage, exclusion, and behavioral limitation. It is front-loaded with the core function and contains no redundant filler.

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?

The tool has no output schema, but the description implies the return is a Stripe Checkout URL and indicates user action is needed. This is sufficient for basic invocation. It lacks detail on the response format or any post-payment flow, but given the moderate complexity and strong annotations, completeness is adequate.

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 100% with every parameter documented. The description adds overall context but does not elaborate on parameter-specific semantics beyond the schema. Baseline 3 is appropriate since the schema carries the full parameter meaning.

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 description opens with a specific verb and resource: 'Create a hosted Stripe Checkout URL for buying Uwear generation credits.' This clearly distinguishes the tool from siblings like get_user_credits and estimate_cost. The scope is unambiguous.

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?

Explicit usage criteria are provided: 'Use only when the user explicitly asks to buy, add, top up, or purchase credits, or when they ask how to continue after insufficient credits.' It also states a clear exclusion: 'Do not call during photoshoot planning unless the user requested checkout.' This gives the agent strong decision guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_locationCreate LocationAInspect

Create a reusable location/scene reference from an image URL. If no description is supplied, the backend analyzes the image. Use the returned location_id in propose_brief/update_brief.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the reusable location/scene reference
tag_idsNoOptional tag IDs to assign after creating the location
image_urlYesURL of the location/reference image
descriptionNoOptional location description. If omitted, the system analyzes the image.
thumbnail_urlNoOptional thumbnail URL
source_metadataNoOptional provenance metadata for the source image

TDQS

A4.2/5.0
Behavior4/5

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

With annotations only providing false hints for readOnly, openWorld, idempotent, and destructive, the description adds meaningful behavior: the backend analyzes the image if description is omitted, and the tool returns a location_id for reuse. This goes beyond the schema and annotations, though it doesn't disclose potential side effects or validation rules.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the core purpose, and every clause earns its place. It efficiently conveys creation, the optional-description behavior, and the output usage without extraneous words.

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 create tool with 6 parameters and no output schema, the description covers the core workflow (image URL -> location reference), the optional-description behavior, and the required output hint (location_id). It stops short of describing full response structure or error cases, but the essential context for an agent to invoke it correctly is present.

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?

The input schema already provides descriptions for all 6 parameters, including the optional description field and its image-analysis fallback. The tool description repeats this internal behavior but does not add new parameter-level meaning. Since schema coverage is 100%, the score is at baseline 3, with no significant value added by the description.

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 description uses a specific verb-resource pair ('Create a reusable location/scene reference') and clearly differentiates from sibling tools like get_location and list_locations by focusing on creation. It also states the intended downstream use in propose_brief/update_brief, which solidifies its unique role.

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 explicitly instructs to use the returned location_id in propose_brief/update_brief, giving clear context for when this tool is appropriate. It does not list exclusions or alternatives, but the workflow reference implies the use case sufficiently.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_outfit_from_garment_idsCreate OutfitAInspect

Create an outfit from existing garment IDs. Pairs saved garments together into a saved outfit without uploading new images.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional human-readable outfit name
is_activeNoWhether the outfit should be immediately active
clothing_item_idsYesIDs of clothing items to combine into an outfit

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already communicate that the tool is mutating (readOnlyHint=false) and non-destructive (destructiveHint=false). The description adds minimal context by clarifying that it pairs existing garments without uploading new images, but it does not disclose additional side effects, permissions, or return behavior beyond what is implied.

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

Conciseness5/5

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

The description consists of two concise sentences, with the primary purpose front-loaded and no redundant or extraneous information. Every word earns its 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 simple create operation with full schema coverage and clear annotations, the description adequately explains the tool's functionality. The lack of an output schema is not a major gap given the straightforward nature of the operation.

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 100% for all three parameters, so the description does not need to add parameter-level details. The description implicitly references the purpose of clothing_item_ids but adds no new semantics beyond the schema.

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 description clearly states the action (create), the resource (outfit), and the source (existing garment IDs). It also distinguishes from upload-related tools by noting that no new images are uploaded, making the purpose unambiguous.

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?

The description implies usage when garment IDs already exist and an outfit needs to be composed, but it does not explicitly state when not to use the tool or mention alternatives like propose_outfits or upload_garment_from_chat_file. No exclusions are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_tagCreate TagAInspect

Create a new tag for organizing assets (garments, models, outfits, files, results, locations). Requires an active company workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTag name (unique within the company)
colorNoOptional hex color, e.g. '#22C55E'

TDQS

A4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint=false and destructiveHint=false. The description adds the workspace requirement but doesn't disclose uniqueness enforcement or idempotency-related behavior (e.g., what happens if a duplicate name is submitted). No contradiction with annotations.

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

Conciseness5/5

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

The description is a single front-loaded sentence that communicates the core functionality. The asset type list is slightly detailed but remains compact and useful.

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 simple create tool with full schema coverage and no output schema, the description and schema together provide sufficient guidance. It could mention return values or duplicate-name behavior, but these are not critical for tool selection and invocation.

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 100%, with both parameters fully described (name with uniqueness and maxLength; color with format example). The description adds no parameter-specific meaning beyond listing asset types, so baseline 3 is appropriate.

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 description clearly states the action ('Create a new tag'), the resource ('for organizing assets'), and enumerates the asset types. This distinguishes it from sibling tools like list_tags and get_items_by_tag, which have different purposes.

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 provides a clear precondition ('Requires an active company workspace') and indicates a broad use case (organizing assets). It doesn't explicitly name alternatives or when-not-to-use scenarios, but the context is sufficient for a simple create tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_templateDelete TemplateA
Destructive
Inspect

Permanently delete a library template. Owner-only templates must be deleted through their owning resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
template_idYesTemplate ID

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and readOnlyHint=false. The description adds the behavioral trait of permanence ("Permanently delete") and an ownership constraint, which are not explicitly stated in annotations. This goes beyond the minimal annotation information.

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

Conciseness5/5

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

The description is two concise sentences, clearly front-loaded with the action and resource. No redundant phrasing or filler. Every word adds value.

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 simple delete tool with one parameter and no output schema, the description covers the essential context: permanent deletion and a key caveat about owner-only templates. It could mention error conditions or permissions, but given the tool's simplicity, it is sufficiently complete.

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?

The schema covers 100% of parameters with a single template_id and its description. The tool description does not add significant semantic detail beyond the schema, and the schema already describes the template as a 'company template.' The parameter is straightforward, so the baseline of 3 applies.

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 description clearly states the action: "Permanently delete a library template." This uses a specific verb (delete) and resource (library template), which directly distinguishes it from sibling tools like get_template, save_template, and list_templates.

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 includes an important usage exclusion: "Owner-only templates must be deleted through their owning resource." This provides guidance on when NOT to use this tool, implying an alternative exists. It could be improved by explicitly stating the general use case (delete any library template) but the purpose makes it evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

duplicate_art_directionDuplicate Art DirectionAInspect

Duplicate a system or company ArtDirection into an editable company copy.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name for the copy
art_direction_idYesThe ArtDirection ID to duplicate

TDQS

A3.7/5.0
Behavior3/5

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

Annotations indicate a non-read-only, non-destructive mutation (readOnlyHint=false, destructiveHint=false). The description adds context that the copy is 'editable' and that the source can be system or company, but it does not disclose details like whether the original remains unchanged, permissions required, or potential side effects. With annotations providing baseline safety info, this is adequate but not rich.

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

Conciseness5/5

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

A single sentence that is direct and complete. It conveys the core purpose without extraneous detail, making it easy to parse and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description should at least hint at the return value, but it only says the result is an 'editable company copy' without specifying what is returned (e.g., the new copy's ID). It also omits whether the original is preserved, though that is implied by 'duplicate.' For a simple tool, this is minimally sufficient but leaves some gaps.

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 covers both parameters (art_direction_id and name) with descriptions, achieving 100% coverage. The description does not add any additional meaning about parameter usage beyond what the schema already provides, so the baseline of 3 is appropriate.

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 description clearly states the action (duplicate), the resource (system or company ArtDirection), and the outcome (an editable company copy). This distinguishes it from sibling tools like create_art_direction or update_art_direction by focusing on the duplication aspect.

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?

The description implies when to use this tool (when you want an editable company copy of an existing ArtDirection) but does not explicitly mention alternatives or exclude other tools. It lacks direct guidance such as 'use instead of create_art_direction when you want a copy based on an existing system or company ArtDirection.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

estimate_costEstimate Credit CostB
Read-onlyIdempotent
Inspect

Estimate credit cost for an operation.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelNoSpecific model to use
durationNoVideo duration in seconds (video only, e.g. 4, 5, 6, 8, 10)
num_itemsNoNumber of items/images
operationYesOperation: generate, edit, upscale, video
resolutionNoOutput resolution when supported by the selected image or video model
generate_audioNoWhether to generate audio (video only, doubles cost for most models)

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive, so the agent knows it is a safe calculation. The description adds no behavioral context beyond the name, such as whether the estimate is approximate or depends on current pricing. It does not contradict the annotations.

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

Conciseness5/5

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

The description is a single, focused sentence with no extraneous words. It is front-loaded with the verb and object. While it is brief, this is not a flaw; it earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having six parameters and no output schema, the description does not clarify what the tool returns (e.g., a numeric credit amount, a breakdown) or how the estimate is computed. The annotations cover safety but not functional expectations. This leaves the agent guessing about the tool's output.

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?

The input schema provides 100% coverage of all six parameters with descriptive details (e.g., operation enum values, duration constraints, generate_audio doubling cost). The description adds no additional parameter semantics, so the baseline score of 3 applies.

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?

The description clearly states the tool's function: estimating credit cost for an operation, using the specific verb 'estimate' and resource 'credit cost'. It is distinct from sibling tools like get_user_credits and create_credit_checkout_session, which deal with balance and purchase rather than cost estimation. However, it lacks detail on the range of operation types covered.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. There is no mention of prerequisites, such as having an operation in mind, or exclusions like needing to check actual credit balance. Sibling tools are not referenced.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

finish_local_garment_uploadFinish Local Garment UploadAInspect

Second step only for local garment images already prepared with prepare_local_garment_upload and uploaded to every returned target. Classify each upload_handle as a full/detail front/back/side asset. Do not use this for ChatGPT attachments or arbitrary public URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
garmentsYesGarments assembled from owned upload handles returned by prepare_local_garment_upload

TDQS

A4.2/5.0
Behavior3/5

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

Annotations are all false (readOnlyHint: false, destructiveHint: false), so the description carries the disclosure burden. It explains the prerequisite and classification action but does not reveal side effects like whether it finalizes the garment, consumes handles, or is idempotent. Some scope constraints are added, but deeper behavior remains opaque.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the prerequisite ('Second step only'), and every sentence adds value: prerequisite, action, and exclusion. No fluff or redundancy.

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?

Given no output schema, the description doesn't need to explain return values. It covers the two-step flow, the requirement for prepared/uploaded handles, the classification scope, and explicit non-uses. It could mention that it ultimately creates/updates garment records, but the schema's garments array implies this. Fairly complete for an agent.

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 100% with detailed field explanations (e.g., upload_handle description, asset_kind enum, processing_mode). The description only restates the classification concept (full/detail front/back/side) without adding new parameter-level semantics beyond what the schema already provides. Baseline 3 applies.

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 description clearly states the tool's purpose: 'Second step only for local garment images already prepared with prepare_local_garment_upload' and 'Classify each upload_handle as a full/detail front/back/side asset.' It explicitly distinguishes itself from tools for ChatGPT attachments or public URLs, making it highly specific.

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?

The description gives explicit usage conditions: 'Second step only' and 'uploaded to every returned target.' It also includes a clear exclusion: 'Do not use this for ChatGPT attachments or arbitrary public URLs.' This effectively tells the agent when to use it versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

generate_avatarGenerate Avatar ReferenceA
Destructive
Inspect

Generate reusable avatar/model references through the same creator path as the Uwear app. The default view is upper_body_front, a clean bust identity anchor. For a draft multi-view avatar, generate the bust first, pass its result URL in identity_reference_urls when generating each slot view, then save the chosen results together with save_generated_avatar. Traits are optional user-given facts and are never guessed. If the user wants help writing the person description, call build_avatar_prompt first only for that purpose; if the user's wording is already intentional, pass it directly here.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional name to carry with the avatar generation
viewNoReference view to generate. Defaults to the upper-body identity anchor.upper_body_front
buildNoOptional concrete physical build. Never inferred.
modelNoOptional image model slug or display name. Defaults to the cheapest active image generation model available to the account.
promptYesDescription of the person to render as a reusable avatar reference
age_rangeNoOptional concrete age or age range. Never inferred.
avatar_idNoOptional existing avatar whose anchor fixes identity for a slot view. Not required when identity_reference_urls are supplied.
height_cmNoOptional height in centimeters. Never inferred.
expressionNoExact expression instruction for a supported reference view. Replaces the configured neutral expression default.
num_imagesNoNumber of avatar candidate images to generate
identity_reference_urlsNoPerson-image URLs that fix identity for a slot view. In a draft flow, pass the generated bust URL here before the avatar has been saved.

TDQS

A4.5/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations, especially that traits are user-given facts and never guessed, and that the default is a bust identity anchor. The draft workflow also implies that results are image URLs that must be saved later, which is useful. It does not fully explain destructive or cost-related behavior, but destructiveHint already covers the safety signal.

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 purpose and stays relatively compact given the tool's complexity. Each sentence contributes either workflow guidance, policy clarification, or sibling routing. Minor redundancy exists because the default view and never-inferred rules are also reflected in parameter descriptions, but this does not significantly hurt readability.

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, the description provides a solid workflow, identifies the relevant sibling, and clarifies inference policy. It could more explicitly describe the return shape or when to prefer create_avatar_from_references or add_avatar_reference, but the core call-and-flow information an agent needs is present.

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 description coverage is 100%, so the schema already documents each parameter. The description adds value by explaining the identity_reference_urls draft-flow semantics, emphasizing that traits are never guessed, and framing the default view as a clean identity anchor, which is not obvious from the 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 description states a specific action and resource: generating reusable avatar/model references through the Uwear creator path, with a clearly defined default view. It also distinguishes itself from related tools by naming build_avatar_prompt and save_generated_avatar as separate steps rather than the same action.

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?

The description gives explicit when-to-use guidance: call build_avatar_prompt first only if the user needs help writing the description, otherwise pass wording directly. It also explains the draft multi-view workflow step by step, including when to pass identity_reference_urls and when to call save_generated_avatar.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_art_directionGet Art DirectionB
Read-onlyIdempotent
Inspect

Get a selectable ArtDirection by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
art_direction_idYesThe ArtDirection ID to retrieve

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds the term 'selectable,' which suggests a filtering or state-related behavior not present in annotations, but it is vague. No additional details about not-found behavior or response format are provided.

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

Conciseness5/5

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

The description is a single, concise sentence (7 words) that is immediately understandable. There is no fluff or redundant information, and the key information (get by ID) is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple get-by-ID tool with one parameter and strong annotations, the description is largely sufficient. However, the term 'selectable' introduces ambiguity about whether non-selectable ArtDirections are excluded, and without an output schema, the description does not clarify the return structure beyond implying the ArtDirection object. This leaves some context missing.

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?

The input schema already fully describes the single parameter (art_direction_id with type and description). The description's 'by ID' reinforces the parameter's purpose but adds no new semantic detail. Baseline of 3 applies due to 100% schema coverage.

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?

The description clearly states the action (Get) and the resource (ArtDirection) with a specific scope (by ID). It distinguishes from list_art_directions by implying single retrieval, though it doesn't explicitly differentiate from other get_* tools. The word 'selectable' adds a minor qualifier but the core purpose is clear.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool versus alternatives like list_art_directions or get_art_direction_authoring_job. The description only states what it does, not the context or exclusions. There is no mention of prerequisites or when to prefer this over other retrieval methods.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_art_direction_authoring_jobGet Art Direction Draft StatusA
Read-onlyIdempotent
Inspect

Read an asynchronous ArtDirection authoring job. Poll the job ID returned by author_art_direction or iterate_art_direction until status is done or failed. A done job includes the authored markdown and, when save=true, the saved art_direction_id. Iteration jobs also expose their source ID, expected revision, and apply outcome. A failed job includes per-source status and safe failure reason.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYesArtDirection authoring job ID returned by author_art_direction

TDQS

A4.7/5.0
Behavior5/5

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

The description goes well beyond the annotations (readOnly, idempotent, non-destructive) by detailing what a done job includes (authored markdown, optional saved art_direction_id), what iteration jobs expose (source ID, expected revision, apply outcome), and what a failed job provides (per-source status, safe failure reason). This gives the agent a clear behavioral model for expected outputs and failure modes.

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

Conciseness5/5

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

The description is compact and front-loaded, opening with the core purpose in one sentence. Each subsequent sentence adds distinct value (polling semantics, done job payload, iteration specifics, failure handling). No superfluous words or repetition.

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 absence of an output schema, the description sufficiently explains return values and states: done vs failed, what each contains, and special cases for iteration jobs. It also covers the async polling pattern and save flag behavior, making the tool's behavior fully understandable for a complex async operation.

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?

The schema already describes job_id with 100% coverage, but the description adds important context by clarifying that the job ID can come from either author_art_direction or iterate_art_direction, extending the schema's mention of only the former. This enriches the agent's understanding of valid inputs.

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 description clearly states the tool's purpose: to read an asynchronous ArtDirection authoring job. It uses a specific verb ('Read') and resource ('ArtDirection authoring job'), and distinguishes itself from sibling tools like get_art_direction by focusing on polling job status rather than fetching a direct entity.

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 provides clear usage context: poll the job ID returned by author_art_direction or iterate_art_direction until done/failed. It names the source functions and describes polling behavior. However, it does not explicitly state when not to use this tool or mention alternatives like get_art_direction for direct retrieval, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_briefReopen Saved BriefA
Read-onlyIdempotent
Inspect

Load an existing persisted brief unchanged by a real positive brief_id. Only use when the user supplied that brief_id or after propose_brief/update_brief returned it and the user wants to re-open the same brief. Never use brief_id=0, a placeholder, or a guessed ID. Never use this to start a new photoshoot. When the user asks to modify, rewrite, add steps to, or show an adjusted brief, call update_brief with the complete updated brief instead of looping on get_brief.

ParametersJSON Schema
NameRequiredDescriptionDefault
brief_idYesReal persisted brief ID to load unchanged. Do not use 0, guessed IDs, or this tool for editing a visible brief.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnly/idempotent/non-destructive, but the description adds essential behavioral context: it loads 'unchanged,' rejects placeholder/guessed IDs, and is not for starting new shoots or editing. This goes beyond the annotation flags without contradicting them.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the core function, then usage rules, then exclusions. Every sentence adds necessary guidance with zero fluff or redundancy.

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?

Despite having no output schema, the description fully covers the tool's purpose, constraints, and relationship to alternatives (update_brief). With one well-documented parameter and rich annotations, no critical information is missing.

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 coverage is 100% and the schema parameter description already provides semantics: 'Real persisted brief ID to load unchanged. Do not use 0, guessed IDs...' The description reiterates these constraints but does not add significant new meaning beyond usage context, which is already covered by guidelines. Baseline 3 is appropriate.

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 description opens with a specific verb+resource: 'Load an existing persisted brief unchanged by a real positive brief_id.' It clearly distinguishes from siblings by explicitly stating when to call update_brief instead of looping on get_brief.

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?

The description provides explicit when-to-use conditions ('Only use when the user supplied that brief_id or after propose_brief/update_brief returned it') and when-not-to-use ('Never use this to start a new photoshoot' and 'call update_brief instead' for modifications). It names the alternative tool update_brief directly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_connection_identityGet Connection IdentityA
Read-onlyIdempotent
Inspect

Return the profile ID and active company ID used by this authenticated MCP connection. Use this before a paid operation when a release or audit must prove the connection is scoped to the intended Uwear account.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare the operation as read-only, idempotent, and non-destructive. The description adds useful behavioral context by specifying exactly what it returns and that it is scoped to the authenticated connection, without contradicting the annotations.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence front-loads the core function, and the second adds the key usage context. Every sentence earns its 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 zero-parameter getter with rich annotations and no output schema, the description adequately explains both the return values and the operational context. Nothing critical is missing for an agent to decide when and how to invoke it.

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?

The tool has zero parameters and the schema is fully self-documenting with an empty properties object. The description therefore has no parameter burden to carry, and a baseline of 4 for zero-parameter tools is appropriate.

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 description states a specific verb ('Return') and resource ('profile ID and active company ID used by this authenticated MCP connection'), making it clear what the tool does. This distinguishes it from the many get_* siblings, which operate on different resources.

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 explicitly instructs when to call this tool: 'Use this before a paid operation when a release or audit must prove the connection is scoped to the intended Uwear account.' It does not explicitly state when not to use it or name alternatives, but no sibling appears to overlap with its purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_garmentGet GarmentA
Read-onlyIdempotent
Inspect

Get a specific garment by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
garment_idYesThe garment ID to retrieve

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety profile is covered. The description adds no extra behavioral context (e.g., not-found behavior, return details), but with annotations present, the value added is limited. It does not contradict annotations.

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

Conciseness5/5

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

One short sentence that is front-loaded and earns its place. No wasted words or redundant restating of the tool name.

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?

The tool is a simple get-by-ID with one parameter and no output schema. Annotations cover the safety profile. The description plus schema is sufficient for an agent to invoke it correctly; no additional detail is essential.

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 100%: the single parameter garment_id is fully described as 'The garment ID to retrieve'. The description 'a specific garment by ID' adds no new semantic meaning beyond what the schema already provides, so baseline 3 is appropriate.

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 description 'Get a specific garment by ID' clearly states the verb (get), resource (garment), and singular scope (specific, by ID). It distinguishes this tool from siblings like list_garments, which retrieves multiple garments.

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?

The description implies usage when you need one garment by ID, but it does not explicitly state when to use this tool versus alternatives like list_garments or update_garment. No when-not-to-use or alternative names are provided, so it only meets the implied usage level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_generation_resultsGet Generation ResultsA
Read-onlyIdempotent
Inspect

Look up generation results by exact IDs, filters, or hybrid image/name/SKU search. Returns labeled native ImageContent previews; use them directly and never Markdown-embed result URLs. They are display previews, not originals: url/download_url are originals, preview_url is the fallback link, and poster_url/thumbnail_url is a video poster. Every result includes generation_result_id and the response includes generation_result_ids; use those exact integers for queue_generation_result_qa/read_generation_result_qa or as durable generation_result command.source values in canonical edit, upscale, and video commands. Confirmation-gated clients use propose_brief(commands=[...], execute_immediately=true) when the user asked to run now, update_brief for a complete command replacement, or confirm_brief(execute=true) for a visible brief. Pass generation_result_id to fetch one result or generation_id to list a job's results. Returns raw payload when available so prior prompts can be recovered. Use start_date/end_date for requests like 'last week'.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoFilter by type: 'Image', 'Edit', 'Upscale', 'Video'
pageNoPage number for pagination
limitNoNumber of items per page
queryNoHybrid search across generated image content, originating item names, and SKUs.
tag_idsNoFilter by tag IDs (results must have at least one)
decisionNoFilter by the unified result verdict.
end_dateNoFilter results created on or before this ISO date/datetime, e.g. 2026-04-27.
model_idsNoFilter results to images generated with these AI models
avatar_idsNoFilter results to images generated with these avatars
outfit_idsNoFilter results to images generated with these outfits
start_dateNoFilter results created on or after this ISO date/datetime, e.g. 2026-04-20.
qa_statusesNoFilter by QA statuses, e.g. pending, processing, completed, error.
location_idsNoFilter results to images generated with these locations
generation_idNoFilter by parent generation ID (lists all result images from one generation job)
decision_sourceNoFilter by the verdict source.
art_direction_idsNoFilter results to images generated with these art directions
clothing_item_idsNoFilter results to images generated with these clothing items
generation_result_idNoLook up a single result image by its generation_result_id (the exact integer ID required by QA/edit/upscale/video tools). Returns that one result directly.

TDQS

A4.8/5.0
Behavior5/5

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

Despite readOnlyHint and idempotentHint annotations, the description reveals non-obvious behavior: 'They are display previews, not originals: url/download_url are originals, preview_url is the fallback link, and poster_url/thumbnail_url is a video poster.' It also warns against Markdown-embedding result URLs and mentions that raw payload is returned when available, providing significant context beyond 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 long (about six sentences) but each sentence provides necessary information for correct usage, such as URL semantics, ID handling, and confirmation-flow guidance. It is front-loaded with the purpose but the later section on confirmation clients could be separated for better scannability. Still, no sentence is wasted.

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 an 18-parameter tool with no output schema, the description thoroughly covers retrieval modes, result content (labeled ImageContent previews), URL differentiation, downstream ID usage, and date-filter examples. It addresses confirmation workflows and raw payload recovery, making it nearly self-sufficient for an agent to use this tool and understand its outputs.

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?

The schema covers all 18 parameters, so the baseline is 3. The description adds value by clarifying the generation_result_id vs generation_id usage and emphasizing that these integers are required for QA/edit/upscale/video commands. It also gives a semantic example for start_date/end_date, slightly exceeding what the schema provides.

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 description opens with 'Look up generation results by exact IDs, filters, or hybrid image/name/SKU search', clearly stating the action and resource. It further differentiates from siblings by explaining the distinction between generation_result_id (single result) and generation_id (list a job's results), which prevents confusion with get_generation_status or QA tools.

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?

The description explicitly tells when to use downstream tools: 'Confirmation-gated clients use propose_brief(commands=[...], execute_immediately=true) when the user asked to run now, update_brief for a complete command replacement, or confirm_brief(execute=true) for a visible brief.' It also provides clear guidance for using generation_result_id vs generation_id and gives a real-world example for start_date/end_date ('last week').

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_generation_statusGet Generation StatusA
Read-onlyIdempotent
Inspect

Check generation job status. Completed results may include labeled native ImageContent previews; use them directly and never Markdown-embed result URLs. They are display previews, not originals: url/download_url are originals, preview_url is the fallback link, and poster_url/thumbnail_url is a video poster. Returns status, raw payload, settings, avatar_id, model_id, model_slug, use_case, net credits_charged, credits_refunded, estimated_processing_seconds, and status_guidance. Failed jobs also return a safe error_message and error_type (user, transient, or provider). Status can remain Created while queued/preparing; avoid tight polling loops. UI 'Gemini Pro' maps to model_slug nano-banana-pro or nano_banana_pro_clothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
generation_idYesThe generation ID to check. Returns raw payload, generation_setting, avatar_id, model_id, model_slug, and use_case. UI 'Gemini Pro' maps to model_slug nano-banana-pro or nano_banana_pro_clothing.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds substantial behavior beyond that: preview URLs are display-only fallbacks, failed jobs return safe error details, status can remain Created while queued, and UI model names map to specific model_slug values. No contradictions with 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 front-loaded with a clear one-line purpose and then packs dense, useful details about previews, error types, and status behavior. It is somewhat long and repeats the model_slug mapping already present in the schema, but each sentence still contributes operational value.

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 single-parameter status tool with no output schema, the description is complete: it covers status transitions, returned fields, failure payloads, preview URL semantics, and polling guidance. An agent has enough context to invoke the tool correctly and interpret its response.

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 100% for the single generation_id parameter, so the schema already documents the parameter. The description does not add new meaning about generation_id itself; it lists return fields and behaviors, which is useful but not parameter-specific. Baseline 3 applies.

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 description opens with a specific verb and resource: 'Check generation job status.' It clearly distinguishes this status-checking tool from result-fetching siblings like get_generation_results by focusing on job progression and return metadata rather than final outputs.

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 provides practical usage guidance: avoid tight polling loops while status remains Created, use completed previews directly, and never Markdown-embed result URLs. It does not explicitly name alternative tools or give exclusion criteria, but the intended usage context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_items_by_tagGet Items by TagA
Read-onlyIdempotent
Inspect

Get all item IDs tagged with a specific tag, grouped by type. Use after list_tags for no-UI MCP requests like 'use my clothes tagged summer26'; then pass the resulting clothing_item IDs as garment_ids to propose_brief instead of opening request_user_context.

ParametersJSON Schema
NameRequiredDescriptionDefault
tag_idYesTag ID to look up
item_typesNoFilter to specific types: 'clothing_item', 'avatar', 'outfit', 'generation_result', 'location'. Omit to get all.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description only needs to add context. It does by noting 'grouped by type' and the no-UI workflow context, which informs expected behavior. It does not contradict annotations and adds some value beyond them.

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

Conciseness5/5

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

Two crisp sentences: the first states the core function, the second provides workflow context. No wasted words, information is front-loaded and immediately relevant.

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 read-only lookup with two parameters and rich sibling context, the description covers the workflow and return type sufficiently. It could elaborate on the exact grouping structure, but the absence of an output schema is partially mitigated by the description's clarity.

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 coverage is 100% with descriptions for both parameters, including allowed values for item_types. The description does not add significant meaning beyond the schema, so baseline 3 is appropriate.

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 description uses specific verb+resource ('Get all item IDs tagged with a specific tag, grouped by type'), clearly distinguishing it from sibling tools like list_tags or propose_brief. The workflow reference further clarifies its unique role.

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?

Explicitly states when to use ('Use after list_tags for no-UI MCP requests'), provides a concrete example ('use my clothes tagged summer26'), and names an alternative ('instead of opening request_user_context'), giving strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_locationGet LocationA
Read-onlyIdempotent
Inspect

Get a reusable location/scene reference by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
location_idYesThe location ID to retrieve

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds the context that the location is 'reusable' and a 'scene reference', but does not disclose any additional behavioral traits such as error handling or response details.

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

Conciseness5/5

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

The description is a single, front-loaded sentence that communicates exactly what the tool does with no wasted words. Every word adds value.

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 simple single-parameter read operation with strong annotations, the description is nearly sufficient. It clearly identifies the resource and method, though a brief note about the return value would make it fully complete.

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 coverage is 100% and the only parameter 'location_id' is clearly described in the schema. The description adds no new parameter information beyond 'by ID', so it does not elevate above the baseline for full schema coverage.

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 description uses a specific verb 'Get' with a clear resource 'reusable location/scene reference' and method 'by ID', making its function unambiguous. It naturally distinguishes itself from sibling tools like list_locations and create_location by implying a single item lookup.

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

Usage Guidelines2/5

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

The description implies usage (retrieve a location when you have its ID) but provides no explicit when-to-use guidance or mention of alternatives like list_locations for browsing. There is no guidance on when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_outfitGet OutfitA
Read-onlyIdempotent
Inspect

Get one saved outfit by ID, including its member garments.

ParametersJSON Schema
NameRequiredDescriptionDefault
outfit_idYesID of the outfit to retrieve

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds meaningful behavioral context beyond annotations by stating that the response includes the outfit's member garments, which is valuable given there is no output schema.

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

Conciseness5/5

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

A single sentence delivers the essential message with no filler. The subject and action are front-loaded, and every word earns its 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 simple single-ID read operation with strong annotations and full schema coverage, the description is complete. It clarifies the return composition ('member garments'), which is the main missing piece in the absence of an output schema.

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 100% and the outfit_id parameter is already well-documented with type, minimum, and meaning. The tool description adds no additional parameter semantics, so the baseline of 3 applies.

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 description uses a specific verb ('Get') and resource ('one saved outfit by ID') with an added qualifier ('including its member garments') that distinguishes it from list_outfits and get_garment. The scope is precise and immediately understandable.

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 clearly implies this tool is for retrieving a single saved outfit when the ID is known, which differentiates it from sibling tools like list_outfits. It provides clear context but does not explicitly name alternatives or state when-not-to-use conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_templateGet TemplateA
Read-onlyIdempotent
Inspect

Load one canonical company template by ID or public t-xxxx share code. Pass expected_template_kind when the caller requires a generation_preset or batch_workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
share_codeNoPublic t-xxxx share code
template_idNoTemplate ID
expected_template_kindNoOptional expected kind. A mismatch returns both expected and actual kinds.

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the canonical-company scope and the two lookup paths, but doesn't disclose return shape, error behavior, or the exact-one-identifier expectation.

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

Conciseness5/5

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

Two sentences, front-loaded with the primary action and identifier modes, followed by the one conditional parameter note. No filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With only three optional parameters and rich schema descriptions, the description is mostly sufficient, but it does not state that exactly one of template_id or share_code is needed, nor what a successful load returns. Since there is no output schema, a bit more return-value clarity would improve completeness.

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 100%, so the baseline is 3. The description reinforces when expected_template_kind matters but adds no new meaning beyond the schema's own descriptions of share_code, template_id, and the expected-kind mismatch behavior.

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 description states a specific verb ('Load'), a specific resource ('one canonical company template'), and two concrete identifier modes (ID or public t-xxxx share code). This clearly separates it from siblings like list_templates, save_template, and delete_template.

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?

It explicitly tells the caller when to supply expected_template_kind ('when the caller requires a generation_preset or batch_workflow'). It doesn't explicitly name alternative tools or exclusion cases, but the single-template load intent is clear enough for tool selection among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_user_creditsGet Credit BalanceA
Read-onlyIdempotent
Inspect

Get user's current credit balance.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds the context that it retrieves the 'current' balance for the user, which is useful but minimal. It does not contradict annotations.

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

Conciseness5/5

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

The description is a single, clear sentence with no wasted words. It is immediately understandable and well-structured.

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 simple read-only tool with no parameters and rich annotations, the description sufficiently communicates the operation. It does not describe the return format, but given the low complexity, this is an acceptable 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?

The tool has zero parameters and schema coverage is trivially 100%, so the baseline is 4. The description adds no parameter details because there are none to describe.

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?

The description clearly states a specific verb ('Get') and resource ('user's current credit balance'), which distinguishes it from related tools such as create_credit_checkout_session and estimate_cost. It is slightly more specific than the title, though it does not explicitly mention alternatives.

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

Usage Guidelines2/5

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

No guidance is provided about when to use this tool versus alternatives. The description does not mention any exclusions or context for use, leaving the agent to infer from the name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

iterate_art_directionImprove Art DirectionAInspect

Queue feedback-driven revision of an existing ArtDirection without resending its markdown. Existing authoring references are included automatically. Use save=false for a reviewable draft, or save=true to update the same company ArtDirection with stale-edit protection. System ArtDirections support drafts only. Poll get_art_direction_authoring_job for the result.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoOptional rename request
saveNoFalse returns an unsaved revision draft; true updates this same company ArtDirection
sourcesNoOptional new supported authoring sources such as text, public URLs, or uploaded files
feedbackYesWhat the ArtDirection author should preserve, change, add, or remove
image_urlsNoDraft-only new visual sources; use persistent attachments when save=true
art_direction_idYesExisting ArtDirection ID to revise
reference_image_attachmentsNoNew persistent authoring references to add alongside existing references

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses important behavioral traits beyond the annotations: it is a queued/asynchronous operation, it preserves existing authoring references automatically, save=true includes stale-edit protection, and system ArtDirections have draft-only restrictions. This adds significant context that the annotations alone do not convey.

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

Conciseness5/5

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

The description is four sentences, front-loaded with the primary action, and every sentence contributes distinct value: queueing behavior, automatic references, save semantics, system restriction, and polling instruction. No wasted words or redundancy with the schema.

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 absence of an output schema, the description appropriately directs users to poll get_art_direction_authoring_job for the result, making the async flow complete. It also covers the key edge cases (system drafts only, stale-edit protection) and the distinction between draft and saved updates, making the tool's behavior clear without needing more details.

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 parameter-specific meaning by clarifying the save=true/false semantics (draft vs. permanent update) and the system ArtDirection draft-only restriction. It also clarifies that existing references are included automatically, which supplements the optional nature of sources and reference_image_attachments parameters.

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 description clearly states the tool queues a feedback-driven revision of an existing ArtDirection without resending markdown, which is a specific verb+resource action. It distinguishes itself from siblings like create_art_direction and update_art_direction by emphasizing the feedback-driven iterative nature and automatic inclusion of existing references.

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?

Explicit usage guidance is provided: use save=false for a draft, save=true to update the same company ArtDirection with stale-edit protection, and system ArtDirections support drafts only. It also directs the user to poll get_art_direction_authoring_job for results, clarifying the expected follow-up workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_art_directionsList Art DirectionsA
Read-onlyIdempotent
Inspect

List selectable ArtDirections as compact summaries: visible system ArtDirections plus company ArtDirections. Use query to match exact names and natural-language creative requests. Use this as the catalog step before choosing an art_direction_id for a brief; if there is no clear match, fall back to the user's phrase as prompt/creative_context. Use get_art_direction for the full markdown document before reusing one in a brief.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
limitNoNumber of compact ArtDirection summaries per page
queryNoHybrid search across saved ArtDirection names and creative content.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds behavioral context about the returned format (compact summaries), inclusion of system and company ArtDirections, and query behavior for natural-language requests, which is useful beyond annotations.

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

Conciseness5/5

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

The description is three sentences, front-loaded with the primary function and using each sentence for distinct guidance: output scope, query usage, and follow-up action. No fluff or repetition.

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?

The tool is a simple list operation with optional parameters and no output schema, but the description covers what is returned (compact summaries), what is included, how to use it in the workflow, and where to go for full details. It is fully contextualized within its sibling set.

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 coverage is 100%, so the schema already documents page, limit, and query. The description adds slight nuance by explaining query can match exact names and natural-language creative requests, but this largely mirrors the schema's 'hybrid search' description, so a baseline score is appropriate.

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 description clearly states it lists selectable ArtDirections as compact summaries, specifying the scope (visible system plus company ArtDirections). This distinguishes it from get_art_direction, which is referenced for full documents.

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?

It explicitly positions the tool as the catalog step before choosing an art_direction_id for a brief and advises a fallback to the user's phrase if no match. It also directs users to get_art_direction for full markdown, providing clear when-to-use and alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_avatarsList AvatarsA
Read-onlyIdempotent
Inspect

List the user's avatars: the reusable people who wear the garments, called 'models' or 'mannequins' in fashion terms (not the AI engines — for those, use list_models). Supports structured filters or query for hybrid name/metadata/image-attribute search. Set include_image_url=true when the avatar image itself is needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
sortNoSort order: 'field:direction', e.g. 'created_at:desc'. Default: created_at:desc
limitNoNumber of items per page
queryNoHybrid search across avatar/model names, metadata, and visual attributes.
tag_idsNoFilter to avatars with any of these tags
end_dateNoFilter: created on or before this date (ISO format)
avatar_idsNoFilter to specific avatar IDs
start_dateNoFilter: created on or after this date (ISO format)
include_image_urlNoSet true when you need to inspect or reuse the avatar/model image URL.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description goes beyond by explaining the domain semantics (avatars vs. AI models) and the hybrid search behavior, adding useful context that annotations do not convey.

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

Conciseness5/5

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

Three focused sentences, each adding value: purpose, distinction from sibling, and key parameter guidance. No redundant phrasing or unnecessary detail.

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 list tool with 9 optional params and no output schema, the description covers the essential context: what avatars are, the alternative tool, and the critical include_image_url scenario. Pagination and date filters are left to the schema, which is sufficient given the tool's simplicity. It could mention return format, but that's not critical here.

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 coverage is 100%, so the baseline is 3. The description echoes the query parameter's hybrid search behavior and the include_image_url usage, but these are already described in the schema. It adds minimal new information beyond what structured fields provide.

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 description opens with 'List the user's avatars', a clear verb+resource statement. It further clarifies that avatars are the reusable people/models/mannequins in fashion terms, and explicitly distinguishes from list_models for AI engines, which differentiates it from a likely sibling.

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?

It provides explicit guidance: 'not the AI engines — for those, use list_models' directly names the alternative. It also gives a concrete usage trigger: 'Set include_image_url=true when the avatar image itself is needed.' This tells the agent when to use the tool and how to configure a key parameter.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_garmentsList GarmentsA
Read-onlyIdempotent
Inspect

List user's garments with structured filters or query for hybrid name/SKU/metadata/image-attribute search.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
sortNoSort order: 'field:direction', e.g. 'created_at:desc', 'clothing_item_name:asc'. Default: created_at:desc
limitNoNumber of items per page
queryNoHybrid search across garment names, SKUs, metadata, and visual attributes.
tag_idsNoFilter to garments with any of these tags
categoryNoFilter to garments in any of these canonical categories
end_dateNoFilter: created on or before this date (ISO format)
start_dateNoFilter: created on or after this date (ISO format, e.g. '2025-06-01')
clothing_item_idsNoFilter to specific garment IDs
include_image_urlNoSet true when the garment image itself is needed for visual display or reuse.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark the tool as readOnly, idempotent, and non-destructive. The description adds behavioral context by distinguishing structured filtering from hybrid name/SKU/metadata/image-attribute search, which is not obvious from the annotations alone. No contradiction exists.

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

Conciseness5/5

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

The description is a single sentence, front-loaded with the verb and object, and every clause contributes meaningful scope or mode information. There is no redundancy or unnecessary detail.

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 read-only listing tool with 10 fully described optional parameters and no required inputs, the description covers core intent and query behavior well. It does not describe the output shape, but the list semantics and schema defaults make invocation predictable enough.

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?

The input schema covers 100% of parameters with rich descriptions, so the baseline is 3. The description's 'hybrid name/SKU/metadata/image-attribute search' largely paraphrases the query parameter's existing description and adds little new parameter-level meaning.

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 description states the specific verb 'List', the resource 'user's garments', and the two operating modes: structured filters and hybrid query across name/SKU/metadata/image-attribute. This clearly distinguishes it from sibling list tools like list_models/list_outfits and from get_garment.

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 makes clear that this tool is for listing a user's own garments and explains the two call styles: structured filters or a hybrid query. It does not explicitly name sibling alternatives or exclusion conditions, so it falls just short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_locationsList LocationsA
Read-onlyIdempotent
Inspect

List reusable location/scene reference images by structured filters or query: IDs, tags, date range, and sort. Use when the user wants to pick a saved background/location reference for a generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
sortNoSort order: 'field:direction', e.g. 'created_at:desc', 'location_name:asc'. Default: created_at:desc
limitNoNumber of items per page
queryNoHybrid search across location names, metadata, and visual attributes.
tag_idsNoFilter to locations with any of these tags
end_dateNoFilter: created on or before this date (ISO format)
start_dateNoFilter: created on or after this date (ISO format)
location_idsNoFilter to specific location IDs
include_image_urlNoSet true when the location/reference image URL is needed for inspection or reuse.

TDQS

A4/5.0
Behavior3/5

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

Annotations already mark the tool as read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds useful context about the data being 'reusable location/scene reference images' and the user intent, but it does not disclose additional behavioral traits like return format, pagination behavior, or any edge cases beyond what annotations provide.

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

Conciseness5/5

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

Two sentences with no unnecessary words. The description front-loads the main action and resource, then provides filter details and a use case. Every word earns its place.

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?

Despite having 9 optional parameters and no output schema, the description is adequate for a list tool: it names the resource, the filter dimensions, and the primary use case. The comprehensive schema covers parameter semantics. It could be slightly more complete by mentioning the return type (e.g., paginated list of location references), but the current coverage is solid.

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 100%, with each parameter having a detailed description. The description's summary of filters ('IDs, tags, date range, and sort') offers a high-level abstraction but does not add meaning beyond what the schema already provides. Baseline 3 is appropriate.

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 description clearly states the verb 'List' and the specific resource 'reusable location/scene reference images'. It enumerates filter types (IDs, tags, date range, sort) and gives a concrete use case ('pick a saved background/location reference'), which distinguishes it from sibling tools like get_location or create_location.

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 phrase 'Use when the user wants to pick a saved background/location reference for a generation' provides clear context on when to invoke this tool. However, it does not explicitly mention when not to use it or name alternative tools, so it stops short of full usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_modelsList AI ModelsA
Read-onlyIdempotent
Inspect

List available AI generation models (image, video, edit, upscale engines) by type, with credit costs, capability limits, and model-specific production guidance. These are the AI models that render photoshoots — not the human models/avatars; for those, use list_avatars.

ParametersJSON Schema
NameRequiredDescriptionDefault
model_typeYesType: generation, edit, upscale, video, backdrop

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond annotations by specifying the returned information: credit costs, capability limits, and model-specific production guidance. This helps the agent know what to expect from the call.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the core purpose, then efficiently adds disambiguation and alternative routing. Every sentence earns its 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 simple, one-parameter, read-only list tool with full schema coverage and clear annotations, the description is complete. It tells the agent what the tool returns, how to categorize models, and which sibling to use instead. No critical information is missing.

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?

The schema already documents the only parameter, model_type, with a clear description covering its allowed values ('generation, edit, upscale, video, backdrop'), so schema coverage is 100%. The description adds context about model categories but does not need to repeat the schema details.

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 description clearly states a specific verb and resource: 'List available AI generation models... by type', and explicitly distinguishes these AI models from human models/avatars. It also names the sibling tool (list_avatars) for the alternative, making the tool's purpose unmistakable.

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?

It gives explicit usage guidance: this tool is for AI generation models, not human models/avatars, and directs users to list_avatars for those. This is a clear when-to-use vs alternative distinction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_outfitsList OutfitsA
Read-onlyIdempotent
Inspect

List user's outfits (saved garment combinations). Filter by garment IDs, active status, date range, or query against contained garments.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
sortNoSort: 'field:direction'. Use 'latest_generation_at:desc' to surface recently generated outfits. Default: created_at:desc
limitNoNumber of items per page
queryNoSearch outfit names and contained garments.
sourceNoFilter by outfit source.
tag_idsNoFilter to outfits with any of these tags
end_dateNoFilter: created on or before this date (ISO format)
is_activeNoFilter by status: 'true', 'false', or 'both' (default: both)
outfit_idsNoFilter to specific outfit IDs
start_dateNoFilter: created on or after this date (ISO format)
clothing_item_idsNoFilter to outfits containing any of these garments

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destrutiveHint=false, so the safety profile is covered. The description adds that the listing is user-scoped and that outfits are saved combinations, but does not disclose pagination behavior, default filter semantics, or return shape. Given annotation coverage, this is adequate but not rich.

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

Conciseness5/5

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

The description is a single compact sentence that leads with the core action and usefully clarifies what an outfit is. Every clause earns its place; there is no filler or redundancy.

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 read-only list operation with full schema descriptions, annotations, and a clear resource scope, this description is almost complete. It would be fully complete with an explicit pointer to the single-outfit sibling or a note about pagination defaults, but those are already inferable from the schema.

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 100%, so every parameter is already documented with defaults and meaning. The description only summarizes parameter categories (garment IDs, active status, date range, query) and adds no new semantic detail beyond the schema. Baseline 3 is appropriate.

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?

Clear verb+resource: 'List user's outfits' and defines outfits as 'saved garment combinations'. The filtering summary helps identify the operation, but it does not explicitly differentiate itself from siblings like get_outfit or propose_outfits, so it stops short of full sibling differentiation.

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?

The phrase 'List user's outfits' and the filter list imply this is the bulk retrieval tool for saved outfits, and the user-scoped wording signals scope. However, there is no explicit when-to-use versus alternatives, such as using get_outfit for a single outfit or propose_outfits for generated suggestions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_tagsList TagsA
Read-onlyIdempotent
Inspect

List available tags for the user's company. Use this to resolve user-provided tag names like 'summer26' before selecting garments, outfits, models, files, generations, or locations. For no-UI MCP flows, find the tag ID here, then call get_items_by_tag or the relevant list_* tool with tag_ids.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is clear. The description adds behavioral context by outlining a typical workflow (resolving tag names to IDs) and directing to follow-up tools, which goes beyond annotation coverage.

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

Conciseness5/5

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

Two sentences, front-loaded with the core purpose, and immediately followed by actionable usage guidance. No wasted words.

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 simple list tool with no output schema, the description fully covers what the tool does, why it's useful (tag resolution), and how to use its output. No gaps remain.

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?

The tool has zero parameters, and the input schema is empty. The baseline for 0 params is 4 because there are no parameter semantics to explain. The description appropriately focuses on the tool's purpose and usage.

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 description clearly states the tool's function: 'List available tags for the user's company.' This is a specific verb+resource+scope, and it distinguishes from siblings by explaining that this is the tag lookup tool used before other operations.

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?

Explicit when-to-use guidance is provided: 'Use this to resolve user-provided tag names... before selecting garments, outfits, models, files, generations, or locations.' It also gives a concrete alternative: 'For no-UI MCP flows, find the tag ID here, then call get_items_by_tag or the relevant list_* tool with tag_ids.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_templatesList TemplatesA
Read-onlyIdempotent
Inspect

List canonical company templates, optionally filtered by kind, scope, command use case, or public t-xxxx share code. Templates persist canonical commands but do not execute generations. System templates named Demo — … are worked examples of the canonical command language; read one with get_template before authoring a first brief or workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination
use_caseNoFilter by a use_case present in any stored command
share_codeNoReturn the template assigned this public t-xxxx share code
catalog_scopeNoFilter by library or owner_only. Owner-only templates are hidden unless explicitly requested.
template_kindNoFilter generation presets or read-only historical batch_workflow records
items_per_pageNoNumber of templates per page

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already carry readOnlyHint=true and idempotentHint=true, and the description adds genuinely new behavioral context beyond them: templates persist but never execute generations, and 'Demo — …' templates are worked examples of the canonical command language. Nothing contradicts the annotations, which support the read-only framing.

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

Conciseness5/5

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

Two sentences with the purpose and filter axes front-loaded in the first, followed by a compact behavioral caveat and a concrete next-step pointer. Every clause earns its place; there is no filler or repetition of schema content.

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 six-optional-parameter list operation with full schema coverage and safety-carrying annotations, the description covers the object's nature, all filter dimensions, the non-execution behavior, and the natural follow-up via get_template. The only shortfall is the absence of return-shape guidance, which carries slightly more weight because no output schema exists.

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 100%, so the schema already documents all six parameters in detail, including the owner-only visibility rule and the writable/read-only enum distinction. The description adds only a light summary of the filter axes (kind, scope, use case, share code) that maps to schema parameters without deepening their semantics — baseline 3 is appropriate.

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 description states a specific verb and resource — 'list canonical company templates' — and enumerates the filter dimensions (kind, scope, use case, share code). It distinguishes itself from siblings by framing templates as persisted canonical commands rather than executable or writable records, and implicitly differentiates from get_template which reads a single template.

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 explicitly routes follow-up behavior ('read one with get_template before authoring a first brief or workflow') and clarifies that templates 'do not execute generations', steering an agent toward generation tools when execution is needed. It does not, however, enumerate exclusions against other browsing or search siblings such as search_uwear_library.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_add_contextAdd to Shoot BoardAInspect

App-only: append items to the session-scoped Uwear Shoot Board.

ParametersJSON Schema
NameRequiredDescriptionDefault
context_itemsYesShoot Board items to append to the current list

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already indicate a non-read-only, non-idempotent, non-destructive mutation. The description adds useful context about app-only availability and session scoping, but does not disclose potential duplicate behavior or other side effects beyond what annotations imply.

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

Conciseness5/5

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

The description is a single front-loaded sentence that conveys all essential information without waste.

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 simple one-parameter mutation tool with no output schema, the description provides key context (app-only, session-scoped, append behavior) and is sufficiently complete. It does not describe return values, but that is not required given the absence of an output schema.

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 coverage is 100% (the single parameter has a description), so baseline is 3. The description adds no extra meaning beyond 'append items' which merely restates the parameter name 'context_items'.

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 description clearly states the action ('append'), the resource ('Uwear Shoot Board'), and the scope ('session-scoped'), which distinguishes it from sibling tools like mcp_replace_context (replace) and mcp_clear_context (clear).

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?

The term 'append' implies adding to an existing board, subtly distinguishing from replace/clear siblings, but there is no explicit guidance about when to use this tool versus alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_clear_contextClear Shoot BoardA
DestructiveIdempotent
Inspect

App-only: clear all session context items, or only one context type.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNoContext type to remove; omit to clear the entire Shoot Board

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate destructiveHint=true and idempotentHint=true. The description adds behavioral value by explaining the all-or-one-type clearing behavior and the 'App-only' constraint. It does not contradict annotations and adds meaningful context beyond what the annotations provide.

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

Conciseness5/5

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

The description is extremely concise—a single sentence that conveys the essential scope and behavior. Every word adds value, and it is front-loaded with the action and resource.

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 simple tool with one optional parameter, no output schema, and strong annotations, the description is complete. It fully covers the tool's behavior (clear all or specific type) and the app-only constraint, leaving no significant gaps.

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 100%; the parameter 'type' is well-documented with an enum and description 'Context type to remove; omit to clear the entire Shoot Board.' The description's mention of 'one context type' adds no new meaning beyond the schema, so baseline 3 is appropriate.

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 description clearly states the tool's function: 'clear all session context items, or only one context type.' It uses a specific verb (clear) and resource (session context items/Shoot Board), and it distinguishes from sibling tools like mcp_add_context and mcp_replace_context by focusing on removal.

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 provides clear context: it's app-only and clears either all context items or a specific type. It implies when to use it (when clearing context is needed), but it does not explicitly mention alternatives or when-not-to-use scenarios. This is clear enough for the simple use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_create_credit_checkout_sessionBuy Credits (Workspace)AInspect

App-only: create a hosted Stripe Checkout URL for buying Uwear credits from the MCP workspace credit control. Hidden from the host LLM so photoshoot planning does not drift into billing unless the user presses the plus button.

ParametersJSON Schema
NameRequiredDescriptionDefault
creditsNoNumber of Uwear credits to purchase
user_agentNoOptional client user-agent recorded with checkout metadata
return_cancel_urlNoOptional checkout cancellation URL; defaults to the Uwear credits page
return_success_urlNoOptional checkout completion URL; defaults to the Uwear frontend

TDQS

A4/5.0
Behavior3/5

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

The description adds context about being app-only and user-initiated, but does not disclose the return format or detailed side effects beyond creating a checkout URL. Annotations already cover the safety profile (readOnlyHint false, destructiveHint false), so the description adds moderate value.

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

Conciseness5/5

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

The description is two sentences, front-loaded with purpose, and the second sentence adds a usage constraint. Every word earns its place with no fluff.

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?

The tool is simple (4 optional params, no output schema). The description explains purpose and usage context well. It could explicitly state the return value (the checkout URL) but that is implied by 'create a hosted Stripe Checkout URL.'

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 100%, and the tool description does not add meaning beyond what the schema already provides for the four optional parameters. Baseline of 3 is appropriate.

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 description clearly states the tool's purpose: 'create a hosted Stripe Checkout URL for buying Uwear credits.' It uses a specific verb ('create') and resource, and distinguishes it from sibling tools like get_user_credits and estimate_cost.

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 explicitly provides usage context: 'App-only' and 'Hidden from the host LLM so photoshoot planning does not drift into billing unless the user presses the plus button.' This gives a clear when-not-to-use condition. However, it does not name alternative tools for credit checking or estimation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_export_montageExport Montage VideoA
Destructive
Inspect

App-only: export the user-confirmed montage clips as a stitched video. Spends credits, so it is hidden from host LLMs; the MCP iframe calls this after the user presses Export on the MontageProposal card. Returns the generation_id to poll via get_generation_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
clipsYesOrdered generation-result clips to stitch into the montage
fit_modeYesHow each clip fits the output frame: contain or cover
aspect_ratioYesOutput video aspect ratio in W:H format
base_resolutionYesOutput base resolution in pixels

TDQS

A4.7/5.0
Behavior5/5

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

Beyond annotations (destructiveHint=true), the description reveals that the tool 'spends credits' and is 'hidden from host LLMs,' adding cost and access context. It also discloses the return behavior: 'Returns the generation_id to poll via get_generation_status.' This complements the annotations without contradicting them.

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

Conciseness5/5

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

Three sentences, each earning its place: the action, the credit/access constraint, and the return value. No redundant detail or padding. The most important operational fact (app-only) is front-loaded.

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?

Despite having no output schema, the description explains the return value (generation_id) and how to follow up (get_generation_status). The credit spend and app-only access are covered. All 4 required parameters are described in the schema, so the description is complete for this tool's complexity.

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 100%, so the baseline is 3. The description adds little beyond the schema: it references 'user-confirmed montage clips' but does not elaborate on fit_mode, aspect_ratio, or base_resolution. The schema already documents these, so the description does not need to.

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 description states a specific verb and resource: 'export the user-confirmed montage clips as a stitched video.' It clearly distinguishes from siblings like propose_montage and update_montage_proposal by focusing on the final export action. The phrase 'stitched video' specifies the output type.

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?

The description explicitly states when to use it: 'App-only' and 'the MCP iframe calls this after the user presses Export on the MontageProposal card.' It also excludes host LLMs ('hidden from host LLMs') and mentions the credit cost, which is a key constraint. This effectively differentiates it from proposal-generation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_generate_clipGenerate Montage ClipA
Destructive
Inspect

App-only: queue an image-to-video generation for a montage clip. Spends credits, so it is hidden from host LLMs; the montage editor calls this when the user presses Generate on a draft clip. Returns the generation_id to poll via get_generation_status.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelYesVideo model slug or supported model name
promptNoOptional motion prompt for the video clip
durationNoVideo duration in seconds; defaults to 5
image_urlNoHTTPS source image URL; provide exactly one source
resolutionNoOptional output resolution; defaults to 480p
generate_audioNoWhether to generate audio with the video
last_frame_urlNoOptional final-frame image URL for supported video models
uploaded_file_idNoUploaded file ID to use as the source image; provide exactly one source
generation_result_idNoExisting generation result ID to use as the source image; provide exactly one source

TDQS

A4.2/5.0
Behavior4/5

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

The description adds behavior beyond annotations: it spends credits, is app-only/hidden from host LLMs, queues the generation, and returns a generation_id to poll. This complements the destructiveHint annotation without contradicting it.

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

Conciseness5/5

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

Three sentences with no wasted words. The most important information is front-loaded, followed by the credit-spending caveat and the return value in a logically ordered way.

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 queue-style tool with 9 schema-documented parameters, the description sufficiently explains purpose, usage restrictions, side effects, and how to follow up. The lack of an output schema is mitigated by explicitly mentioning the generation_id and the polling endpoint.

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 coverage is 100%, and each parameter already has descriptive text. The description adds no parameter-specific meaning beyond the general image-to-video context, so the baseline of 3 is appropriate.

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 description clearly states the tool queues an image-to-video generation for a montage clip. It names the specific action ('queue'), the resource ('montage clip'), and scope ('App-only'), distinguishing it from sibling tools like propose_montage and mcp_export_montage.

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?

It explicitly says when to use it: the montage editor calls this when the user presses Generate on a draft clip, and it is hidden from host LLMs, providing a clear when-not. It does not name alternative tools, but the context is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_get_contextGet Shoot BoardB
Read-onlyIdempotent
Inspect

App-only: hydrate the session-scoped Uwear Shoot Board.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare read-only and idempotent behavior, so the description only needs to add extra context. It adds 'App-only' and 'session-scoped' constraints, which are useful, but 'hydrate' remains vague about whether the tool returns data, initializes the board, or both.

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 a single sentence with no wasted words, but it is arguably too terse. The term 'hydrate' could be replaced with more explicit language, yet the structure is clean and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description must convey what the agent should expect. It does not explain what a 'Shoot Board' is or what 'hydrate' returns or does, leaving significant ambiguity about the tool's actual effect and return value.

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?

The tool has zero parameters, so there is no parameter documentation burden. The baseline of 4 applies since the description doesn't need to compensate for schema gaps.

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?

The title 'Get Shoot Board' clarifies the retrieval intent, and the description identifies the resource ('Uwear Shoot Board') and scope ('session-scoped'). The verb 'hydrate' is somewhat non-standard but still conveys loading the board. It is distinguishable from mutation siblings like mcp_add_context, though 'hydrate' adds jargon.

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

Usage Guidelines2/5

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

No guidance is given on when to use this tool vs alternatives such as request_user_context or other getters. The 'App-only' label is a constraint, not a usage trigger, and no exclusions or alternative tools are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_list_filesList FilesB
Read-onlyIdempotent
Inspect

App-only: list uploaded files for the Uwear MCP workspace files tab.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for uploaded file results
limitNoMaximum number of uploaded files per page

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context about the 'App-only' scope and the workspace files tab, but does not provide additional behavioral details like pagination behavior or return format. No contradictions.

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

Conciseness5/5

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

The description is a single, concise sentence that is front-loaded with the core action and includes the necessary context ('App-only', 'workspace files tab'). No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only list tool with two optional parameters and no output schema. The description states what it lists but does not describe the return value structure or pagination defaults. Given the low complexity, a brief description is mostly sufficient, but a little more detail (e.g., what fields/objects are returned) would be helpful.

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 100% (both 'page' and 'limit' have descriptions). The tool description adds no additional meaning for the parameters, so the baseline of 3 is appropriate.

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?

The description specifies the verb 'list' and the resource 'uploaded files', with a clear context ('Uwear MCP workspace files tab'). It distinguishes from sibling list tools by focusing on 'uploaded files' rather than garments, avatars, etc. However, it could be slightly more explicit about what constitutes a 'file'.

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

Usage Guidelines2/5

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

The description does not provide any explicit guidance on when to use this tool versus alternatives, nor does it mention any exclusions. The 'App-only' prefix is a constraint but not a usage guideline. It gives no indication of when to prefer this over other list_* tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_replace_contextReplace Shoot BoardA
DestructiveIdempotent
Inspect

App-only: replace the session-scoped Uwear Shoot Board items.

ParametersJSON Schema
NameRequiredDescriptionDefault
context_itemsNoShoot Board items that replace the current list when context_state is omitted
context_stateNoComplete Shoot Board state to sanitize and persist; takes precedence over context_items

TDQS

A4/5.0
Behavior4/5

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

Annotations already convey destructive and idempotent behavior. The description adds 'session-scoped' and 'App-only', which narrow the scope and provide context beyond what annotations state. This is meaningful incremental value, though it does not detail side effects.

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

Conciseness5/5

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

The description is a single sentence that front-loads the action and includes key constraints. It contains no filler and every word contributes meaning.

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?

The description, combined with the schema's parameter descriptions, provides sufficient clarity for an agent to understand the tool's purpose, scope, and parameter semantics. The only minor gap is the undefined meaning of 'App-only', but overall it is complete for a replace tool with no output schema.

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 100% and both parameters have detailed descriptions, including the precedence relationship between context_items and context_state. The tool description adds no parameter-specific info, so the schema carries the burden, resulting in baseline 3.

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 description clearly states the action ('replace') and the resource ('session-scoped Uwear Shoot Board items'). This distinguishes it from sibling tools like mcp_add_context and mcp_clear_context, which have different operations.

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?

The description implies replacement semantics compared to add/clear but does not explicitly name alternatives or provide exclusion criteria. The 'App-only' hint offers some context but does not fully guide an agent on when to select this tool over its siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

mcp_save_retouchSave Retouched ImageAInspect

App-only: save a user-edited image from the shared ImageDetail retouch editor as a child generation result. Hidden from host LLMs; the MCP iframe calls this after the user presses Save.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_nameNoOptional filename for the saved retouched image
mime_typeNoOptional image MIME type; inferred from a data URL or defaults to image/png
operationsNoOptional retouch operation metadata stored with the child result
image_base64YesRetouched image encoded as base64 or an image data URL
parent_generation_result_idYesGeneration result ID of the original image

TDQS

A4.4/5.0
Behavior4/5

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

Annotations indicate readOnlyHint=false and idempotentHint=false, which align with the write behavior. The description adds context that saves a 'child generation result' and is 'App-only,' clarifying the data model and invocation scope. It could mention return behavior, but annotations cover safety traits adequately.

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

Conciseness5/5

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

Two tightly worded sentences immediately establish the tool's restricted audience and purpose. No wasted words; every element contributes essential context.

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 tool intentionally hidden from host LLMs, the description provides sufficient context for an agent to recognize it as internal. Schema covers required parameters, and the description clarifies the triggering flow. Minor gap: no return value or error behavior described, but given the 'App-only' designation, this is less critical.

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 covers all 5 parameters with descriptions, so baseline is 3. The description doesn't add new parameter-level information beyond what's in the schema, though it gives context for image_base64 and parent_generation_result_id through 'user-edited image' and 'child generation result.'

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 description clearly states the tool's function: 'save a user-edited image from the shared ImageDetail retouch editor as a child generation result.' It uses a specific verb and resource, and the 'child generation result' distinguishes it from sibling save tools like save_generated_avatar.

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?

Explicitly states when to use: 'after the user presses Save.' Also clearly excludes host LLMs with 'Hidden from host LLMs; the MCP iframe calls this,' providing strong context for invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

prepare_local_garment_uploadPrepare Local Garment UploadAInspect

First step for garment images on the host's local filesystem, such as files in ~/Downloads. Use only when the host can read those local files and perform the returned direct multipart HTTP uploads, such as Codex. Include every returned form field and send the file bytes under the returned file_field. Never send a local path to Uwear. Do not use this for ChatGPT attachments or existing public URLs. After every upload succeeds, call finish_local_garment_upload with the returned upload handles.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesYesLocal image metadata in a stable order. The local paths never leave the client.

TDQS

A4.7/5.0
Behavior5/5

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

The description discloses key behavioral traits beyond the annotations: the returned form fields and file_field must be used, local paths must never be sent to Uwear, and a follow-up call is required. This adds essential context about the two-step protocol and response handling, compensating for the lack of an output schema.

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

Conciseness5/5

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

Every sentence in the description serves a distinct purpose: scoping, prerequisites, execution details, security constraint, exclusions, and next-step instruction. It is dense yet efficient, with no redundant or filler content, and the key action is front-loaded.

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's complexity (two-step upload process) and the absence of an output schema, the description is remarkably complete. It tells the agent exactly what to do with the response, what to avoid, and what to call next, covering all necessary context for successful invocation.

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?

The input schema already provides comprehensive descriptions for each parameter (file_name, content_type, content_length) with constraints like max length and MIME type enums. The description adds no new parameter-level meaning—it only restates the local path rule already embedded in the schema—so the baseline of 3 for high schema coverage is appropriate.

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 description clearly states the tool's role as the first step for uploading garment images from the host's local filesystem, using specific verbs like 'prepare' and identifying the resource. It also differentiates from sibling upload tools by explicitly excluding ChatGPT attachments and public URLs, making its purpose unambiguous.

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?

The description provides explicit conditions for use: only when the host can read local files and perform direct multipart HTTP uploads. It also states exclusions ('Do not use this for ChatGPT attachments or existing public URLs') and directs the agent to call finish_local_garment_upload afterward, offering clear guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_briefCreate Brief for ApprovalA
Destructive
Inspect

Create a Uwear BriefProposal from canonical generation commands. Every commands[].input is the MCP-safe GenerationIntent fields; commands and immutable plans are persisted without translation. Supply a concrete model_slug for generate, edit, upscale, and video. Use durable command.source IDs for uploaded files or generation results, and reference_attachments for additional references. For video, attach available full back or side garment assets that the camera may reveal when capacity permits; having the asset uploaded is not enough. If the response contains video_garment_view_not_attached, explain its exact assets, node, and capacity, then follow its remediation. Never mix reference_attachments with img_ref_urls or append recommendations beyond remaining capacity. Set execute_immediately=true only when the user explicitly asks to run now. Include creative_context for photoshoots and explain the art direction after proposing. For changes to a visible brief, call update_brief with the complete replacement command list. Webhook callback configuration is API-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandsYesCanonical generation commands. Each command contains the MCP-safe GenerationIntent fields and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically. Webhook callback configuration is API-only.
creative_contextNoRequired for photoshoot proposals and brief rewrites. Summarize the shoot-level creative approach that guided garment combos, avatars, prompts, and pipeline steps. By default prefer one cohesive art direction across the photoshoot, e.g. 'urban summer editorial', 'standard grey e-commerce', or 'sporty studio catalog'. Per-look prompts may differ for garment details, pose, framing, or avatar, but should feel part of the same shoot unless the user explicitly asks for multiple art directions, split concepts, A/B routes, or varied campaign directions. The assistant should explain this art direction to the user after proposing the brief and ask if they want changes.
execute_immediatelyNoSet true only when the user explicitly asks to prepare/create/generate/run the photoshoot without another review step. When true, Uwear persists the brief, confirms it, and executes it directly if credits and validation allow; otherwise it falls back to the editable BriefProposal.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare destructiveHint=true but do not explain the mutation semantics. The description ranks as 4, not 3, because it discloses a rich set of non-obvious behaviors beyond the annotations: the error remediation for video_garment_view_not_attached, the relationship between execute_immediately flag and user intent, the constraint not to mix reference_attachments with img_ref_urls, and the persistence of commands/plans without translation. These add real behavioral context absent from annotations. It loses a point because it does not explain what 'destructive' means for a propose operation (a proposal being created is technically a create, but annotations mark it destructive, likely because it overwrites a draft).

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

Conciseness3/5

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

The description is packed with many important constraints but is a single dense paragraph. It front-loads the core purpose but then floods the agent with multiple instructions in rapid succession. Sentences like the video asset rule, the remediation, and the mixing prohibition are all valuable but arranged without clear hierarchy or separation. It is appropriately sized given the complexity but would benefit from bulleting or bolding key constraints. Not under-specified, but poorly structured for the amount of content.

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 tool with 3 parameters, one required, and no output schema, the description is comprehensive. It covers the required source references, the creative_context requirement for photoshoots, the execute_immediately rule, the video-attachment edge case with its remediation, and routing to update_brief. It is incomplete only in that it does not describe what the returned BriefProposal looks like (no output schema exists), but the description says 'Create a Uwear BriefProposal' and the remediation hints the response contains a field, so the agent can infer. Given the nested complexity of GenerationIntent, it does not describe every prompt-writing nuance here, but the schema's rich per-field descriptions carry that burden.

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 description coverage is 100%, so the baseline is 3. The description adds meaningful guidance beyond the schema parameters: for commands it clarifies the 'MCP-safe GenerationIntent fields' and the need for durable source IDs; for creative_context it emphasizes explaining art direction after proposing and requiring it for photoshoots; for execute_immediately it states the condition 'only when the user explicitly asks to run now,' which is a strict constraint not fully explicit in the schema. This is above the baseline but not a 5 because the description does not walk through each field of the nested GenerationIntent in detail (though the schema already does that with rich descriptions).

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?

The description states a specific verb ('Create a Uwear BriefProposal') and a concrete resource ('from canonical generation commands'). It distinguishes this from update_brief by naming it as the tool for changes to a visible brief. However, it doesn't explicitly contrast with the many sibling tools like propose_outfits or propose_montage, which are also proposal-creation tools, though their outputs differ.

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?

The description explicitly states when to use this tool ('Create a Uwear BriefProposal'), and provides clear exclusions: 'For changes to a visible brief, call update_brief with the complete replacement command list.' It also states that 'Webhook callback configuration is API-only,' telling the agent this tool cannot do that. It gives the key routing rule to the sibling update_brief, covering the primary alternative.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_montageCreate Video MontageA
Read-onlyIdempotent
Inspect

ONLY for video montage/stitching/export workflows. Use when the user explicitly asks to create a montage, stitch clips, make a reel, export a video sequence, make video clips from images, or combine images/videos into one final video. Never use this for a photoshoot, lookbook, product shoot, collection shoot, outfit shoot, garment shoot, or image-generation request; those must use request_user_context followed by propose_brief/update_brief. Do not call this merely because selected context contains images, generations, garments, or models. A photoshoot may later feed a montage, but the photoshoot itself must be proposed as a BriefProposal first. PROPOSES the montage for user review — user can edit clips, generate missing videos, then export. Supports: existing videos with optional trim (target_duration or start_time/end_time), images that need video generation (specify video_model + a bespoke per-image motion prompt, and optionally target_duration or duration), per-clip speed/mute, global aspect ratio. If the user asks for clips to be e.g. '3 seconds each', set target_duration: 3 on every item, including image items. For image items, avoid generic repeated prompts: tailor each prompt to the specific image and any requested zoom, movement, energy, or camera direction. If motion is not specified, inspect the image first with view_image and then write a fitting motion prompt from the image content before proposing. The user reviews and confirms in the UI. Export is free (0 credits); video generation clips cost credits per their model.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYesOrdered list of montage items. Each is either an existing video or an image needing video generation. Min 1, max 10.
aspect_ratioNoOutput aspect ratio (e.g. '9:16', '16:9', '1:1')9:16
base_resolutionNoOutput resolution height in pixels

TDQS

A5/5.0
Behavior5/5

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

The description adds substantial behavioral context beyond the annotations: it clarifies that this tool only PROPOSES a montage for user review (not an actual export), that the user can edit/generate/export later, and that export is free while video generation costs credits. It also details how various parameters affect behavior (trim, generation, speed/mute). With annotations already declaring read-only and idempotent, the description enriches the agent's understanding of the propose-first workflow and cost implications.

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

Conciseness5/5

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

The description is long but every sentence earns its place. It is front-loaded with the critical scoping statement ('ONLY for video montage...'), then systematically covers exclusions, the proposal workflow, per-item semantics, and cost behavior. The structure flows logically from when-to-use to how-to-invoke, and there is no redundant filler.

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?

The tool is complex (nested MontageItemInput with 13 sub-properties, mixed video/image handling), yet the description covers all major aspects: item types, required fields, trim semantics, duration handling for image vs video, audio generation, aspect ratio, resolution, credit costs, and the post-proposal flow. The absence of an output schema is compensated by explaining the proposal-review-confirm sequence. This is as complete as one could expect for such a tool.

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?

Even though schema coverage is 100%, the description adds meaningfully beyond the schema: it explains how to interpret user requests like '3 seconds each' into setting target_duration: 3 on every item, instructs to tailor per-image motion prompts and avoid generic repeated prompts, and advises inspecting the image with view_image when motion isn't specified. These are practical parameter-usage rules that go beyond the raw field descriptions.

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 description clearly states the tool's sole purpose: video montage/stitching/export workflows, and that it PROPOSES a montage for user review. It explicitly differentiates from sibling tools like propose_brief and mcp_export_montage, and enumerates the exact trigger phrases ('create a montage', 'stitch clips', 'make a reel', etc.). This is a specific verb+resource with strong sibling differentiation.

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?

The description provides explicit when-to-use guidance, including exact user request patterns, and equally explicit when-not-to-use exclusions (photoshoots, lookbooks, product shoots) with the correct alternative path ('request_user_context followed by propose_brief/update_brief'). It also warns against calling the tool merely because images exist in context, and clarifies that photoshoots must first be proposed as a BriefProposal. This is textbook usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_outfitsPropose OutfitsA
Read-onlyIdempotent
Inspect

Use Uwear's outfit proposer to create styled outfit combinations from selected garments. Returns candidate titles, clothing_item_ids, and short rationales; call create_outfit_from_garment_ids only after the user chooses a proposal to save.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_outfitsNoMaximum number of outfit proposals to return
instructionsNoOptional styling brief, occasion, season, constraints, or vibe
clothing_item_idsYesAccessible clothing item IDs to combine into outfit proposals

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and idempotentHint=true, so the safety profile is clear. The description adds behavioral value by disclosing return contents ('candidate titles, clothing_item_ids, and short rationales') and the correct follow-up action, which are not present in annotations. It doesn't contradict any annotations.

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

Conciseness5/5

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

Two sentences with no redundant phrases. The first sentence introduces the tool's core purpose, and the second provides return details and workflow. Every word contributes essential information, making it efficiently front-loaded.

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?

The description covers the tool's purpose, return payload, and the necessary next step (calling create_outfit_from_garment_ids). Since there is no output schema, describing return contents is essential and handled well. It doesn't detail edge cases or advanced behaviors, but those are unlikely needed for a straightforward proposal tool.

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 coverage is 100%, with all three parameters (clothing_item_ids, max_outfits, instructions) already described in the input schema. The description adds no additional parameter-specific meaning, so the baseline score of 3 is appropriate.

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 description clearly states the tool's function: 'use Uwear's outfit proposer to create styled outfit combinations from selected garments.' It identifies the specific resource (outfit proposals) and action (propose), and distinguishes itself from sibling tools like create_outfit_from_garment_ids by explicitly reserving that tool for a later saving step.

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 provides clear usage context: it tells the agent to call this tool to generate proposals and to call create_outfit_from_garment_ids only after the user chooses one. It doesn't explicitly list alternative tools or say when not to use it, but the workflow guidance is strong enough to guide tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

queue_generation_result_qaRun QA on ResultsA
Destructive
Inspect

Default tool for generation-result QA. Use this whenever the user asks to QA, quality check, validate, review, inspect for defects, approve/reject, or assess already-created generation results. Do not substitute view_image for QA unless the user explicitly asks for a manual visual critique instead of the official Uwear QA pipeline. First identify the numeric generation_result_ids, then call this tool, then call read_generation_result_qa for the same IDs. Queued or requeued QA costs 1 credit per generation result; already-completed QA rows are not charged again. QA is built for scale — validating large batches (hundreds or thousands of results). When the user is iterating on a handful of results one by one, do not queue QA on your own initiative; run it when the user asks for it or when operating at batch scale.

ParametersJSON Schema
NameRequiredDescriptionDefault
max_qa_retriesNoMaximum QA-triggered retry generations to allow. Retry generations can cost additional generation credits.
generation_result_idsYesGeneration result IDs to QA. Queued or requeued QA costs 1 credit per result.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description adds valuable context about credit costs (1 credit per result, no charge for already-completed rows) and that 'Retry generations can cost additional generation credits.' It also notes the tool is 'built for scale' and clarifies behavior for large batches. While it doesn't explicitly state destructive outcomes, the credit/retry details give additional transparency beyond 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 longer than typical but every sentence carries information: purpose, usage triggers, exclusions, workflow, costs, scale guidance. It is front-loaded with the core purpose and remains organized and scannable. A slight deduction for being a bit verbose, but it earns its length.

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?

No output schema exists, so the description should hint at expected outcomes. It does this indirectly by directing the user to call read_generation_result_qa afterward, implying the tool queues QA rather than returning results. It also covers costs, retries, scale, and when to avoid auto-invocation. Missing an explicit statement of what the tool returns (e.g., queue status or IDs), but the follow-up instruction mitigates this 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 100%: both generation_result_ids and max_qa_retries have descriptions that already mention credit costs and retry implications. The tool description repeats those cost mentions but does not add new semantic meaning beyond the schema. Since schema does the heavy lifting, baseline 3 is appropriate.

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 description states it is the 'Default tool for generation-result QA' with a specific verb (queue/run QA) and resource (generation results). It clearly distinguishes itself from view_image by explicitly forbidding substitution unless the user asks for manual visual critique. This is a specific verb+resource with sibling differentiation.

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?

The description provides explicit when-to-use criteria ('whenever the user asks to QA, quality check, validate, review, inspect for defects, approve/reject, or assess already-created generation results'), a clear workflow ('First identify the numeric generation_result_ids, then call this tool, then call read_generation_result_qa'), and explicit exclusions ('do not substitute view_image', 'do not queue QA on your own initiative' for small batches). This fully addresses when and when not to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_generation_result_qaRead QA ResultsA
Read-onlyIdempotent
Inspect

Read official Uwear QA status, decision, and structured QA JSON for existing generation results. Call this after queue_generation_result_qa when the user asks to QA/check/validate/review generated outputs; summarize the structured decision and issues, not a manual view_image opinion.

ParametersJSON Schema
NameRequiredDescriptionDefault
generation_result_idsYesGeneration result IDs to read QA for

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering the safety profile. The description adds value by explaining the tool returns structured QA decision and issues, and advising the agent to summarize rather than give a manual opinion. This extra context about output content and expected behavior goes beyond annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the verb 'Read' and the resource. Every clause provides useful information: purpose, sequencing, and usage guidance. No waste or redundancy.

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 simple one-parameter read-only tool, the description covers purpose, when to call, what to return, and how to handle the result. Annotations cover safety, and schema covers parameters. No output schema is needed because the description indicates structured data and summarization advice. Complete enough for an agent to select and invoke correctly.

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 100% for the single parameter generation_result_ids, with clear description. The tool description does not add significant parameter detail, but the schema already fully describes what the parameter means. Baseline 3 applies because the schema does the heavy lifting.

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 description clearly states the tool reads official Uwear QA status, decision, and structured QA JSON for existing generation results. It distinguishes itself from siblings by emphasizing 'official' and 'structured' data, and explicitly contrasts with view_image, making the purpose specific and non-ambiguous.

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?

The description gives explicit usage guidance: 'Call this after queue_generation_result_qa when the user asks to QA/check/validate/review generated outputs' and instructs to 'summarize the structured decision and issues, not a manual view_image opinion.' This clearly tells when to use it and what not to do, differentiating it from alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

request_user_contextAsk User to Pick AssetsA
Read-onlyIdempotent
Inspect

FIRST tool to call for a new photoshoot only when the user has not supplied garment/outfit IDs or textual selectors such as tag names, saved ArtDirection names, location names, or outfit names. Opens the MCP app/gallery so the user can choose assets, add them to the Shoot Board, and press Confirm context. BLOCKS until the user confirms their selection. Do not use this when a no-UI path can resolve the request with list_tags/get_items_by_tag/list_garments or the ArtDirection lookup tools. Do not tell the user to drag assets into chat. If the user has no garments/outfits, ask them to attach garment/product images and use upload_garment_from_chat_file, upload_garment_from_public_url, or create_outfit_from_garment_ids before trying to create a brief. Do not request models when inventory shows avatars=0. Avatar/model is optional; only ask for one when the user wants a specific or consistent person. If they want a model and have none, ask for a person photo and use upload_avatar_from_chat_file, or use generate_avatar if they want Uwear to create a reusable model.

ParametersJSON Schema
NameRequiredDescriptionDefault
promptYesInstruction shown to the user, e.g. 'Select the clothing items you want to use and add them to the Shoot Board'
min_itemsNoMinimum number of items the user must provide
expected_typesYesAccepted item types (match panel tabs): 'clothing', 'models', 'outfits', 'generations', 'files'. Legacy 'file' is accepted as an alias for 'files'.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, but the description adds crucial behavioral context: 'BLOCKS until the user confirms their selection.' It also warns against telling users to drag assets into chat and advises to skip model requests when avatars=0. No contradiction with 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 lengthy but every sentence serves a purpose: condition, behavior, exclusions, alternatives, and special cases. It is front-loaded with the primary purpose and subsequent guidance is logically organized. It earns its length.

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 no output schema and the tool's complexity, the description is remarkably complete. It covers when to call, blocking behavior, no-UI alternatives, fallback upload procedures, and avatar handling. This is more than sufficient for an agent to decide and invoke the tool 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 parameters are already well-documented. The description adds context about expected_types by explaining when to request models (optional, only if specific person is wanted) and mentions 'garment/outfit IDs or textual selectors' which indirectly relates to prompt construction. This goes slightly beyond the schema.

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 description clearly states this is the 'FIRST tool to call for a new photoshoot' when the user hasn't supplied asset IDs or selectors. It specifies the action: 'Opens the MCP app/gallery so the user can choose assets, add them to the Shoot Board, and press Confirm context.' This distinguishes it from sibling tools by explicitly withholding it when a no-UI path can resolve the request.

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?

The description provides explicit criteria for when to use this tool ('only when the user has not supplied garment/outfit IDs or textual selectors') and when not to use it ('Do not use this when a no-UI path can resolve the request'). It even names alternatives like list_tags/get_items_by_tag/list_garments and upload_garment_from_chat_file, plus avatar fallback options.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_generated_avatarSave Generated AvatarAInspect

Save completed generate_avatar image results as one reusable avatar/model. Pass the identity-anchor result as generation_result_id and optional view results as additional_result_ids; each result fills the slot recorded in its avatar_creator.view metadata. Use only after generation finishes and the user chooses the candidates. Normal text-to-image results are not eligible.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName for the saved avatar/model
generation_result_idYesCompleted image result ID returned by generate_avatar. Normal text-to-image results are not eligible because they do not contain reopenable avatar-creator inputs.
additional_result_idsNoOther completed generate_avatar result IDs to save into their own avatar_creator.view slots in the same avatar.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations are all false, so the description carries the disclosure burden. It adds meaningful behavioral context: each result fills a slot recorded in avatar_creator.view metadata, and only completed generate_avatar results are eligible. It does not discuss side effects like overwriting or reversibility, but for a save operation with no destructive hint, this is reasonably transparent.

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

Conciseness5/5

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

Three sentences, no wasted words. The lead sentence states the purpose, the second explains parameter roles, and the third adds usage timing and eligibility. Information is front-loaded and easy to scan.

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?

With 3 params, no output schema, and no nested objects, the description covers the key operational constraints: when to invoke (after generation, user choice), eligibility (only generate_avatar results), and how results map to slots. It does not state what the response returns (e.g., saved avatar ID), but given lack of output schema, this is a minor 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 baseline is 3. The description adds value by clarifying the roles of generation_result_id as 'identity-anchor result' and additional_result_ids as 'view results' that fill slots in avatar_creator.view metadata. This goes beyond the schema's per-parameter descriptions, which individually explain what the IDs are but not their functional relationship in the saved avatar.

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 description states a specific verb ('Save') with a specific resource ('completed generate_avatar image results') and outcome ('as one reusable avatar/model'). It clearly distinguishes from sibling tools by restricting to generate_avatar results, unlike upload_avatar_from_chat_file or create_avatar_from_references.

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?

Provides explicit timing context: 'Use only after generation finishes and the user chooses the candidates.' Also includes an exclusion: 'Normal text-to-image results are not eligible.' While it doesn't name alternative tools, the guidance clearly indicates when to use and when not to use, differentiating from related file-upload or reference-based avatar creation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_reference_file_from_chat_fileSave Reference ImagesAInspect

Batch save reference images from chat attachments into the Files library. Keep file metadata in files[] and pass top-level image_file_1, image_file_2, etc. in the same order. No base64, no local paths. Use for mood boards, backgrounds, and other reference images that are not garments or avatars.

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNoReference file metadata in the same order as image_file_1, image_file_2, etc. No base64.
file_nameNoSingle recovered display name
image_urlNoSingle resolved download URL used by automatic opaque-file recovery.
mime_typeNoSingle recovered MIME/content type, e.g. image/png
image_file_1NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_2NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_3NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_4NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_5NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_6NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_7NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_8NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_9NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_10NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.

TDQS

A4/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false but the description adds no explicit mutation/disclosure context. However, the description does clarify important operational behavior: it explains the ordering requirement between files[] and image_file_N, states 'no base64, no local paths' (a notable constraint), and clarifies use of host-supplied file objects versus bare IDs. For a write tool with these annotation hints, this adds meaningful behavioral context.

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 compact (three sentences) with no fluff. It front-loads the core purpose, then adds the critical ordering instruction and the domain exclusions. Every sentence earns its place, though the inclusion of maxItems=10 and the host-file-object guidance is partially redundant with schema details.

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?

With 14 parameters, no output schema, and no optional param enums, this is a complex tool. The description covers the core use case (reference images), the ordering requirement, the image_url vs. image_file distinction, and the exclusion boundaries. It could be slightly more complete on what the return value signifies (does a successful batch save return saved file IDs?) but remains adequately complete for invocation.

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 description coverage is 100% and each parameter (files[], image_file_N, image_url, mime_type, file_name) has a solid schema description. The tool description adds key cross-parameter semantics: the ordering relationship between files[] and the top-level image_file_N parameters, plus the 'choose one of image_url or image_file' mechanism. This goes beyond the individual schema fields and compensates well.

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?

Description states the specific action ('batch save reference images from chat attachments into the Files library') with a clear verb and target resource. It distinguishes from other upload tools by explicitly excluding garments/avatars ('not garments or avatars'), though it doesn't name the specific sibling alternative tools (upload_garment_from_chat_file, upload_avatar_from_chat_file).

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 clearly states when to use it ('mood boards, backgrounds, and other reference images') and defines exclusions ('not garments or avatars'). It lacks explicit naming of alternative tools or when-not instructions, but the domain boundary is well established through which sibling tools exist.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_templateSave TemplateA
Destructive
Inspect

Create a canonical company template, or replace one by passing template_id with expected_revision. Send typed GenerationCommand objects; updates are complete replacements. This persists the template and does not generate images. Templates are single-generation presets. Use Production Workflows in the Automation workspace for reusable multi-step generation. Legacy batch Templates are read-only history and cannot be created, edited, or imported.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTemplate name
payloadYesVersioned template payload containing canonical generation commands
descriptionNoOptional sentence explaining when to use the template
template_idNoTemplate ID when replacing an existing template
catalog_scopeNoTemplate catalog scope: library or owner_onlylibrary
template_kindYesTemplate kind: generation_preset. Legacy batch_workflow writes are retired.
expected_revisionNoCurrent revision when replacing an existing template; omit for create

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already set destructiveHint=true; the description adds that updates are complete replacements, that the action persists but does not generate images, and that batch_workflow templates are read-only history. No contradiction with annotations; it supplements them usefully, though it doesn't detail revision-mismatch behavior.

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

Conciseness5/5

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

Four sentences, front-loaded with the core action, each earning its place: create/replace mechanics, persistence behavior, single-generation scope, and alternative routing. No filler or repetition of schema details.

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 7-parameter tool with a rich schema and no output schema, the description is complete: it explains operation semantics, replacement safety, side effects, what does not happen (image generation), and when to use a different workflow. Nothing essential is missing.

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 description coverage is 100%, so the baseline is 3. The description adds meaningful semantic context by linking template_id with expected_revision for replacement and stressing that payloads are typed GenerationCommand objects and updates are complete replacements — beyond the schema's field descriptions.

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 description opens with 'Create a canonical company template, or replace one by passing template_id with expected_revision' — a specific verb, resource, and update mode. It also contrasts with legacy batch templates and Production Workflows, so an agent can distinguish save_template from siblings like delete_template and list_templates.

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?

Provides explicit when-to-use guidance: create vs replace with template_id plus expected_revision. It explicitly says legacy batch Templates are read-only and directs reusable multi-step needs to Production Workflows, giving clear exclusions and alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_uwear_librarySearch LibraryA
Read-onlyIdempotent
Inspect

Universal hybrid retrieval across the user's visible Uwear library: garments, avatars/models, locations, ArtDirections, uploaded files, and generation results. Use this before opening the picker when the user describes assets or saved creative direction by exact name/SKU or natural language, e.g. 'SKU 42', 'urban art direction', 'summer denim', or 'studio model'. For saved outfits, retrieve matching garments first, then call list_outfits with clothing_item_ids or propose_outfits from the garment IDs. Returns stable typed IDs, ids_by_type, detail_tool/detail_arguments, and selection hints; for saved ArtDirections, use the returned art_direction_id in briefs. This combines indexed lexical matching with vector retrieval; do not run separate substring searches.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of hybrid matches to return
queryYesHybrid retrieval query. Handles exact names/SKUs/IDs and natural-language visual or attribute intent.
item_typesNoOptional item types to search. Omit to search clothing, avatars/models, locations, art directions, uploaded files, and generation results.
refresh_indexNoForce-refresh missing or stale index rows for currently visible library items before searching. Leave false for normal MCP use; search refreshes once automatically only when no accessible match is found.

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the annotations (read-only, idempotent, non-destructive), the description discloses the retrieval mechanism ('indexed lexical matching with vector retrieval'), what is returned ('stable typed IDs, ids_by_type, detail_tool/detail_arguments, and selection hints'), and how to use ArtDirection results ('use the returned art_direction_id in briefs'). This adds substantial behavioral context not present in the structured data.

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

Conciseness5/5

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

Three dense, information-packed sentences that front-load the core purpose and scope, then provide usage guidance, return-value summary, and technical detail. Every sentence earns its place without redundancy, and the structure is logical: scope → when to use → workflow → return semantics → technical mechanism.

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's complexity (multiple item types, hybrid retrieval, no output schema), the description is remarkably complete. It explains the return format, integration with list_outfits and propose_outfits, how to handle ArtDirections in briefs, and the internal retrieval methodology. Combined with the rich input schema and annotations, it provides all needed context for an AI agent to select and use the tool correctly.

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?

Input schema has 100% coverage with descriptive parameter names and explanations (e.g., 'Hybrid retrieval query. Handles exact names/SKUs/IDs and natural-language visual or attribute intent'). The description adds no additional parameter-level detail, but reinforces the query semantics with examples. Baselines at 3 given full schema coverage; no more credit warranted.

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 description clearly states the tool performs 'universal hybrid retrieval' across the user's visible Uwear library, naming specific resource types (garments, avatars/models, locations, ArtDirections, uploaded files, generation results). It distinguishes itself from sibling tools by specifying 'use this before opening the picker' and 'do not run separate substring searches', making its unique role and scope unambiguous.

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?

Explicitly tells when to use the tool (when user describes assets by exact name/SKU or natural language) and provides concrete examples. It also gives clear alternatives for specific scenarios, such as 'retrieve matching garments first, then call list_outfits with clothing_item_ids or propose_outfits from the garment IDs', and warns against redundant substring searches. This fully addresses usage versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_uwear_feedbackSubmit Uwear FeedbackA
Idempotent
Inspect

Submit a bug report or feature request to Uwear and return a private receipt. This creates a support record and can notify Uwear staff. Call it only when the user explicitly asks to submit, send, or report feedback, or after they confirm the exact summary. Never submit automatically because an error occurred, and never include the full conversation, credentials, secrets, raw provider payloads, or private URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageYesThe report the user explicitly approved. Include useful reproduction details, but never add secrets, credentials, full conversation history, raw provider payloads, or private URLs.
subjectNoShort summary of the confirmed report.
request_idYesStable unique ID for this submission. Reuse the same value only when retrying the same report.
feedback_typeYesUse bug_report for broken behavior or feature_request for an idea or improvement.
related_generation_idNoOptional Uwear generation ID directly related to the report.
related_generation_result_idNoOptional Uwear generation-result ID directly related to the report.

TDQS

A4.6/5.0
Behavior5/5

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

The description discloses important side effects beyond annotations: 'This creates a support record and can notify Uwear staff' and 'return a private receipt.' It also adds privacy boundaries (no credentials, secrets, raw payloads, private URLs). Annotations are not contradicted; readOnlyHint=false aligns with 'creates a support record.'

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

Conciseness5/5

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

Three sentences, front-loaded with the core purpose, followed by concise and necessary usage constraints. Every sentence adds value without redundancy or fluff.

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?

The description covers purpose, side effects, when to call, and content restrictions, which is comprehensive for a mutation tool with no output schema. However, it only vaguely mentions 'return a private receipt' without specifying the receipt format or further confirmation behavior, leaving slight ambiguity about the return value.

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 100%, so the baseline is 3. The description adds general constraints about message content ('never include...') but does not provide additional per-parameter meaning beyond the schema's own descriptions. It does not compensate significantly for any coverage gap, but none exists.

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 description states 'Submit a bug report or feature request to Uwear and return a private receipt,' which is a specific verb+resource combination and clearly distinguishes this tool from siblings like get_art_direction or create_tag. It also mentions the return behavior, adding useful scope.

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?

The description gives explicit when-to-use guidance: 'Call it only when the user explicitly asks to submit, send, or report feedback, or after they confirm the exact summary.' It also provides clear when-not-to-use rules: 'Never submit automatically because an error occurred' and forbids including sensitive data. This is thorough and preempts misuse.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_art_directionUpdate Art DirectionA
Destructive
Inspect

Update a company ArtDirection. System ArtDirections are read-only. When changing markdown directly, preserve the Variation Controls parser contract: reusable alternatives must be under ## Variation Controls, not only in prose.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated ArtDirection name
art_direction_idYesThe ArtDirection ID to update
content_markdownNoUpdated complete ArtDirection markdown. If editing directly, every reusable alternative that should rotate across generations must live under `## Variation Controls` as `###` controls with `A. Option` lines; do not leave selectable worlds, pose families, or shot-role plans only in prose.
reference_image_attachmentsNoReplacement authoring reference image attachments. These are for iterating the markdown only, not generation-time references.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already flag destructiveHint=true, and the description adds valuable context beyond that: system ArtDirections are read-only, and the Variation Controls parser contract must be preserved when editing markdown. This enriches the behavioral profile without contradicting annotations.

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

Conciseness5/5

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

Three concise sentences, each serving a distinct purpose: what the tool does, a critical usage constraint, and the parser-contract rule. No filler or repetition of schema details.

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?

The description covers key operational risks (system read-only, markdown parser) and important parameter semantics. However, it does not clarify whether partial updates are allowed (e.g., omitting name leaves it unchanged) or describe the response shape, which is a minor completeness gap given the absence of an output schema.

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% and the schema already documents all parameters, so baseline is 3. The description adds meaningful semantics for content_markdown by specifying the exact structure required (## Variation Controls, ### controls, A. Option lines), which goes beyond the schema's general guidance.

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 description clearly states the verb ('Update') and the specific resource ('company ArtDirection'), immediately distinguishing it from create, get, list, or duplicate sibling tools. The additional note about System ArtDirections being read-only further clarifies its target scope.

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 clear when-not: system ArtDirections are read-only, so this tool is only for company ArtDirections. It also provides context for when editing markdown directly, but does not explicitly name alternatives like create_art_direction or get_art_direction, so it lacks full alternative guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_briefRevise BriefAInspect

Replace the visible Uwear BriefProposal with a complete canonical command list. Edit commands[].input directly using the MCP-safe GenerationIntent fields and preserve every unchanged field and durable source. This is replacement state, not a partial diff. For video_garment_view_not_attached warnings, follow the capacity-aware remediation: never mix reference_attachments with img_ref_urls or append recommendations beyond remaining capacity. Include updated creative_context for photoshoot rewrites and explain the changed art direction. Webhook callback configuration is API-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
commandsYesCanonical generation commands. Each command contains the MCP-safe GenerationIntent fields and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically. Webhook callback configuration is API-only.
creative_contextNoRequired for photoshoot proposals and brief rewrites. Summarize the shoot-level creative approach that guided garment combos, avatars, prompts, and pipeline steps. By default prefer one cohesive art direction across the photoshoot, e.g. 'urban summer editorial', 'standard grey e-commerce', or 'sporty studio catalog'. Per-look prompts may differ for garment details, pose, framing, or avatar, but should feel part of the same shoot unless the user explicitly asks for multiple art directions, split concepts, A/B routes, or varied campaign directions. The assistant should explain this art direction to the user after proposing the brief and ask if they want changes.

TDQS

A3.8/5.0
Behavior4/5

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

With all annotations set to false, the description carries the behavioral disclosure burden. It clearly explains the replacement semantics ('This is replacement state, not a partial diff') and the preservation requirement ('preserve every unchanged field and durable source'). It also discloses that webhook callback configuration is API-only, which is valuable behavioral context beyond the schema. A slight gap is that it does not mention whether the update takes effect immediately or requires confirmation, though the schema's 'without immediate execution' partially covers this.

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 compact and front-loaded with the core behavior, then moves to specific remediation guidance. Every sentence contributes new information: replacement semantics, field preservation, warning handling, creative_context, and the API-only webhook limitation. It is dense but not bloated, though the 'replacement state' phrase partially repeats the opening clause.

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?

Given the rich input schema and the absence of an output schema, the description covers the most important operational details: replacement semantics, required preservation, video warning handling, creative_context usage, and API-only restrictions. It does not explain the relationship to sibling tools like confirm_brief or state what happens after update, but the schema's 'without immediate execution' context and the mention of a 'visible' proposal provide reasonable completeness for an agent.

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 description coverage is 100%, so the baseline is 3. The description adds practical guidance for the commands parameter by telling the agent to edit commands[].input directly and to follow capacity-aware remediation for reference_attachments. It also correctly highlights creative_context as required for photoshoot rewrites, adding meaning beyond the raw parameter definitions. It could have added more about the commands array structure, but it sufficiently supplements the schema.

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?

The description opens with a specific verb and resource: 'Replace the visible Uwear BriefProposal with a complete canonical command list.' It clarifies the operation is a full replacement ('replacement state, not a partial diff'), which distinguishes it from partial-edit tools. However, it does not explicitly name any sibling tool or differentiate itself from propose_brief/confirm_brief, so it stops short of full sibling differentiation.

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?

The description provides conditional guidance ('For video_garment_view_not_attached warnings...', 'Include updated creative_context for photoshoot rewrites'), which implies some use cases. It does not explicitly state when to use update_brief versus alternatives like propose_brief or confirm_brief, nor does it mention prerequisites such as an existing visible brief being required. The usage context is inferable but not explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_garmentUpdate GarmentA
Destructive
Inspect

Update a garment's metadata or patch its product photos. Send image changes through assets[] with front/back/side/detail roles. Provided front/back assets replace those singleton roles; provided side/detail assets are added. Omitted existing assets are preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoUpdated garment name
assetsNoAsset patch for garment product photos. A provided full front/back/side replaces that unique view; provided detail assets are added. Omitted existing assets are preserved.
genderNoUpdated target gender: male, female, or unisex
categoryNoUpdated canonical garment category
descriptionNoUpdated item-level garment description, or a hint to use when patching images
image_file_1NoGeneric top-level MCP file object for assets[].image_file references
image_file_2NoGeneric top-level MCP file object for assets[].image_file references
image_file_3NoGeneric top-level MCP file object for assets[].image_file references
image_file_4NoGeneric top-level MCP file object for assets[].image_file references
image_file_5NoGeneric top-level MCP file object for assets[].image_file references
image_file_6NoGeneric top-level MCP file object for assets[].image_file references
image_file_7NoGeneric top-level MCP file object for assets[].image_file references
image_file_8NoGeneric top-level MCP file object for assets[].image_file references
image_file_9NoGeneric top-level MCP file object for assets[].image_file references
image_file_10NoGeneric top-level MCP file object for assets[].image_file references
image_file_11NoGeneric top-level MCP file object for assets[].image_file references
image_file_12NoGeneric top-level MCP file object for assets[].image_file references
image_file_13NoGeneric top-level MCP file object for assets[].image_file references
image_file_14NoGeneric top-level MCP file object for assets[].image_file references
image_file_15NoGeneric top-level MCP file object for assets[].image_file references
image_file_16NoGeneric top-level MCP file object for assets[].image_file references
image_file_17NoGeneric top-level MCP file object for assets[].image_file references
image_file_18NoGeneric top-level MCP file object for assets[].image_file references
image_file_19NoGeneric top-level MCP file object for assets[].image_file references
image_file_20NoGeneric top-level MCP file object for assets[].image_file references
clothing_item_idYesThe garment ID to update

TDQS

A4.2/5.0
Behavior4/5

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

The description discloses meaningful behavioral nuance: provided front/back assets replace singleton roles, side/detail assets are added, and omitted assets are preserved. This complements the destructiveHint=true annotation by clarifying exactly what gets modified and what remains untouched, although it does not discuss reversibility or other side effects.

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

Conciseness5/5

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

The description is concise—three sentences—and front-loaded with the core purpose before diving into asset semantics. Every sentence earns its place, and no redundant or filler content is present.

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?

Given the tool's large parameter surface and array-based asset input, the description plus the comprehensive schema covers the essential call semantics well. It stops short of explicitly explaining the image_file_1..image_file_20 wiring and the deprecation of asset_role, but those details are documented in the schema, so an agent can still invoke the tool correctly.

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 100%, so the schema already documents all parameter meanings thoroughly, including the assets patch rules. The description reinforces the front/back replace vs side/detail add concept, but it adds little new parameter-level meaning beyond what the schema already states.

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 description opens with a specific verb and resource—'update a garment's metadata or patch its product photos'—which clearly defines the operation. It distinguishes the tool from siblings like upload_garment_from_chat_file, upload_garment_from_public_url, and get_garment by framing it as an update/patch operation on an existing garment.

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?

It states clear context for use: updating an existing garment's metadata or photos, and it directs image changes through assets[]. It does not explicitly name alternatives or list when-not-to-use cases, but the 'update' versus 'upload' framing strongly implies the appropriate use case.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_montage_proposalUpdate Video MontageA
Read-onlyIdempotent
Inspect

Patch the latest MontageProposal already shown in the UI. Use only for an existing video montage/reel/stitched sequence proposal; do not use this to modify a photoshoot brief. For photoshoot brief changes, call update_brief instead. Prefer operations, an ordered list of typed montage edits such as clear_trim, remove, set_duration, set_trim_range, set_speed, set_muted, set_prompt, set_video_model, set_generate_audio, set_last_frame, set_aspect_ratio, and set_base_resolution. Use set_trim_range for requests like 'use the second half', 'start at 3s', or 'trim from 3s to 6s'. Operations are applied in order to the current montage state. Legacy flat fields are still accepted as a compatibility shim. This updates the proposal only; it does not execute export or generation.

ParametersJSON Schema
NameRequiredDescriptionDefault
mutedNoMute or unmute the selected clip(s).
speedNoPlayback speed multiplier.
promptNoUpdate the motion prompt for image-to-video montage items.
removeNoRemove the selected clip(s) from the proposal.
end_timeNoTrim end time in seconds for legacy trim-range updates.
clear_trimNoFor video clips, remove trim bounds and restore the full clip length in the proposal.
operationsNoOrdered montage patch operations. Preferred over the legacy flat fields below.
start_timeNoTrim start time in seconds for legacy trim-range updates.
clip_numberNo1-based clip number to update. Omit when apply_to_all=true.
video_modelNoUpdate the video model for image-to-video montage items.
apply_to_allNoApply changes to every clip in the current montage proposal.
aspect_ratioNoUpdate the montage output aspect ratio.
clip_numbersNoOptional list of 1-based clip numbers to update together.
generate_audioNoEnable or disable generated audio for image-to-video montage items.
last_frame_urlNoOptional last-frame URL for image-to-video montage items.
base_resolutionNoUpdate the montage output resolution height.
target_durationNoDesired final clip length in seconds.

TDQS

A4.1/5.0
Behavior1/5

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

The description states the tool 'patches' and 'updates' the montage proposal, which clearly implies a mutable side effect. However, annotations declare readOnlyHint: true, which explicitly claims the operation is read-only and has no side effects. This direct contradiction makes the behavioral transparency unreliable, warranting the minimum score.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: purpose, exclusions, operation preference, ordering semantics, legacy shim, and non-execution scope. It is front-loaded with the core action and avoids repeating schema field descriptions. Structure supports quick consumption despite the length.

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's complexity (17 parameters, many operation types), the description provides a complete mental model: what the resource is, when not to use it, how to express edits, ordering behavior, and what the tool does NOT do (export/generation). No output schema exists, so return values need not be described. The description is sufficiently complete for an agent to act on it.

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?

Input schema coverage is 100%, so baseline is 3. The description adds meaningful value by naming and grouping all supported operations, explaining that operations are applied in order, and providing natural-language examples for `set_trim_range`. It goes beyond the schema's per-field documentation, though it does not detail every parameter individually since the schema already does.

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 description opens with 'Patch the latest MontageProposal already shown in the UI', which clearly specifies the verb (patch), resource (MontageProposal), and scope (already shown in the UI). It also explicitly contrasts with update_brief, distinguishing the tool from a likely sibling. This is a specific, well-differentiated purpose statement.

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?

The description gives explicit when-to-use guidance ('only for an existing video montage/reel/stitched sequence proposal'), exclusions ('do not use this to modify a photoshoot brief'), and alternatives ('call update_brief instead'). It also advises preferring `operations` over flat fields, with concrete examples for `set_trim_range`. This is exemplary usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_preferencesUpdate PreferencesA
Destructive
Inspect

Update durable user preferences, photoshoot processes, or add a prompt. Treat all model fields as explicit model pins: leave model fields unset for normal backend defaults unless the user deliberately selected a specific model. The preferred way to save how a user generates is a template (save_template): a generation-preset template for reusable concrete single-shoot settings, a batch-workflow template for an ordered repeatable multi-shot flow — see the Demo — … system templates for worked examples. Use preferences for durable raw-text guidance that is not a concrete shoot setup.

ParametersJSON Schema
NameRequiredDescriptionDefault
add_promptNoPrompt to save: {text, category, is_favorite}
preferencesNoPreference key-value updates. Model fields (default_model, default_edit_model, default_upscale_model, default_video_model, and process-level model) are explicit pins only; leave them unset for backend defaults. Prefer a generation-preset template for reproducible concrete shoot settings and a batch-workflow template for an ordered multi-shot flow. Other fields include default_aspect_ratio, preferred_camera, default_resolution, photoshoot_processes, etc. Processes format: [{name, model, camera, aspect_ratio, resolution, prompt, num_images, pipeline: [{type, editModel, editPrompt, ...}], is_default}]

TDQS

A4.4/5.0
Behavior4/5

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

Annotations include destructiveHint=true but the description adds valuable context: 'durable' implies persistence, and it explains the nuanced behavior of model fields ('explicit model pins: leave model fields unset for normal backend defaults'). This goes beyond the annotations by clarifying side effects and default handling.

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

Conciseness5/5

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

The description is concise but content-rich. It front-loads the core action, then explains model-field behavior, and finally gives template vs. preference guidance. Every sentence contributes meaningful information without redundancy.

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?

The tool has no output schema and few parameters, but one parameter has a complex nested format. The description covers the key decision points (template vs. preference) and the pinning semantics, making it sufficient for most usage. It could mention overwrite behavior (since destructiveHint=true), but the annotation already signals this.

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 has 100% coverage with descriptive parameter details (e.g., processes format, add_prompt structure). The description adds the high-level distinction between preferences and templates, but doesn't detail individual parameters beyond what the schema provides. Baseline 3 is appropriate given strong schema coverage.

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 description clearly states the tool's function: 'Update durable user preferences, photoshoot processes, or add a prompt.' It uses a specific verb ('update') and resource, and explicitly differentiates from the sibling tool save_template by describing preferences as durable raw-text guidance rather than concrete shoot setups.

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?

Provides explicit guidance: 'The preferred way to save how a user generates is a template (save_template)... Use preferences for durable raw-text guidance that is not a concrete shoot setup.' It also instructs when to leave model fields unset, giving clear when-to-use versus when-not-to-use direction.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_avatar_from_chat_fileUpload Avatars from ChatAInspect

Batch upload reusable avatars/models from person photos the user attached in chat. Each photo becomes the upper_body_front identity anchor. Keep names and optional user-given age_range, build, and height_cm in avatars[], then pass top-level image_file_1, image_file_2, etc. in the same order. Traits are never guessed. No base64, no local paths. Do not use ordinary text-to-image results as an upload fallback; use generate_avatar followed by save_generated_avatar for Uwear-created avatars. Use only when the user explicitly wants a specific or consistent person.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSingle recovered avatar/model name
buildNoOptional concrete physical build. Never inferred.
avatarsNoAvatar/model metadata in the same order as image_file_1, image_file_2, etc. No base64.
age_rangeNoOptional concrete age or age range. Never inferred.
file_nameNoSingle recovered original file name
height_cmNoOptional height in centimeters. Never inferred.
image_urlNoSingle resolved download URL used by automatic opaque-file recovery.
mime_typeNoSingle recovered MIME/content type, e.g. image/png
descriptionNoSingle recovered avatar metadata
image_file_1NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_2NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_3NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_4NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_5NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_6NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_7NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_8NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_9NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.
image_file_10NoHost-provided uploaded file reference for the matching item index when it has no image_url. Use the file object supplied by the host, not a bare file_... ID.

TDQS

A4.6/5.0
Behavior4/5

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

The description adds behavioral context beyond the annotations: 'Each photo becomes the upper_body_front identity anchor' and 'Traits are never guessed.' It also discloses important input constraints ('No base64, no local paths'). The annotations only indicate non-read-only and non-destructive, so the description meaningfully fills gaps about how the tool behaves.

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

Conciseness5/5

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

The description is appropriately concise at four sentences, with each sentence serving a distinct purpose: stating the core function, describing the identity anchor, listing input constraints, and providing usage boundaries/alternatives. It is front-loaded with the primary action and contains no fluff or redundant details.

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?

The tool has 19 parameters and nested objects, but the description supplies enough high-level guidance for correct invocation: the batch nature, ordering needs, input types, and constraints. It does not explain return values, but with no output schema specified, this is acceptable. It also clearly differentiates from the generate_avatar flow, making it complete for an agent to decide when and how to use it.

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?

While the schema covers 100% of parameters, the description adds crucial relational semantics: 'Keep names... in avatars[], then pass top-level image_file_1, image_file_2, etc. in the same order.' This clarifies the critical alignment between the array and the file parameters, which is not obvious from individual schema descriptions. It also reinforces the 'No base64' constraint.

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 description clearly states the tool's purpose: 'Batch upload reusable avatars/models from person photos the user attached in chat.' This is specific with a verb and resource, and it distinguishes from siblings like generate_avatar by specifying 'from person photos... attached in chat' and 'reusable avatars/models.' It also clarifies that each photo becomes an 'upper_body_front identity anchor,' which further defines the tool's role.

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?

The description explicitly states when to use the tool ('Use only when the user explicitly wants a specific or consistent person') and when not to ('Do not use ordinary text-to-image results as an upload fallback'). It names the alternative tools: 'use generate_avatar followed by save_generated_avatar for Uwear-created avatars.' This provides clear, actionable guidance relative to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_garment_from_chat_fileUpload Garments from ChatAInspect

Batch upload garments from ChatGPT attachments. Defaults to background removal; pass processing_mode='none' to store original images as-is. Pass actual file objects only in top-level image_file_1, image_file_2, etc. Prefer garments[].assets with {asset_kind: full|detail, asset_view: front|back|side, image_file: 'image_file_N'}; exactly one full front is required, every full view is unique, and detail views can repeat. Do not rely on array position to pair assets; every asset must reference its exact top-level field name. No image_url here; use upload_garment_from_public_url for URLs. For local filesystem files, use prepare_local_garment_upload instead. No base64 and no local paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
garmentsYesGarment metadata. Put files in top-level image_file_1..image_file_20 and reference those exact field names inside each garment. No base64.
image_file_1NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_2NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_3NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_4NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_5NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_6NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_7NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_8NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_9NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_10NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_11NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_12NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_13NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_14NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_15NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_16NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_17NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_18NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_19NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.
image_file_20NoTop-level ChatGPT file attachment. In garments[], reference this exact field name from assets[].image_file, e.g. image_file='image_file_1'. Do not rely on item order.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations are minimal (readOnlyHint=false, no others set), so the description carries the weight. It discloses the default behavior ('Defaults to background removal'), the effect of omitting processing_mode, and the API contract requirements (exact field-name references, uniqueness constraints on full views, repeatability of details). It does not mention auth requirements or rate limits, but the operational pitfalls (field-name mapping, no base64, no local paths) are well covered.

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

Conciseness5/5

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

The description is dense but efficiently organized, front-loading the purpose in the first sentence and then stacking actionable constraints. Every sentence earns its place—no filler. It covers purpose, defaults, preferred structure, constraints, exclusions, and alternatives in a compact form.

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?

This is a complex, 21-parameter tool with nested asset objects, legacy shortcuts, and multiple sibling tools. The description addresses the key operational risks (field-name mapping, no base64/paths/URLs, uniqueness rules, exact-view requirements) and points to correct alternatives. The absence of an output schema means the description can't lean on return-value documentation, but the input-contract clarity is thorough enough to make this fully usable.

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 description coverage is 100%, so the schema already documents every parameter. The description adds meaningful value beyond the schema by clarifying the preferred structure (garments[].assets vs legacy shortcuts), warning that image_file_N references must be exact field names and not positional, and explaining constraints like 'exactly one full front is required, every full view is unique, detail views can repeat.' The description's guidance on processing_mode values ('none' to store as-is) also adds semantics beyond the enum-free schema.

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 description states 'Batch upload garments from ChatGPT attachments' with specific verb+resource+source. It clearly distinguishes this from sibling tools by naming alternatives (upload_garment_from_public_url for URLs, prepare_local_garment_upload for local files), and it has two similarly-named chat-upload siblings (upload_avatar_from_chat_file) which this differentiates by resource type.

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?

The description provides explicit guidance: when to use processing_mode='none', how to structure assets (garments[].assets with asset_kind/asset_view pairing), and explicit exclusions ('No image_url here; use upload_garment_from_public_url for URLs' and 'For local filesystem files, use prepare_local_garment_upload instead'). It also warns against relying on array position and mandates exact top-level field references, which is critical operational guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_garment_from_public_urlUpload Garments from URLAInspect

Queue a recoverable batch upload from public HTTP(S) image URLs and return an operation immediately. Retry with the exact same arguments to read the stable operation state; retries do not create another upload. Defaults to background removal; pass processing_mode='none' to store original images as-is. Prefer assets with {asset_kind: full|detail, asset_view: front|back|side, asset_url}; exactly one full front is required, every full view is unique, and detail views can repeat. For ChatGPT attachments, use upload_garment_from_chat_file instead. For local filesystem files, use prepare_local_garment_upload instead. No base64, chat file objects, or local paths.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSingle garment name
assetsNoSingle garment full asset set. Use asset_kind/asset_view. Exactly one full front is required; full views are unique and detail views can repeat.
genderNoSingle garment gender: male, female, unisex
garmentsNoGarments to upload from public HTTP(S) URLs. No chat file objects and no base64.
file_nameNoSingle original file name
image_urlNoSingle public HTTP(S) front image URL
mime_typeNoSingle MIME/content type, e.g. image/png
descriptionNoSingle item-level garment description hint
back_image_urlNoSingle optional public HTTP(S) back image URL
side_image_urlNoSingle optional public HTTP(S) side image URL
processing_modeNoOptional image processing. 'background_removal' removes the background (the platform upload default); 'none' stores the image as-is. Omit to use background removal.
detail_image_urlsNoSingle optional public HTTP(S) detail image URLs

TDQS

A4/5.0
Behavior1/5

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

The annotations declare idempotentHint=false, but the description states 'Retry with the exact same arguments to read the stable operation state; retries do not create another upload.' That is an explicit idempotency claim and directly contradicts the annotation. Even though the description also discloses queueing, recovery, and processing defaults, the contradiction requires a score of 1 per the rubric.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: primary behavior, retry semantics, processing default, asset constraints, and sibling routing are all covered without fluff. The most important behavioral detail is front-loaded before the alternatives.

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 12-parameter batch upload tool with no output schema, the description covers input source, retry/recovery behavior, default processing mode, asset constraints, and exclusions. It does not describe the shape of the returned operation object, which is a secondary gap, and the idempotency contradiction further reduces trust, but the practical invocation guidance is strong.

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 useful guidance beyond the schema by telling agents to prefer structured assets with asset_kind, asset_view, and asset_url over legacy shortcuts. It also reinforces the critical invariants (exactly one full front, unique full views, repeatable detail views) and clarifies accepted input types.

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 description opens with a specific verb and resource: 'Queue a recoverable batch upload from public HTTP(S) image URLs and return an operation immediately.' It clearly differentiates from sibling tools by naming upload_garment_from_chat_file and prepare_local_garment_upload, so an agent can select this tool without ambiguity.

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?

The description explicitly states when to use this tool versus alternatives: public HTTP(S) URLs, not ChatGPT attachments, not local filesystem files. It also names the exact sibling tools to use instead in those cases and excludes base64, chat file objects, and local paths, leaving no inference required.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

view_imageAnalyze ImageA
Read-onlyIdempotent
Inspect

Analyze any image using AI vision for manual inspection, debugging, visual description, or supplemental critique. Provide exactly one source: generation_result_id for a Shoot Board generation, uploaded_file_id for a Files item, or image_url for a public HTTPS image. Do not use this as the primary QA mechanism when the user asks to QA, quality-check, validate, review, approve/reject, or assess generated results; for QA requests use queue_generation_result_qa first, then read_generation_result_qa.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionYesWhat to analyze: e.g. 'Is this a flat lay or worn on a model?', 'Does this need background removal?', 'Describe the garment details'. Do not use this as the primary tool for generation-result QA; use queue_generation_result_qa and read_generation_result_qa for QA requests.
image_urlNoPublic HTTPS image URL to analyze. Optional if generation_result_id or uploaded_file_id is provided.
uploaded_file_idNoID of an uploaded file to analyze. Use for items from the Files library.
generation_result_idNoID of an existing generation result to analyze. Preferred for Shoot Board generation items because the server resolves the HTTPS image URL.

TDQS

A4.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the critical constraint 'Provide exactly one source' and clarifies that generation_result_id is preferred for Shoot Board items because the server resolves the HTTPS URL—useful behavioral context beyond the annotations.

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

Conciseness5/5

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

The description is concise and well-structured: first sentence states the broad purpose, second provides source selection guidance, third excludes QA usage with alternatives. No wasted words, every sentence contributes.

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 read-only analysis tool with 4 parameters, clear source requirements, and explicit alternative guidance, the description is complete. It covers usage exclusions, parameter selection, and behavioral expectations without needing an output schema.

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% and each parameter has a description, but the description adds extra semantic value by mapping each source type to its intended use case (generation_result_id for Shoot Board, uploaded_file_id for Files, image_url for public HTTPS) and explaining the preference rationale. This exceeds the schema descriptions.

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 description clearly states the tool's function: 'Analyze any image using AI vision' with specific use cases (manual inspection, debugging, visual description, supplemental critique). It also explicitly differentiates from sibling QA tools by stating it should not be used as the primary QA mechanism.

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?

It provides explicit when-to-use context (manual inspection, debugging, etc.) and when-not-to-use, naming alternative tools: 'for QA requests use queue_generation_result_qa first, then read_generation_result_qa.' This fully covers usage scoping.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedget_template1 field changed
      • addedInput schema / $defs / TemplateKind / description
        Added value: +"generation_preset is writable; batch_workflow is retained read-only history."
    • Changedlist_templates2 fields changed
      • addedInput schema / $defs / TemplateKind / description
        Added value: +"generation_preset is writable; batch_workflow is retained read-only history."
      • changedInput schema / properties / template_kind / description
        Previous value: -"Filter by generation_preset or batch_workflow"New value: +"Filter generation presets or read-only historical batch_workflow records"
    • Changedsave_template2 fields changed
      • addedInput schema / $defs / TemplateKind / description
        Added value: +"generation_preset is writable; batch_workflow is retained read-only history."
      • changedInput schema / properties / template_kind / description
        Previous value: -"Template kind: generation_preset or batch_workflow"New value: +"Template kind: generation_preset. Legacy batch_workflow writes are retired."
  2. 2 tool updates
    • Addedcopy_template_to_generate_node_config
    • Changedgenerate_avatar1 field changed
      • addedInput schema / properties / expression
        Added value: +{
        +  "default": null,
        +  "description": "Exact expression instruction for a supported reference view. Replaces the configured neutral expression default.",
        +  "maxLength": 500,
        +  "type": "string"
        +}
  3. 9 tool updates
    • Addedapply_backdrop
    • Addedget_connection_identity
    • Addedget_outfit
    • Changedlist_garments1 field changed
      • addedInput schema / properties / category
        Added value: +{
        +  "default": null,
        +  "description": "Filter to garments in any of these canonical categories",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedlist_outfits2 fields changed
      • changedInput schema / properties / sort / description
        Previous value: -"Sort: 'field:direction'. Default: created_at:desc"New value: +"Sort: 'field:direction'. Use 'latest_generation_at:desc' to surface recently generated outfits. Default: created_at:desc"
      • addedInput schema / properties / source
        Added value: +{
        +  "default": null,
        +  "description": "Filter by outfit source.",
        +  "enum": [
        +    "manual",
        +    "auto",
        +    "proposed"
        +  ],
        +  "type": "string"
        +}
    • Changedpropose_brief2 fields changed
      • addedInput schema / $defs / GenerationIntent / properties / audio_ref_urls
        Added value: +{
        +  "default": null,
        +  "description": "Public audio URLs supplied as model references. Only models that declare a positive max_reference_audio capability accept them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / $defs / GenerationIntent / properties / video_ref_urls
        Added value: +{
        +  "default": null,
        +  "description": "Public video URLs supplied as model references. Only models that declare a positive max_reference_videos capability accept them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedsave_template2 fields changed
      • addedInput schema / $defs / GenerationIntent / properties / audio_ref_urls
        Added value: +{
        +  "default": null,
        +  "description": "Public audio URLs supplied as model references. Only models that declare a positive max_reference_audio capability accept them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / $defs / GenerationIntent / properties / video_ref_urls
        Added value: +{
        +  "default": null,
        +  "description": "Public video URLs supplied as model references. Only models that declare a positive max_reference_videos capability accept them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_brief2 fields changed
      • addedInput schema / $defs / GenerationIntent / properties / audio_ref_urls
        Added value: +{
        +  "default": null,
        +  "description": "Public audio URLs supplied as model references. Only models that declare a positive max_reference_audio capability accept them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / $defs / GenerationIntent / properties / video_ref_urls
        Added value: +{
        +  "default": null,
        +  "description": "Public video URLs supplied as model references. Only models that declare a positive max_reference_videos capability accept them.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
    • Changedupdate_garment1 field changed
      • addedInput schema / properties / category
        Added value: +{
        +  "default": null,
        +  "description": "Updated canonical garment category",
        +  "type": "string"
        +}
  4. 6 tool updates
    • Changedget_generation_results3 fields changed
      • addedInput schema / properties / decision
        Added value: +{
        +  "default": null,
        +  "description": "Filter by the unified result verdict.",
        +  "enum": [
        +    "approved",
        +    "rejected",
        +    "undecided"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / decision_source
        Added value: +{
        +  "default": null,
        +  "description": "Filter by the verdict source.",
        +  "enum": [
        +    "auto",
        +    "human"
        +  ],
        +  "type": "string"
        +}
      • removedInput schema / properties / qa_decision
        Removed value: -{
        -  "default": null,
        -  "description": "Filter by QA decision. true = accepted, false = rejected.",
        -  "type": "boolean"
        -}
    • Changedget_template3 fields changed
      • addedInput schema / properties / share_code
        Added value: +{
        +  "default": null,
        +  "description": "Public t-xxxx share code",
        +  "pattern": "^t-[a-z0-9]{4}$",
        +  "type": "string"
        +}
      • addedInput schema / properties / template_id / default
        Added value: +null
      • removedInput schema / required
        Removed value: -[
        -  "template_id"
        -]
    • Changedlist_templates1 field changed
      • addedInput schema / properties / share_code
        Added value: +{
        +  "default": null,
        +  "description": "Return the template assigned this public t-xxxx share code",
        +  "pattern": "^t-[a-z0-9]{4}$",
        +  "type": "string"
        +}
    • Changedpropose_brief1 field changed
      • changedInput schema / $defs / GenerationIntent / properties / prompt / description
        Previous value: -"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. May be empty for upscale; generation routes validate separately."New value: +"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. Video does not inherit the source generation's ArtDirection; omit art_direction_id to use only the source frame and this prompt. May be empty for upscale; generation routes validate separately."
    • Changedsave_template1 field changed
      • changedInput schema / $defs / GenerationIntent / properties / prompt / description
        Previous value: -"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. May be empty for upscale; generation routes validate separately."New value: +"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. Video does not inherit the source generation's ArtDirection; omit art_direction_id to use only the source frame and this prompt. May be empty for upscale; generation routes validate separately."
    • Changedupdate_brief1 field changed
      • changedInput schema / $defs / GenerationIntent / properties / prompt / description
        Previous value: -"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. May be empty for upscale; generation routes validate separately."New value: +"Scene brief for this shot: setting, lighting, mood, camera/framing, pose — 2-5 compact positive sentences. Without art_direction_id this prompt reaches the image model as-is and is the entire creative direction: carry the shoot's world, lighting, and atmosphere here. With art_direction_id, the saved direction carries reusable style; add only per-shot intent. Supplied garment/avatar/reference images carry product appearance: refer to them semantically ('the supplied jacket'), never by image number — the backend appends the numbered reference map at dispatch. Styling intent (fit, tuck, drape, opening state) belongs here when it matters; re-described garment construction, product-fidelity warnings, and negative 'do not ...' blocks do not — with good references they degrade output. Say what to show, not what to avoid. Video commands: describe motion and camera movement. Video does not inherit the source generation's ArtDirection; omit art_direction_id to use only the source frame and this prompt. May be empty for upscale; generation routes validate separately."
  5. 13 tool updates
    • Addedadd_avatar_reference
    • Changedauthor_art_direction3 fields changed
      • addedInput schema / $defs / ArtDirectionAuthoringSourceInput
        Added value: +{
        +  "properties": {
        +    "image_url": {
        +      "default": null,
        +      "maxLength": 2048,
        +      "type": "string"
        +    },
        +    "reference_image_attachment": {
        +      "$ref": "#/$defs/ArtDirectionReferenceImage",
        +      "default": null
        +    },
        +    "source_type": {
        +      "$ref": "#/$defs/ArtDirectionAuthoringSourceType"
        +    },
        +    "text": {
        +      "default": null,
        +      "maxLength": 50000,
        +      "type": "string"
        +    },
        +    "uploaded_file_id": {
        +      "default": null,
        +      "minimum": 1,
        +      "type": "integer"
        +    },
        +    "url": {
        +      "default": null,
        +      "maxLength": 2048,
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "source_type"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / $defs / ArtDirectionAuthoringSourceType
        Added value: +{
        +  "enum": [
        +    "text",
        +    "image_url",
        +    "reference_image_attachment",
        +    "public_url",
        +    "uploaded_file",
        +    "website_crawl"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sources
        Added value: +{
        +  "description": "Supported authoring sources such as text, public URLs, image URLs, uploaded files, or durable reference image attachments",
        +  "items": {
        +    "$ref": "#/$defs/ArtDirectionAuthoringSourceInput"
        +  },
        +  "maxItems": 50,
        +  "type": "array"
        +}
    • Addedcreate_avatar_from_references
    • Removeddownload_generation_results
    • Changedgenerate_avatar8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / age_range / description
        Previous value: -"Optional concrete age or age range for the avatar footer."New value: +"Optional concrete age or age range. Never inferred."
      • addedInput schema / properties / avatar_id
        Added value: +{
        +  "default": null,
        +  "description": "Optional existing avatar whose anchor fixes identity for a slot view. Not required when identity_reference_urls are supplied.",
        +  "exclusiveMinimum": 0,
        +  "type": "integer"
        +}
      • changedInput schema / properties / build / description
        Previous value: -"Optional authoritative physical build for the avatar footer. When omitted, the canonical creator derives it from the resolved persona. Placeholder values and inference instructions are rejected."New value: +"Optional concrete physical build. Never inferred."
      • addedInput schema / properties / height_cm
        Added value: +{
        +  "default": null,
        +  "description": "Optional height in centimeters. Never inferred.",
        +  "maximum": 220,
        +  "minimum": 40,
        +  "type": "integer"
        +}
      • addedInput schema / properties / identity_reference_urls
        Added value: +{
        +  "default": null,
        +  "description": "Person-image URLs that fix identity for a slot view. In a draft flow, pass the generated bust URL here before the avatar has been saved.",
        +  "items": {
        +    "type": "string"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
      • changedInput schema / properties / prompt / description
        Previous value: -"Description of the person to render as a reusable avatar design sheet"New value: +"Description of the person to render as a reusable avatar reference"
      • addedInput schema / properties / view
        Added value: +{
        +  "default": "upper_body_front",
        +  "description": "Reference view to generate. Defaults to the upper-body identity anchor.",
        +  "enum": [
        +    "upper_body_front",
        +    "full_body_front",
        +    "full_body_side",
        +    "full_body_back",
        +    "detail_eyes",
        +    "detail_skin"
        +  ],
        +  "type": "string"
        +}
    • Addediterate_art_direction
    • Changedpropose_brief1 field changed
      • addedInput schema / $defs / GenerationIntent / properties / last_frame_attachment
        Added value: +{
        +  "$ref": "#/$defs/GenerationReferenceAttachmentInput",
        +  "default": null,
        +  "description": "Durable reference to the photo the clip closes on, resolved to a URL at dispatch. The durable form of last_frame_url, for callers that hold an id rather than a link — a workflow wiring a step's output into a later step's last frame cannot know the URL when the graph is authored."
        +}
    • Changedsave_generated_avatar4 fields changed
      • addedInput schema / properties / additional_result_ids
        Added value: +{
        +  "default": null,
        +  "description": "Other completed generate_avatar result IDs to save into their own avatar_creator.view slots in the same avatar.",
        +  "items": {
        +    "type": "integer"
        +  },
        +  "maxItems": 5,
        +  "type": "array"
        +}
      • removedInput schema / properties / description
        Removed value: -{
        -  "additionalProperties": true,
        -  "default": null,
        -  "description": "Optional avatar metadata. If omitted, the system can analyze the image.",
        -  "type": "object"
        -}
      • removedInput schema / properties / enhance_description
        Removed value: -{
        -  "default": true,
        -  "description": "Analyze the image to create avatar metadata when description is omitted",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / generation_result_id / exclusiveMinimum
        Added value: +0
    • Changedsave_template1 field changed
      • addedInput schema / $defs / GenerationIntent / properties / last_frame_attachment
        Added value: +{
        +  "$ref": "#/$defs/GenerationReferenceAttachmentInput",
        +  "default": null,
        +  "description": "Durable reference to the photo the clip closes on, resolved to a URL at dispatch. The durable form of last_frame_url, for callers that hold an id rather than a link — a workflow wiring a step's output into a later step's last frame cannot know the URL when the graph is authored."
        +}
    • Addedsubmit_uwear_feedback
    • Changedupdate_brief1 field changed
      • addedInput schema / $defs / GenerationIntent / properties / last_frame_attachment
        Added value: +{
        +  "$ref": "#/$defs/GenerationReferenceAttachmentInput",
        +  "default": null,
        +  "description": "Durable reference to the photo the clip closes on, resolved to a URL at dispatch. The durable form of last_frame_url, for callers that hold an id rather than a link — a workflow wiring a step's output into a later step's last frame cannot know the URL when the graph is authored."
        +}
    • Changedupload_avatar_from_chat_file8 fields changed
      • addedInput schema / $defs / AvatarChatFileUploadItem / additionalProperties
        Added value: +false
      • addedInput schema / $defs / AvatarChatFileUploadItem / properties / age_range
        Added value: +{
        +  "default": null,
        +  "description": "Optional concrete age or age range. Never inferred.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
      • addedInput schema / $defs / AvatarChatFileUploadItem / properties / build
        Added value: +{
        +  "default": null,
        +  "description": "Optional concrete physical build. Never inferred.",
        +  "maxLength": 100,
        +  "type": "string"
        +}
      • addedInput schema / $defs / AvatarChatFileUploadItem / properties / height_cm
        Added value: +{
        +  "default": null,
        +  "description": "Optional height in centimeters. Never inferred.",
        +  "maximum": 220,
        +  "minimum": 40,
        +  "type": "integer"
        +}
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / age_range
        Added value: +{
        +  "default": null,
        +  "description": "Optional concrete age or age range. Never inferred.",
        +  "maxLength": 20,
        +  "type": "string"
        +}
      • addedInput schema / properties / build
        Added value: +{
        +  "default": null,
        +  "description": "Optional concrete physical build. Never inferred.",
        +  "maxLength": 100,
        +  "type": "string"
        +}
      • addedInput schema / properties / height_cm
        Added value: +{
        +  "default": null,
        +  "description": "Optional height in centimeters. Never inferred.",
        +  "maximum": 220,
        +  "minimum": 40,
        +  "type": "integer"
        +}
    • Changedview_image5 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / generation_result_id / minimum
        Added value: +1
      • addedInput schema / properties / question / maxLength
        Added value: +4000
      • addedInput schema / properties / question / minLength
        Added value: +1
      • addedInput schema / properties / uploaded_file_id / minimum
        Added value: +1
  6. 23 tool updates
    • Removedarchive_production_workflow
    • Removedcreate_production_workflow
    • Removedcreate_production_workflow_version
    • Removedget_production_workflow
    • Removedget_production_workflow_control
    • Removedget_production_workflow_run
    • Removedget_production_workflow_version
    • Removedlist_production_workflow_runs
    • Removedlist_production_workflow_versions
    • Removedlist_production_workflows
    • Changedpropose_brief5 fields changed
      • changedInput schema / $defs / GenerationIntent / description
        Previous value: -"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later."New value: +"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later. MCP omits webhook callback configuration, which remains API-only."
      • removedInput schema / $defs / GenerationIntent / properties / webhook_events
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "enum": [
        -      "generation.completed",
        -      "generation.failed"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / $defs / GenerationIntent / properties / webhook_secret
        Removed value: -{
        -  "default": null,
        -  "description": "Optional HMAC signing secret for customer callbacks.",
        -  "type": "string",
        -  "ui": {
        -    "sensitive": true
        -  }
        -}
      • removedInput schema / $defs / GenerationIntent / properties / webhook_url
        Removed value: -{
        -  "default": null,
        -  "type": "string"
        -}
      • changedInput schema / properties / commands / description
        Previous value: -"Canonical generation commands. Each command contains the exact REST GenerationIntent contract and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically."New value: +"Canonical generation commands. Each command contains the MCP-safe GenerationIntent fields and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically. Webhook callback configuration is API-only."
    • Removedpublish_production_workflow_version
    • Changedsave_reference_file_from_chat_file32 fields changed
      • removedInput schema / $defs / MCPFileReference
        Removed value: -{
        -  "additionalProperties": true,
        -  "description": "Host-provided MCP file reference for user-uploaded images.",
        -  "properties": {
        -    "content_type": {
        -      "default": null,
        -      "description": "File content type, e.g. image/png",
        -      "type": "string"
        -    },
        -    "download_url": {
        -      "default": null,
        -      "description": "Temporary host-authorized download URL for this file",
        -      "type": "string"
        -    },
        -    "file_id": {
        -      "default": null,
        -      "description": "Host file ID",
        -      "type": "string"
        -    },
        -    "file_name": {
        -      "default": null,
        -      "description": "Original uploaded file name",
        -      "type": "string"
        -    },
        -    "mime_type": {
        -      "default": null,
        -      "description": "File MIME type, e.g. image/png",
        -      "type": "string"
        -    },
        -    "name": {
        -      "default": null,
        -      "description": "Original uploaded file name when the host uses name",
        -      "type": "string"
        -    },
        -    "uri": {
        -      "default": null,
        -      "description": "Host file URI when available",
        -      "type": "string"
        -    },
        -    "url": {
        -      "default": null,
        -      "description": "Temporary/public file URL when the host exposes one",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / $defs / OpenAIFile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "download_url": {
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / image_file_1 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_1 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_1 / default
        Removed value: -null
      • addedInput schema / properties / image_file_10 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_10 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_10 / default
        Removed value: -null
      • addedInput schema / properties / image_file_2 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_2 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_2 / default
        Removed value: -null
      • addedInput schema / properties / image_file_3 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_3 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_3 / default
        Removed value: -null
      • addedInput schema / properties / image_file_4 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_4 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_4 / default
        Removed value: -null
      • addedInput schema / properties / image_file_5 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_5 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_5 / default
        Removed value: -null
      • addedInput schema / properties / image_file_6 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_6 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_6 / default
        Removed value: -null
      • addedInput schema / properties / image_file_7 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_7 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_7 / default
        Removed value: -null
      • addedInput schema / properties / image_file_8 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_8 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_8 / default
        Removed value: -null
      • addedInput schema / properties / image_file_9 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_9 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_9 / default
        Removed value: -null
    • Changedsave_template4 fields changed
      • changedInput schema / $defs / GenerationIntent / description
        Previous value: -"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later."New value: +"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later. MCP omits webhook callback configuration, which remains API-only."
      • removedInput schema / $defs / GenerationIntent / properties / webhook_events
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "enum": [
        -      "generation.completed",
        -      "generation.failed"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / $defs / GenerationIntent / properties / webhook_secret
        Removed value: -{
        -  "default": null,
        -  "description": "Optional HMAC signing secret for customer callbacks.",
        -  "type": "string",
        -  "ui": {
        -    "sensitive": true
        -  }
        -}
      • removedInput schema / $defs / GenerationIntent / properties / webhook_url
        Removed value: -{
        -  "default": null,
        -  "type": "string"
        -}
    • Removedstart_production_workflow_run
    • Removedstart_production_workflow_run_batch
    • Changedupdate_brief5 fields changed
      • changedInput schema / $defs / GenerationIntent / description
        Previous value: -"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later."New value: +"Caller-owned model-generation intent shared by every public adapter.\n\nAuthentication-derived identity deliberately does not belong here. REST,\nAgent, MCP, batch, and integrations all submit this exact contract; the\ncommand planner combines it with server-owned execution context later. MCP omits webhook callback configuration, which remains API-only."
      • removedInput schema / $defs / GenerationIntent / properties / webhook_events
        Removed value: -{
        -  "default": null,
        -  "items": {
        -    "enum": [
        -      "generation.completed",
        -      "generation.failed"
        -    ],
        -    "type": "string"
        -  },
        -  "type": "array"
        -}
      • removedInput schema / $defs / GenerationIntent / properties / webhook_secret
        Removed value: -{
        -  "default": null,
        -  "description": "Optional HMAC signing secret for customer callbacks.",
        -  "type": "string",
        -  "ui": {
        -    "sensitive": true
        -  }
        -}
      • removedInput schema / $defs / GenerationIntent / properties / webhook_url
        Removed value: -{
        -  "default": null,
        -  "type": "string"
        -}
      • changedInput schema / properties / commands / description
        Previous value: -"Canonical generation commands. Each command contains the exact REST GenerationIntent contract and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically."New value: +"Canonical generation commands. Each command contains the MCP-safe GenerationIntent fields and a durable source reference. Write each input.prompt as a compact positive scene description (setting, lighting, mood, camera, pose — for video, motion and camera movement); without art_direction_id the prompt is the entire creative direction, so give it the full scene. The attached garment/avatar/reference images carry product appearance, so never pad prompts with restated garment construction details, product-fidelity warnings, or negative 'do not' instruction blocks; styling intent (fit, tuck, drape) is fine. For video commands, attach available full back or side garment assets that the camera may reveal through input.reference_attachments when capacity permits. Do not combine reference_attachments with img_ref_urls; uploaded garment assets are not attached automatically. Webhook callback configuration is API-only."
    • Changedupdate_garment41 fields changed
      • addedInput schema / $defs / OpenAIFile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "download_url": {
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / image_file_1 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_1 / default
        Removed value: -null
      • addedInput schema / properties / image_file_10 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_10 / default
        Removed value: -null
      • addedInput schema / properties / image_file_11 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_11 / default
        Removed value: -null
      • addedInput schema / properties / image_file_12 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_12 / default
        Removed value: -null
      • addedInput schema / properties / image_file_13 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_13 / default
        Removed value: -null
      • addedInput schema / properties / image_file_14 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_14 / default
        Removed value: -null
      • addedInput schema / properties / image_file_15 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_15 / default
        Removed value: -null
      • addedInput schema / properties / image_file_16 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_16 / default
        Removed value: -null
      • addedInput schema / properties / image_file_17 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_17 / default
        Removed value: -null
      • addedInput schema / properties / image_file_18 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_18 / default
        Removed value: -null
      • addedInput schema / properties / image_file_19 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_19 / default
        Removed value: -null
      • addedInput schema / properties / image_file_2 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_2 / default
        Removed value: -null
      • addedInput schema / properties / image_file_20 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_20 / default
        Removed value: -null
      • addedInput schema / properties / image_file_3 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_3 / default
        Removed value: -null
      • addedInput schema / properties / image_file_4 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_4 / default
        Removed value: -null
      • addedInput schema / properties / image_file_5 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_5 / default
        Removed value: -null
      • addedInput schema / properties / image_file_6 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_6 / default
        Removed value: -null
      • addedInput schema / properties / image_file_7 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_7 / default
        Removed value: -null
      • addedInput schema / properties / image_file_8 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_8 / default
        Removed value: -null
      • addedInput schema / properties / image_file_9 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_9 / default
        Removed value: -null
    • Removedupdate_production_workflow
    • Removedupdate_production_workflow_control
    • Removedupdate_production_workflow_version
    • Changedupload_avatar_from_chat_file32 fields changed
      • removedInput schema / $defs / MCPFileReference
        Removed value: -{
        -  "additionalProperties": true,
        -  "description": "Host-provided MCP file reference for user-uploaded images.",
        -  "properties": {
        -    "content_type": {
        -      "default": null,
        -      "description": "File content type, e.g. image/png",
        -      "type": "string"
        -    },
        -    "download_url": {
        -      "default": null,
        -      "description": "Temporary host-authorized download URL for this file",
        -      "type": "string"
        -    },
        -    "file_id": {
        -      "default": null,
        -      "description": "Host file ID",
        -      "type": "string"
        -    },
        -    "file_name": {
        -      "default": null,
        -      "description": "Original uploaded file name",
        -      "type": "string"
        -    },
        -    "mime_type": {
        -      "default": null,
        -      "description": "File MIME type, e.g. image/png",
        -      "type": "string"
        -    },
        -    "name": {
        -      "default": null,
        -      "description": "Original uploaded file name when the host uses name",
        -      "type": "string"
        -    },
        -    "uri": {
        -      "default": null,
        -      "description": "Host file URI when available",
        -      "type": "string"
        -    },
        -    "url": {
        -      "default": null,
        -      "description": "Temporary/public file URL when the host exposes one",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / $defs / OpenAIFile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "download_url": {
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / image_file_1 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_1 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_1 / default
        Removed value: -null
      • addedInput schema / properties / image_file_10 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_10 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_10 / default
        Removed value: -null
      • addedInput schema / properties / image_file_2 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_2 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_2 / default
        Removed value: -null
      • addedInput schema / properties / image_file_3 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_3 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_3 / default
        Removed value: -null
      • addedInput schema / properties / image_file_4 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_4 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_4 / default
        Removed value: -null
      • addedInput schema / properties / image_file_5 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_5 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_5 / default
        Removed value: -null
      • addedInput schema / properties / image_file_6 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_6 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_6 / default
        Removed value: -null
      • addedInput schema / properties / image_file_7 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_7 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_7 / default
        Removed value: -null
      • addedInput schema / properties / image_file_8 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_8 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_8 / default
        Removed value: -null
      • addedInput schema / properties / image_file_9 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_9 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_9 / default
        Removed value: -null
    • Changedupload_garment_from_chat_file62 fields changed
      • removedInput schema / $defs / MCPFileReference
        Removed value: -{
        -  "additionalProperties": true,
        -  "description": "Host-provided MCP file reference for user-uploaded images.",
        -  "properties": {
        -    "content_type": {
        -      "default": null,
        -      "description": "File content type, e.g. image/png",
        -      "type": "string"
        -    },
        -    "download_url": {
        -      "default": null,
        -      "description": "Temporary host-authorized download URL for this file",
        -      "type": "string"
        -    },
        -    "file_id": {
        -      "default": null,
        -      "description": "Host file ID",
        -      "type": "string"
        -    },
        -    "file_name": {
        -      "default": null,
        -      "description": "Original uploaded file name",
        -      "type": "string"
        -    },
        -    "mime_type": {
        -      "default": null,
        -      "description": "File MIME type, e.g. image/png",
        -      "type": "string"
        -    },
        -    "name": {
        -      "default": null,
        -      "description": "Original uploaded file name when the host uses name",
        -      "type": "string"
        -    },
        -    "uri": {
        -      "default": null,
        -      "description": "Host file URI when available",
        -      "type": "string"
        -    },
        -    "url": {
        -      "default": null,
        -      "description": "Temporary/public file URL when the host exposes one",
        -      "type": "string"
        -    }
        -  },
        -  "type": "object"
        -}
      • addedInput schema / $defs / OpenAIFile
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "download_url": {
        +      "type": "string"
        +    },
        +    "file_id": {
        +      "type": "string"
        +    },
        +    "file_name": {
        +      "type": "string"
        +    },
        +    "mime_type": {
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "download_url",
        +    "file_id"
        +  ],
        +  "type": "object"
        +}
      • addedInput schema / properties / image_file_1 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_1 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_1 / default
        Removed value: -null
      • addedInput schema / properties / image_file_10 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_10 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_10 / default
        Removed value: -null
      • addedInput schema / properties / image_file_11 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_11 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_11 / default
        Removed value: -null
      • addedInput schema / properties / image_file_12 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_12 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_12 / default
        Removed value: -null
      • addedInput schema / properties / image_file_13 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_13 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_13 / default
        Removed value: -null
      • addedInput schema / properties / image_file_14 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_14 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_14 / default
        Removed value: -null
      • addedInput schema / properties / image_file_15 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_15 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_15 / default
        Removed value: -null
      • addedInput schema / properties / image_file_16 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_16 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_16 / default
        Removed value: -null
      • addedInput schema / properties / image_file_17 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_17 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_17 / default
        Removed value: -null
      • addedInput schema / properties / image_file_18 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_18 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_18 / default
        Removed value: -null
      • addedInput schema / properties / image_file_19 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_19 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_19 / default
        Removed value: -null
      • addedInput schema / properties / image_file_2 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_2 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_2 / default
        Removed value: -null
      • addedInput schema / properties / image_file_20 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_20 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_20 / default
        Removed value: -null
      • addedInput schema / properties / image_file_3 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_3 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_3 / default
        Removed value: -null
      • addedInput schema / properties / image_file_4 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_4 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_4 / default
        Removed value: -null
      • addedInput schema / properties / image_file_5 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_5 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_5 / default
        Removed value: -null
      • addedInput schema / properties / image_file_6 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_6 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_6 / default
        Removed value: -null
      • addedInput schema / properties / image_file_7 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_7 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_7 / default
        Removed value: -null
      • addedInput schema / properties / image_file_8 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_8 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_8 / default
        Removed value: -null
      • addedInput schema / properties / image_file_9 / $ref
        Added value: +"#/$defs/OpenAIFile"
      • removedInput schema / properties / image_file_9 / anyOf
        Removed value: -[
        -  {
        -    "$ref": "#/$defs/MCPFileReference"
        -  },
        -  {
        -    "type": "string"
        -  }
        -]
      • removedInput schema / properties / image_file_9 / default
        Removed value: -null
  7. 21 tool updates
    • Changedarchive_production_workflow14 fields changed
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"WorkflowIdentityInput"
      • removedOutput schema / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / properties / run_time_slot_kinds / title
        Removed value: -"Run Time Slot Kinds"
      • removedOutput schema / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / title
        Removed value: -"WorkflowResourceRead"
    • Changedcreate_production_workflow16 fields changed
      • removedInput schema / $defs / WorkflowCreate / properties / enabled / title
        Removed value: -"Enabled"
      • removedInput schema / $defs / WorkflowCreate / properties / name / title
        Removed value: -"Name"
      • removedInput schema / $defs / WorkflowCreate / title
        Removed value: -"WorkflowCreate"
      • removedInput schema / title
        Removed value: -"CreateWorkflowInput"
      • removedOutput schema / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / properties / run_time_slot_kinds / title
        Removed value: -"Run Time Slot Kinds"
      • removedOutput schema / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / title
        Removed value: -"WorkflowResourceRead"
    • Changedcreate_production_workflow_version8 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "AiModelInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "model_slug": {
        -        "anyOf": [
        -          {
        -            "maxLength": 100,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Model Slug"
        -      }
        -    },
        -    "title": "AiModelInputConfig",
        -    "type": "object"
        -  },
        -  "AiModelInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/AiModelInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.ai_model",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "AiModelInputNodeInput",
        -    "type": "object"
        -  },
        -  "ArtDirectionInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "art_direction_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Art Direction Id"
        -      },
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      }
        -    },
        -    "title": "ArtDirectionInputConfig",
        -    "type": "object"
        -  },
        -  "ArtDirectionInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/ArtDirectionInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.art_direction",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "ArtDirectionInputNodeInput",
        -    "type": "object"
        -  },
        -  "AvatarInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "avatar_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Avatar Id"
        -      }
        -    },
        -    "title": "AvatarInputConfig",
        -    "type": "object"
        -  },
        -  "AvatarInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/AvatarInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.avatar",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "AvatarInputNodeInput",
        -    "type": "object"
        -  },
        -  "BranchNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cases": {
        -        "additionalProperties": {
        -          "enum": [
        -            "accepted",
        -            "rejected",
        -            "error"
        -          ],
        -          "type": "string"
        -        },
        -        "minProperties": 1,
        -        "propertyNames": {
        -          "enum": [
        -            "accepted",
        -            "rejected",
        -            "error"
        -          ]
        -        },
        -        "title": "Cases",
        -        "type": "object"
        -      },
        -      "condition_type": {
        -        "const": "qa_decision",
        -        "title": "Condition Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "condition_type",
        -      "cases"
        -    ],
        -    "title": "BranchNodeConfig",
        -    "type": "object"
        -  },
        -  "BranchNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/BranchNodeConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "branch",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "BranchNodeInput",
        -    "type": "object"
        -  },
        -  "ClothingInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "clothing_item_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Clothing Item Id"
        -      }
        -    },
        -    "title": "ClothingInputConfig",
        -    "type": "object"
        -  },
        -  "ClothingInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/ClothingInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.clothing",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "ClothingInputNodeInput",
        -    "type": "object"
        -  },
        -  "DeliverTagDestination": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "tag_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "maxItems": 50,
        -        "minItems": 1,
        -        "title": "Tag Ids",
        -        "type": "array"
        -      },
        -      "type": {
        -        "const": "tag",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "tag_ids"
        -    ],
        -    "title": "DeliverTagDestination",
        -    "type": "object"
        -  },
        -  "DeliverWebhookDestination": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "event_type": {
        -        "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -        "title": "Event Type",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "webhook",
        -        "title": "Type",
        -        "type": "string"
        -      },
        -      "webhook_id": {
        -        "format": "uuid",
        -        "title": "Webhook Id",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "webhook_id",
        -      "event_type"
        -    ],
        -    "title": "DeliverWebhookDestination",
        -    "type": "object"
        -  },
        -  "EdgeBindingInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "mode": {
        -        "enum": [
        -          "single",
        -          "collect"
        -        ],
        -        "title": "Mode",
        -        "type": "string"
        -      },
        -      "required": {
        -        "title": "Required",
        -        "type": "boolean"
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "background",
        -              "style"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Role"
        -      }
        -    },
        -    "required": [
        -      "mode",
        -      "required"
        -    ],
        -    "title": "EdgeBindingInput",
        -    "type": "object"
        -  },
        -  "EdgeEndpointInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "node_id": {
        -        "format": "uuid",
        -        "title": "Node Id",
        -        "type": "string"
        -      },
        -      "port": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Port",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "node_id",
        -      "port"
        -    ],
        -    "title": "EdgeEndpointInput",
        -    "type": "object"
        -  },
        -  "GenerateNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "model_slug": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Model Slug",
        -        "type": "string"
        -      },
        -      "parameters": {
        -        "additionalProperties": true,
        -        "title": "Parameters",
        -        "type": "object"
        -      },
        -      "variant": {
        -        "enum": [
        -          "generate",
        -          "edit",
        -          "text_to_image"
        -        ],
        -        "title": "Variant",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "variant",
        -      "model_slug",
        -      "parameters"
        -    ],
        -    "title": "GenerateNodeConfig",
        -    "type": "object"
        -  },
        -  "GenerateNodeConfigV1_2": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "model_slug": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Model Slug",
        -        "type": "string"
        -      },
        -      "parameters": {
        -        "additionalProperties": true,
        -        "title": "Parameters",
        -        "type": "object"
        -      },
        -      "variant": {
        -        "enum": [
        -          "generate",
        -          "edit",
        -          "text_to_image",
        -          "video"
        -        ],
        -        "title": "Variant",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "variant",
        -      "model_slug",
        -      "parameters"
        -    ],
        -    "title": "GenerateNodeConfigV1_2",
        -    "type": "object"
        -  },
        -  "GenerateNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/GenerateNodeConfig"
        -          },
        -          {
        -            "$ref": "#/$defs/GenerateNodeConfigV1_2"
        -          }
        -        ],
        -        "title": "Config"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "generate",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "GenerateNodeInput",
        -    "type": "object"
        -  },
        -  "ImageInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "generation_result_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Generation Result Id"
        -      }
        -    },
        -    "title": "ImageInputConfig",
        -    "type": "object"
        -  },
        -  "ImageInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/ImageInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.image",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "ImageInputNodeInput",
        -    "type": "object"
        -  },
        -  "InfrastructureRetryInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "initial_backoff_seconds": {
        -        "maximum": 86400,
        -        "minimum": 0,
        -        "title": "Initial Backoff Seconds",
        -        "type": "integer"
        -      },
        -      "max_attempts": {
        -        "maximum": 20,
        -        "minimum": 1,
        -        "title": "Max Attempts",
        -        "type": "integer"
        -      },
        -      "max_backoff_seconds": {
        -        "maximum": 86400,
        -        "minimum": 0,
        -        "title": "Max Backoff Seconds",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "max_attempts",
        -      "initial_backoff_seconds",
        -      "max_backoff_seconds"
        -    ],
        -    "title": "InfrastructureRetryInput",
        -    "type": "object"
        -  },
        -  "LocationInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "location_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Location Id"
        -      }
        -    },
        -    "title": "LocationInputConfig",
        -    "type": "object"
        -  },
        -  "LocationInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/LocationInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.location",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "LocationInputNodeInput",
        -    "type": "object"
        -  },
        -  "NotifyNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "event_type": {
        -        "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -        "title": "Event Type",
        -        "type": "string"
        -      },
        -      "webhook_id": {
        -        "format": "uuid",
        -        "title": "Webhook Id",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "webhook_id",
        -      "event_type"
        -    ],
        -    "title": "NotifyNodeConfig",
        -    "type": "object"
        -  },
        -  "NotifyNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/NotifyNodeConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "notify",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "NotifyNodeInput",
        -    "type": "object"
        -  },
        -  "OutputNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "projection": {
        -        "items": {
        -          "enum": [
        -            "artifacts",
        -            "qa",
        -            "billing",
        -            "provenance"
        -          ],
        -          "type": "string"
        -        },
        -        "minItems": 1,
        -        "title": "Projection",
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "projection"
        -    ],
        -    "title": "OutputNodeConfig",
        -    "type": "object"
        -  },
        -  "OutputNodeConfigV1_2": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "projection": {
        -        "items": {
        -          "enum": [
        -            "artifacts",
        -            "qa",
        -            "billing",
        -            "provenance"
        -          ],
        -          "type": "string"
        -        },
        -        "minItems": 1,
        -        "title": "Projection",
        -        "type": "array"
        -      }
        -    },
        -    "title": "OutputNodeConfigV1_2",
        -    "type": "object"
        -  },
        -  "OutputNodeConfigV1_3": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "destinations": {
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "tag": "#/$defs/DeliverTagDestination",
        -              "webhook": "#/$defs/DeliverWebhookDestination"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "tag_ids": {
        -                  "items": {
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 50,
        -                  "minItems": 1,
        -                  "title": "Tag Ids",
        -                  "type": "array"
        -                },
        -                "type": {
        -                  "const": "tag",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "tag_ids"
        -              ],
        -              "title": "DeliverTagDestination",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "event_type": {
        -                  "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                  "title": "Event Type",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "webhook",
        -                  "title": "Type",
        -                  "type": "string"
        -                },
        -                "webhook_id": {
        -                  "format": "uuid",
        -                  "title": "Webhook Id",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "webhook_id",
        -                "event_type"
        -              ],
        -              "title": "DeliverWebhookDestination",
        -              "type": "object"
        -            }
        -          ],
        -          "properties": {
        -            "event_type": {
        -              "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -              "title": "Event Type",
        -              "type": "string"
        -            },
        -            "tag_ids": {
        -              "items": {
        -                "type": "integer"
        -              },
        -              "maxItems": 50,
        -              "minItems": 1,
        -              "title": "Tag Ids",
        -              "type": "array"
        -            },
        -            "type": {
        -              "enum": [
        -                "tag",
        -                "webhook"
        -              ],
        -              "type": "string"
        -            },
        -            "webhook_id": {
        -              "format": "uuid",
        -              "title": "Webhook Id",
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "maxItems": 20,
        -        "title": "Destinations",
        -        "type": "array"
        -      },
        -      "projection": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "enum": [
        -                "artifacts",
        -                "qa",
        -                "billing",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Projection"
        -      }
        -    },
        -    "title": "OutputNodeConfigV1_3",
        -    "type": "object"
        -  },
        -  "OutputNodeConfigV1_4": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "destinations": {
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "tag": "#/$defs/DeliverTagDestination",
        -              "webhook": "#/$defs/DeliverWebhookDestination"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "tag_ids": {
        -                  "items": {
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 50,
        -                  "minItems": 1,
        -                  "title": "Tag Ids",
        -                  "type": "array"
        -                },
        -                "type": {
        -                  "const": "tag",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "tag_ids"
        -              ],
        -              "title": "DeliverTagDestination",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "event_type": {
        -                  "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                  "title": "Event Type",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "webhook",
        -                  "title": "Type",
        -                  "type": "string"
        -                },
        -                "webhook_id": {
        -                  "format": "uuid",
        -                  "title": "Webhook Id",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "webhook_id",
        -                "event_type"
        -              ],
        -              "title": "DeliverWebhookDestination",
        -              "type": "object"
        -            }
        -          ],
        -          "properties": {
        -            "event_type": {
        -              "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -              "title": "Event Type",
        -              "type": "string"
        -            },
        -            "tag_ids": {
        -              "items": {
        -                "type": "integer"
        -              },
        -              "maxItems": 50,
        -              "minItems": 1,
        -              "title": "Tag Ids",
        -              "type": "array"
        -            },
        -            "type": {
        -              "enum": [
        -                "tag",
        -                "webhook"
        -              ],
        -              "type": "string"
        -            },
        -            "webhook_id": {
        -              "format": "uuid",
        -              "title": "Webhook Id",
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "maxItems": 20,
        -        "title": "Destinations",
        -        "type": "array"
        -      }
        -    },
        -    "title": "OutputNodeConfigV1_4",
        -    "type": "object"
        -  },
        -  "OutputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/OutputNodeConfig"
        -          },
        -          {
        -            "$ref": "#/$defs/OutputNodeConfigV1_2"
        -          },
        -          {
        -            "$ref": "#/$defs/OutputNodeConfigV1_3"
        -          },
        -          {
        -            "$ref": "#/$defs/OutputNodeConfigV1_4"
        -          }
        -        ],
        -        "title": "Config"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "output",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "OutputNodeInput",
        -    "type": "object"
        -  },
        -  "PromptInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "text": {
        -        "anyOf": [
        -          {
        -            "maxLength": 10000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Text"
        -      }
        -    },
        -    "title": "PromptInputConfig",
        -    "type": "object"
        -  },
        -  "PromptInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/PromptInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.prompt",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "PromptInputNodeInput",
        -    "type": "object"
        -  },
        -  "QaGateNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "max_content_retries": {
        -        "maximum": 20,
        -        "minimum": 0,
        -        "title": "Max Content Retries",
        -        "type": "integer"
        -      },
        -      "policy": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Policy",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "policy",
        -      "max_content_retries"
        -    ],
        -    "title": "QaGateNodeConfig",
        -    "type": "object"
        -  },
        -  "QaGateNodeConfigV1_2": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "graph_retry": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/QaGraphRetryConfig"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "max_content_retries": {
        -        "maximum": 20,
        -        "minimum": 0,
        -        "title": "Max Content Retries",
        -        "type": "integer"
        -      },
        -      "policy": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Policy",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "policy",
        -      "max_content_retries"
        -    ],
        -    "title": "QaGateNodeConfigV1_2",
        -    "type": "object"
        -  },
        -  "QaGateNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/QaGateNodeConfig"
        -          },
        -          {
        -            "$ref": "#/$defs/QaGateNodeConfigV1_2"
        -          }
        -        ],
        -        "title": "Config"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "qa_gate",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "QaGateNodeInput",
        -    "type": "object"
        -  },
        -  "QaGraphRetryConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "max_retries": {
        -        "maximum": 20,
        -        "minimum": 1,
        -        "title": "Max Retries",
        -        "type": "integer"
        -      },
        -      "retry_from_node_id": {
        -        "format": "uuid",
        -        "title": "Retry From Node Id",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "retry_from_node_id",
        -      "max_retries"
        -    ],
        -    "title": "QaGraphRetryConfig",
        -    "type": "object"
        -  },
        -  "ReadinessInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "mode": {
        -        "enum": [
        -          "all_required",
        -          "all_terminal"
        -        ],
        -        "title": "Mode",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "mode"
        -    ],
        -    "title": "ReadinessInput",
        -    "type": "object"
        -  },
        -  "TriggerNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "settings": {
        -        "additionalProperties": true,
        -        "title": "Settings",
        -        "type": "object"
        -      },
        -      "source": {
        -        "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        -        "title": "Source",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "source",
        -      "settings"
        -    ],
        -    "title": "TriggerNodeConfig",
        -    "type": "object"
        -  },
        -  "TriggerNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/TriggerNodeConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "trigger",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "TriggerNodeInput",
        -    "type": "object"
        -  },
        -  "WorkflowEdgeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "binding": {
        -        "$ref": "#/$defs/EdgeBindingInput"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "source": {
        -        "$ref": "#/$defs/EdgeEndpointInput"
        -      },
        -      "target": {
        -        "$ref": "#/$defs/EdgeEndpointInput"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "source",
        -      "target",
        -      "binding"
        -    ],
        -    "title": "WorkflowEdgeInput",
        -    "type": "object"
        -  },
        -  "WorkflowFailurePolicy": {
        -    "enum": [
        -      "fail_fast",
        -      "continue_independent"
        -    ],
        -    "title": "WorkflowFailurePolicy",
        -    "type": "string"
        -  },
        -  "WorkflowVersionCreate": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "base_version_id": {
        -        "anyOf": [
        -          {
        -            "format": "uuid",
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Base Version Id"
        -      },
        -      "contract_version": {
        -        "default": "1.0",
        -        "enum": [
        -          "1.0",
        -          "1.1",
        -          "1.2",
        -          "1.3",
        -          "1.4",
        -          "1.5"
        -        ],
        -        "title": "Contract Version",
        -        "type": "string"
        -      },
        -      "edges": {
        -        "items": {
        -          "$ref": "#/$defs/WorkflowEdgeInput"
        -        },
        -        "minItems": 1,
        -        "title": "Edges",
        -        "type": "array"
        -      },
        -      "failure_policy": {
        -        "$ref": "#/$defs/WorkflowFailurePolicy"
        -      },
        -      "nodes": {
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "branch": "#/$defs/BranchNodeInput",
        -              "generate": "#/$defs/GenerateNodeInput",
        -              "input.ai_model": "#/$defs/AiModelInputNodeInput",
        -              "input.art_direction": "#/$defs/ArtDirectionInputNodeInput",
        -              "input.avatar": "#/$defs/AvatarInputNodeInput",
        -              "input.clothing": "#/$defs/ClothingInputNodeInput",
        -              "input.image": "#/$defs/ImageInputNodeInput",
        -              "input.location": "#/$defs/LocationInputNodeInput",
        -              "input.prompt": "#/$defs/PromptInputNodeInput",
        -              "notify": "#/$defs/NotifyNodeInput",
        -              "output": "#/$defs/OutputNodeInput",
        -              "qa_gate": "#/$defs/QaGateNodeInput",
        -              "trigger": "#/$defs/TriggerNodeInput"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "settings": {
        -                      "additionalProperties": true,
        -                      "title": "Settings",
        -                      "type": "object"
        -                    },
        -                    "source": {
        -                      "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        -                      "title": "Source",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "source",
        -                    "settings"
        -                  ],
        -                  "title": "TriggerNodeConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "trigger",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "TriggerNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "model_slug": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Model Slug",
        -                          "type": "string"
        -                        },
        -                        "parameters": {
        -                          "additionalProperties": true,
        -                          "title": "Parameters",
        -                          "type": "object"
        -                        },
        -                        "variant": {
        -                          "enum": [
        -                            "generate",
        -                            "edit",
        -                            "text_to_image"
        -                          ],
        -                          "title": "Variant",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "variant",
        -                        "model_slug",
        -                        "parameters"
        -                      ],
        -                      "title": "GenerateNodeConfig",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "model_slug": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Model Slug",
        -                          "type": "string"
        -                        },
        -                        "parameters": {
        -                          "additionalProperties": true,
        -                          "title": "Parameters",
        -                          "type": "object"
        -                        },
        -                        "variant": {
        -                          "enum": [
        -                            "generate",
        -                            "edit",
        -                            "text_to_image",
        -                            "video"
        -                          ],
        -                          "title": "Variant",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "variant",
        -                        "model_slug",
        -                        "parameters"
        -                      ],
        -                      "title": "GenerateNodeConfigV1_2",
        -                      "type": "object"
        -                    }
        -                  ],
        -                  "title": "Config"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "generate",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "GenerateNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "max_content_retries": {
        -                          "maximum": 20,
        -                          "minimum": 0,
        -                          "title": "Max Content Retries",
        -                          "type": "integer"
        -                        },
        -                        "policy": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Policy",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "policy",
        -                        "max_content_retries"
        -                      ],
        -                      "title": "QaGateNodeConfig",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "graph_retry": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "max_retries": {
        -                                  "maximum": 20,
        -                                  "minimum": 1,
        -                                  "title": "Max Retries",
        -                                  "type": "integer"
        -                                },
        -                                "retry_from_node_id": {
        -                                  "format": "uuid",
        -                                  "title": "Retry From Node Id",
        -                                  "type": "string"
        -                                }
        -                              },
        -                              "required": [
        -                                "retry_from_node_id",
        -                                "max_retries"
        -                              ],
        -                              "title": "QaGraphRetryConfig",
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "default": null
        -                        },
        -                        "max_content_retries": {
        -                          "maximum": 20,
        -                          "minimum": 0,
        -                          "title": "Max Content Retries",
        -                          "type": "integer"
        -                        },
        -                        "policy": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Policy",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "policy",
        -                        "max_content_retries"
        -                      ],
        -                      "title": "QaGateNodeConfigV1_2",
        -                      "type": "object"
        -                    }
        -                  ],
        -                  "title": "Config"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "qa_gate",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "QaGateNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "cases": {
        -                      "additionalProperties": {
        -                        "enum": [
        -                          "accepted",
        -                          "rejected",
        -                          "error"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "minProperties": 1,
        -                      "propertyNames": {
        -                        "enum": [
        -                          "accepted",
        -                          "rejected",
        -                          "error"
        -                        ]
        -                      },
        -                      "title": "Cases",
        -                      "type": "object"
        -                    },
        -                    "condition_type": {
        -                      "const": "qa_decision",
        -                      "title": "Condition Type",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "condition_type",
        -                    "cases"
        -                  ],
        -                  "title": "BranchNodeConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "branch",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "BranchNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "projection": {
        -                          "items": {
        -                            "enum": [
        -                              "artifacts",
        -                              "qa",
        -                              "billing",
        -                              "provenance"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          "minItems": 1,
        -                          "title": "Projection",
        -                          "type": "array"
        -                        }
        -                      },
        -                      "required": [
        -                        "projection"
        -                      ],
        -                      "title": "OutputNodeConfig",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "projection": {
        -                          "items": {
        -                            "enum": [
        -                              "artifacts",
        -                              "qa",
        -                              "billing",
        -                              "provenance"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          "minItems": 1,
        -                          "title": "Projection",
        -                          "type": "array"
        -                        }
        -                      },
        -                      "title": "OutputNodeConfigV1_2",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "destinations": {
        -                          "items": {
        -                            "discriminator": {
        -                              "mapping": {
        -                                "tag": "#/$defs/DeliverTagDestination",
        -                                "webhook": "#/$defs/DeliverWebhookDestination"
        -                              },
        -                              "propertyName": "type"
        -                            },
        -                            "oneOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "tag_ids": {
        -                                    "items": {
        -                                      "type": "integer"
        -                                    },
        -                                    "maxItems": 50,
        -                                    "minItems": 1,
        -                                    "title": "Tag Ids",
        -                                    "type": "array"
        -                                  },
        -                                  "type": {
        -                                    "const": "tag",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "tag_ids"
        -                                ],
        -                                "title": "DeliverTagDestination",
        -                                "type": "object"
        -                              },
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "event_type": {
        -                                    "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                    "title": "Event Type",
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "webhook",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  },
        -                                  "webhook_id": {
        -                                    "format": "uuid",
        -                                    "title": "Webhook Id",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "webhook_id",
        -                                  "event_type"
        -                                ],
        -                                "title": "DeliverWebhookDestination",
        -                                "type": "object"
        -                              }
        -                            ],
        -                            "properties": {
        -                              "event_type": {
        -                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                "title": "Event Type",
        -                                "type": "string"
        -                              },
        -                              "tag_ids": {
        -                                "items": {
        -                                  "type": "integer"
        -                                },
        -                                "maxItems": 50,
        -                                "minItems": 1,
        -                                "title": "Tag Ids",
        -                                "type": "array"
        -                              },
        -                              "type": {
        -                                "enum": [
        -                                  "tag",
        -                                  "webhook"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              "webhook_id": {
        -                                "format": "uuid",
        -                                "title": "Webhook Id",
        -                                "type": "string"
        -                              }
        -                            },
        -                            "type": "object"
        -                          },
        -                          "maxItems": 20,
        -                          "title": "Destinations",
        -                          "type": "array"
        -                        },
        -                        "projection": {
        -                          "anyOf": [
        -                            {
        -                              "items": {
        -                                "enum": [
        -                                  "artifacts",
        -                                  "qa",
        -                                  "billing",
        -                                  "provenance"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              "type": "array"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "default": null,
        -                          "title": "Projection"
        -                        }
        -                      },
        -                      "title": "OutputNodeConfigV1_3",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "destinations": {
        -                          "items": {
        -                            "discriminator": {
        -                              "mapping": {
        -                                "tag": "#/$defs/DeliverTagDestination",
        -                                "webhook": "#/$defs/DeliverWebhookDestination"
        -                              },
        -                              "propertyName": "type"
        -                            },
        -                            "oneOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "tag_ids": {
        -                                    "items": {
        -                                      "type": "integer"
        -                                    },
        -                                    "maxItems": 50,
        -                                    "minItems": 1,
        -                                    "title": "Tag Ids",
        -                                    "type": "array"
        -                                  },
        -                                  "type": {
        -                                    "const": "tag",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "tag_ids"
        -                                ],
        -                                "title": "DeliverTagDestination",
        -                                "type": "object"
        -                              },
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "event_type": {
        -                                    "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                    "title": "Event Type",
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "webhook",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  },
        -                                  "webhook_id": {
        -                                    "format": "uuid",
        -                                    "title": "Webhook Id",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "webhook_id",
        -                                  "event_type"
        -                                ],
        -                                "title": "DeliverWebhookDestination",
        -                                "type": "object"
        -                              }
        -                            ],
        -                            "properties": {
        -                              "event_type": {
        -                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                "title": "Event Type",
        -                                "type": "string"
        -                              },
        -                              "tag_ids": {
        -                                "items": {
        -                                  "type": "integer"
        -                                },
        -                                "maxItems": 50,
        -                                "minItems": 1,
        -                                "title": "Tag Ids",
        -                                "type": "array"
        -                              },
        -                              "type": {
        -                                "enum": [
        -                                  "tag",
        -                                  "webhook"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              "webhook_id": {
        -                                "format": "uuid",
        -                                "title": "Webhook Id",
        -                                "type": "string"
        -                              }
        -                            },
        -                            "type": "object"
        -                          },
        -                          "maxItems": 20,
        -                          "title": "Destinations",
        -                          "type": "array"
        -                        }
        -                      },
        -                      "title": "OutputNodeConfigV1_4",
        -                      "type": "object"
        -                    }
        -                  ],
        -                  "title": "Config"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "output",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "OutputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "event_type": {
        -                      "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                      "title": "Event Type",
        -                      "type": "string"
        -                    },
        -                    "webhook_id": {
        -                      "format": "uuid",
        -                      "title": "Webhook Id",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "webhook_id",
        -                    "event_type"
        -                  ],
        -                  "title": "NotifyNodeConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "notify",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "NotifyNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "avatar_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Avatar Id"
        -                    }
        -                  },
        -                  "title": "AvatarInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.avatar",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "AvatarInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "clothing_item_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Clothing Item Id"
        -                    }
        -                  },
        -                  "title": "ClothingInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.clothing",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "ClothingInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "location_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Location Id"
        -                    }
        -                  },
        -                  "title": "LocationInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.location",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "LocationInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "art_direction_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Art Direction Id"
        -                    },
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    }
        -                  },
        -                  "title": "ArtDirectionInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.art_direction",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "ArtDirectionInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "text": {
        -                      "anyOf": [
        -                        {
        -                          "maxLength": 10000,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Text"
        -                    }
        -                  },
        -                  "title": "PromptInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.prompt",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "PromptInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "generation_result_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Generation Result Id"
        -                    }
        -                  },
        -                  "title": "ImageInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.image",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "ImageInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "model_slug": {
        -                      "anyOf": [
        -                        {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Model Slug"
        -                    }
        -                  },
        -                  "title": "AiModelInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.ai_model",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "AiModelInputNodeInput",
        -              "type": "object"
        -            }
        -          ],
        -          "properties": {
        -            "config": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "settings": {
        -                  "additionalProperties": true,
        -                  "title": "Settings",
        -                  "type": "object"
        -                },
        -                "source": {
        -                  "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        -                  "title": "Source",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "source",
        -                "settings"
        -              ],
        -              "title": "TriggerNodeConfig",
        -              "type": "object"
        -            },
        -            "id": {
        -              "format": "uuid",
        -              "title": "Id",
        -              "type": "string"
        -            },
        -            "infrastructure_retry": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "initial_backoff_seconds": {
        -                  "maximum": 86400,
        -                  "minimum": 0,
        -                  "title": "Initial Backoff Seconds",
        -                  "type": "integer"
        -                },
        -                "max_attempts": {
        -                  "maximum": 20,
        -                  "minimum": 1,
        -                  "title": "Max Attempts",
        -                  "type": "integer"
        -                },
        -                "max_backoff_seconds": {
        -                  "maximum": 86400,
        -                  "minimum": 0,
        -                  "title": "Max Backoff Seconds",
        -                  "type": "integer"
        -                }
        -              },
        -              "required": [
        -                "max_attempts",
        -                "initial_backoff_seconds",
        -                "max_backoff_seconds"
        -              ],
        -              "title": "InfrastructureRetryInput",
        -              "type": "object"
        -            },
        -            "readiness": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "mode": {
        -                  "enum": [
        -                    "all_required",
        -                    "all_terminal"
        -                  ],
        -                  "title": "Mode",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "mode"
        -              ],
        -              "title": "ReadinessInput",
        -              "type": "object"
        -            },
        -            "type": {
        -              "enum": [
        -                "trigger",
        -                "generate",
        -                "qa_gate",
        -                "branch",
        -                "output",
        -                "notify",
        -                "input.avatar",
        -                "input.clothing",
        -                "input.location",
        -                "input.art_direction",
        -                "input.prompt",
        -                "input.image",
        -                "input.ai_model"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "minItems": 2,
        -        "title": "Nodes",
        -        "type": "array"
        -      },
        -      "result_projection": {
        -        "items": {
        -          "enum": [
        -            "artifacts",
        -            "qa",
        -            "billing",
        -            "provenance"
        -          ],
        -          "type": "string"
        -        },
        -        "minItems": 1,
        -        "title": "Result Projection",
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "failure_policy",
        -      "nodes",
        -      "edges"
        -    ],
        -    "title": "WorkflowVersionCreate",
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / definition / $ref
        Removed value: -"#/$defs/WorkflowVersionCreate"
      • addedInput schema / properties / definition / additionalProperties
        Added value: +false
      • addedInput schema / properties / definition / properties
        Added value: +{
        +  "base_version_id": {
        +    "anyOf": [
        +      {
        +        "format": "uuid",
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ],
        +    "default": null
        +  },
        +  "contract_version": {
        +    "default": "1.0",
        +    "enum": [
        +      "1.0",
        +      "1.1",
        +      "1.2",
        +      "1.3",
        +      "1.4",
        +      "1.5"
        +    ],
        +    "type": "string"
        +  },
        +  "edges": {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "binding": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "mode": {
        +              "enum": [
        +                "single",
        +                "collect"
        +              ],
        +              "type": "string"
        +            },
        +            "required": {
        +              "type": "boolean"
        +            },
        +            "role": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "background",
        +                    "style"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "mode",
        +            "required"
        +          ],
        +          "type": "object"
        +        },
        +        "id": {
        +          "format": "uuid",
        +          "type": "string"
        +        },
        +        "source": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "node_id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "port": {
        +              "maxLength": 100,
        +              "minLength": 1,
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "node_id",
        +            "port"
        +          ],
        +          "type": "object"
        +        },
        +        "target": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "node_id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "port": {
        +              "maxLength": 100,
        +              "minLength": 1,
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "node_id",
        +            "port"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "source",
        +        "target",
        +        "binding"
        +      ],
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "failure_policy": {
        +    "enum": [
        +      "fail_fast",
        +      "continue_independent"
        +    ],
        +    "type": "string"
        +  },
        +  "nodes": {
        +    "items": {
        +      "discriminator": {
        +        "propertyName": "type"
        +      },
        +      "oneOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "settings": {
        +                  "additionalProperties": true,
        +                  "type": "object"
        +                },
        +                "source": {
        +                  "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "source",
        +                "settings"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "trigger",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "model_slug": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "parameters": {
        +                      "additionalProperties": true,
        +                      "type": "object"
        +                    },
        +                    "variant": {
        +                      "enum": [
        +                        "generate",
        +                        "edit",
        +                        "text_to_image"
        +                      ],
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "variant",
        +                    "model_slug",
        +                    "parameters"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "model_slug": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "parameters": {
        +                      "additionalProperties": true,
        +                      "type": "object"
        +                    },
        +                    "variant": {
        +                      "enum": [
        +                        "generate",
        +                        "edit",
        +                        "text_to_image",
        +                        "video"
        +                      ],
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "variant",
        +                    "model_slug",
        +                    "parameters"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "generate",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "max_content_retries": {
        +                      "maximum": 20,
        +                      "minimum": 0,
        +                      "type": "integer"
        +                    },
        +                    "policy": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "policy",
        +                    "max_content_retries"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "graph_retry": {
        +                      "anyOf": [
        +                        {
        +                          "additionalProperties": false,
        +                          "properties": {
        +                            "max_retries": {
        +                              "maximum": 20,
        +                              "minimum": 1,
        +                              "type": "integer"
        +                            },
        +                            "retry_from_node_id": {
        +                              "format": "uuid",
        +                              "type": "string"
        +                            }
        +                          },
        +                          "required": [
        +                            "retry_from_node_id",
        +                            "max_retries"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "max_content_retries": {
        +                      "maximum": 20,
        +                      "minimum": 0,
        +                      "type": "integer"
        +                    },
        +                    "policy": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "policy",
        +                    "max_content_retries"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "qa_gate",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "cases": {
        +                  "additionalProperties": {
        +                    "enum": [
        +                      "accepted",
        +                      "rejected",
        +                      "error"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "minProperties": 1,
        +                  "propertyNames": {
        +                    "enum": [
        +                      "accepted",
        +                      "rejected",
        +                      "error"
        +                    ]
        +                  },
        +                  "type": "object"
        +                },
        +                "condition_type": {
        +                  "const": "qa_decision",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "condition_type",
        +                "cases"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "branch",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "projection": {
        +                      "items": {
        +                        "enum": [
        +                          "artifacts",
        +                          "qa",
        +                          "billing",
        +                          "provenance"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "minItems": 1,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "required": [
        +                    "projection"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "projection": {
        +                      "items": {
        +                        "enum": [
        +                          "artifacts",
        +                          "qa",
        +                          "billing",
        +                          "provenance"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "minItems": 1,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "destinations": {
        +                      "items": {
        +                        "discriminator": {
        +                          "propertyName": "type"
        +                        },
        +                        "oneOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "tag_ids": {
        +                                "items": {
        +                                  "type": "integer"
        +                                },
        +                                "maxItems": 50,
        +                                "minItems": 1,
        +                                "type": "array"
        +                              },
        +                              "type": {
        +                                "const": "tag",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "tag_ids"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "event_type": {
        +                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                                "type": "string"
        +                              },
        +                              "type": {
        +                                "const": "webhook",
        +                                "type": "string"
        +                              },
        +                              "webhook_id": {
        +                                "format": "uuid",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "webhook_id",
        +                              "event_type"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ],
        +                        "properties": {
        +                          "event_type": {
        +                            "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                            "type": "string"
        +                          },
        +                          "tag_ids": {
        +                            "items": {
        +                              "type": "integer"
        +                            },
        +                            "maxItems": 50,
        +                            "minItems": 1,
        +                            "type": "array"
        +                          },
        +                          "type": {
        +                            "enum": [
        +                              "tag",
        +                              "webhook"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "webhook_id": {
        +                            "format": "uuid",
        +                            "type": "string"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "maxItems": 20,
        +                      "type": "array"
        +                    },
        +                    "projection": {
        +                      "anyOf": [
        +                        {
        +                          "items": {
        +                            "enum": [
        +                              "artifacts",
        +                              "qa",
        +                              "billing",
        +                              "provenance"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "destinations": {
        +                      "items": {
        +                        "discriminator": {
        +                          "propertyName": "type"
        +                        },
        +                        "oneOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "tag_ids": {
        +                                "items": {
        +                                  "type": "integer"
        +                                },
        +                                "maxItems": 50,
        +                                "minItems": 1,
        +                                "type": "array"
        +                              },
        +                              "type": {
        +                                "const": "tag",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "tag_ids"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "event_type": {
        +                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                                "type": "string"
        +                              },
        +                              "type": {
        +                                "const": "webhook",
        +                                "type": "string"
        +                              },
        +                              "webhook_id": {
        +                                "format": "uuid",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "webhook_id",
        +                              "event_type"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ],
        +                        "properties": {
        +                          "event_type": {
        +                            "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                            "type": "string"
        +                          },
        +                          "tag_ids": {
        +                            "items": {
        +                              "type": "integer"
        +                            },
        +                            "maxItems": 50,
        +                            "minItems": 1,
        +                            "type": "array"
        +                          },
        +                          "type": {
        +                            "enum": [
        +                              "tag",
        +                              "webhook"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "webhook_id": {
        +                            "format": "uuid",
        +                            "type": "string"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "maxItems": 20,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "output",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "event_type": {
        +                  "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                  "type": "string"
        +                },
        +                "webhook_id": {
        +                  "format": "uuid",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "webhook_id",
        +                "event_type"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "notify",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "avatar_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.avatar",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "clothing_item_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.clothing",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "location_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.location",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "art_direction_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.art_direction",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "text": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 10000,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.prompt",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "generation_result_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.image",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "model_slug": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.ai_model",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        }
        +      ],
        +      "properties": {
        +        "config": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "settings": {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            "source": {
        +              "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "source",
        +            "settings"
        +          ],
        +          "type": "object"
        +        },
        +        "id": {
        +          "format": "uuid",
        +          "type": "string"
        +        },
        +        "infrastructure_retry": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "initial_backoff_seconds": {
        +              "maximum": 86400,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "max_attempts": {
        +              "maximum": 20,
        +              "minimum": 1,
        +              "type": "integer"
        +            },
        +            "max_backoff_seconds": {
        +              "maximum": 86400,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "max_attempts",
        +            "initial_backoff_seconds",
        +            "max_backoff_seconds"
        +          ],
        +          "type": "object"
        +        },
        +        "readiness": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "mode": {
        +              "enum": [
        +                "all_required",
        +                "all_terminal"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mode"
        +          ],
        +          "type": "object"
        +        },
        +        "type": {
        +          "enum": [
        +            "trigger",
        +            "generate",
        +            "qa_gate",
        +            "branch",
        +            "output",
        +            "notify",
        +            "input.avatar",
        +            "input.clothing",
        +            "input.location",
        +            "input.art_direction",
        +            "input.prompt",
        +            "input.image",
        +            "input.ai_model"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  "result_projection": {
        +    "items": {
        +      "enum": [
        +        "artifacts",
        +        "qa",
        +        "billing",
        +        "provenance"
        +      ],
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / definition / required
        Added value: +[
        +  "failure_policy",
        +  "nodes",
        +  "edges"
        +]
      • addedInput schema / properties / definition / type
        Added value: +"object"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"CreateWorkflowVersionInput"
    • Changedfinish_local_garment_upload1 field changed
      • removedInput schema / $defs
        Removed value: -{
        -  "GarmentLocalUploadAssetInput": {
        -    "additionalProperties": false,
        -    "description": "One classified garment asset previously prepared and uploaded directly.",
        -    "properties": {
        -      "asset_kind": {
        -        "default": null,
        -        "description": "Asset kind: full garment view or detail crop.",
        -        "enum": [
        -          "full",
        -          "detail"
        -        ],
        -        "type": "string"
        -      },
        -      "asset_role": {
        -        "default": null,
        -        "deprecated": true,
        -        "description": "Deprecated role-only adapter. Prefer asset_kind and asset_view.",
        -        "enum": [
        -          "front",
        -          "back",
        -          "side",
        -          "detail"
        -        ],
        -        "type": "string"
        -      },
        -      "asset_view": {
        -        "default": null,
        -        "description": "Visible garment view. New detail uploads require front, back, or side.",
        -        "enum": [
        -          "front",
        -          "back",
        -          "side",
        -          "unspecified"
        -        ],
        -        "type": "string"
        -      },
        -      "upload_handle": {
        -        "description": "Owned upload handle returned by prepare_local_garment_upload",
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "upload_handle"
        -    ],
        -    "type": "object"
        -  },
        -  "GarmentLocalUploadItem": {
        -    "additionalProperties": false,
        -    "description": "One garment assembled from directly uploaded local assets.",
        -    "properties": {
        -      "assets": {
        -        "description": "Uploaded garment assets. Exactly one full front is required; full front/back/side views are unique and detail views can repeat.",
        -        "items": {
        -          "additionalProperties": false,
        -          "description": "One classified garment asset previously prepared and uploaded directly.",
        -          "properties": {
        -            "asset_kind": {
        -              "default": null,
        -              "description": "Asset kind: full garment view or detail crop.",
        -              "enum": [
        -                "full",
        -                "detail"
        -              ],
        -              "type": "string"
        -            },
        -            "asset_role": {
        -              "default": null,
        -              "deprecated": true,
        -              "description": "Deprecated role-only adapter. Prefer asset_kind and asset_view.",
        -              "enum": [
        -                "front",
        -                "back",
        -                "side",
        -                "detail"
        -              ],
        -              "type": "string"
        -            },
        -            "asset_view": {
        -              "default": null,
        -              "description": "Visible garment view. New detail uploads require front, back, or side.",
        -              "enum": [
        -                "front",
        -                "back",
        -                "side",
        -                "unspecified"
        -              ],
        -              "type": "string"
        -            },
        -            "upload_handle": {
        -              "description": "Owned upload handle returned by prepare_local_garment_upload",
        -              "minLength": 1,
        -              "type": "string"
        -            }
        -          },
        -          "required": [
        -            "upload_handle"
        -          ],
        -          "type": "object"
        -        },
        -        "minItems": 1,
        -        "type": "array"
        -      },
        -      "description": {
        -        "default": null,
        -        "description": "Optional item-level garment description hint",
        -        "type": "string"
        -      },
        -      "gender": {
        -        "default": null,
        -        "description": "Target gender: male, female, unisex",
        -        "type": "string"
        -      },
        -      "name": {
        -        "default": null,
        -        "description": "Name for the garment. If omitted, derived from the front image filename.",
        -        "type": "string"
        -      },
        -      "processing_mode": {
        -        "default": null,
        -        "description": "Optional image processing. 'background_removal' removes the background (the platform upload default); 'none' stores the image as-is. Omit to use background removal.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "assets"
        -    ],
        -    "type": "object"
        -  }
        -}
    • Changedget_production_workflow33 fields changed
      • removedInput schema / properties / versions_items_per_page / title
        Removed value: -"Versions Items Per Page"
      • removedInput schema / properties / versions_page / title
        Removed value: -"Versions Page"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"GetWorkflowInput"
      • removedOutput schema / $defs / WorkflowVersionState / title
        Removed value: -"WorkflowVersionState"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / base_version_id / title
        Removed value: -"Base Version Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / number / title
        Removed value: -"Number"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / published_at / title
        Removed value: -"Published At"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / published_by_profile_id / title
        Removed value: -"Published By Profile Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / title
        Removed value: -"WorkflowVersionSummaryRead"
      • removedOutput schema / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / properties / run_time_slot_kinds / title
        Removed value: -"Run Time Slot Kinds"
      • removedOutput schema / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / properties / versions / title
        Removed value: -"Versions"
      • removedOutput schema / properties / versions_items_per_page / title
        Removed value: -"Versions Items Per Page"
      • removedOutput schema / properties / versions_page / title
        Removed value: -"Versions Page"
      • removedOutput schema / properties / versions_total_count / title
        Removed value: -"Versions Total Count"
      • removedOutput schema / title
        Removed value: -"WorkflowDetailRead"
    • Changedget_production_workflow_control9 fields changed
      • removedInput schema / title
        Removed value: -"_ToolInput"
      • removedOutput schema / properties / changed_at / title
        Removed value: -"Changed At"
      • removedOutput schema / properties / changed_by_profile_id / title
        Removed value: -"Changed By Profile Id"
      • removedOutput schema / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / properties / reason / title
        Removed value: -"Reason"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / stopped / title
        Removed value: -"Stopped"
      • removedOutput schema / title
        Removed value: -"WorkflowControlRead"
    • Changedget_production_workflow_run130 fields changed
      • removedInput schema / properties / workflow_run_id / title
        Removed value: -"Workflow Run Id"
      • removedInput schema / title
        Removed value: -"WorkflowRunIdentityInput"
      • removedOutput schema / $defs / WorkflowArtifactRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowArtifactRead / properties / media_type / title
        Removed value: -"Media Type"
      • removedOutput schema / $defs / WorkflowArtifactRead / properties / role / title
        Removed value: -"Role"
      • removedOutput schema / $defs / WorkflowArtifactRead / properties / thumbnail_url / title
        Removed value: -"Thumbnail Url"
      • removedOutput schema / $defs / WorkflowArtifactRead / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / WorkflowArtifactRead / title
        Removed value: -"WorkflowArtifactRead"
      • removedOutput schema / $defs / WorkflowBillingMovementRead / properties / external_charge_id / title
        Removed value: -"External Charge Id"
      • removedOutput schema / $defs / WorkflowBillingMovementRead / properties / kind / title
        Removed value: -"Kind"
      • removedOutput schema / $defs / WorkflowBillingMovementRead / properties / units / title
        Removed value: -"Units"
      • removedOutput schema / $defs / WorkflowBillingMovementRead / title
        Removed value: -"WorkflowBillingMovementRead"
      • removedOutput schema / $defs / WorkflowBillingRead / properties / debited_units / title
        Removed value: -"Debited Units"
      • removedOutput schema / $defs / WorkflowBillingRead / properties / estimated_units / title
        Removed value: -"Estimated Units"
      • removedOutput schema / $defs / WorkflowBillingRead / properties / movements / title
        Removed value: -"Movements"
      • removedOutput schema / $defs / WorkflowBillingRead / properties / net_units / title
        Removed value: -"Net Units"
      • removedOutput schema / $defs / WorkflowBillingRead / properties / refunded_units / title
        Removed value: -"Refunded Units"
      • removedOutput schema / $defs / WorkflowBillingRead / title
        Removed value: -"WorkflowBillingRead"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / artifacts / title
        Removed value: -"Artifacts"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / billed_units / title
        Removed value: -"Billed Units"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / error / title
        Removed value: -"Error"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / number / title
        Removed value: -"Number"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / primitive_bindings / title
        Removed value: -"Primitive Bindings"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / refunded_units / title
        Removed value: -"Refunded Units"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / properties / status / title
        Removed value: -"Status"
      • removedOutput schema / $defs / WorkflowContentAttemptRead / title
        Removed value: -"WorkflowContentAttemptRead"
      • removedOutput schema / $defs / WorkflowInfrastructureAttemptRead / properties / error / title
        Removed value: -"Error"
      • removedOutput schema / $defs / WorkflowInfrastructureAttemptRead / properties / finished_at / title
        Removed value: -"Finished At"
      • removedOutput schema / $defs / WorkflowInfrastructureAttemptRead / properties / number / title
        Removed value: -"Number"
      • removedOutput schema / $defs / WorkflowInfrastructureAttemptRead / properties / started_at / title
        Removed value: -"Started At"
      • removedOutput schema / $defs / WorkflowInfrastructureAttemptRead / properties / status / title
        Removed value: -"Status"
      • removedOutput schema / $defs / WorkflowInfrastructureAttemptRead / title
        Removed value: -"WorkflowInfrastructureAttemptRead"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / edge_id / title
        Removed value: -"Edge Id"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / reason / title
        Removed value: -"Reason"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / required / title
        Removed value: -"Required"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / source_node_id / title
        Removed value: -"Source Node Id"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / source_port / title
        Removed value: -"Source Port"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / state / title
        Removed value: -"State"
      • removedOutput schema / $defs / WorkflowMissingInputRead / properties / target_port / title
        Removed value: -"Target Port"
      • removedOutput schema / $defs / WorkflowMissingInputRead / title
        Removed value: -"WorkflowMissingInputRead"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / artifacts / title
        Removed value: -"Artifacts"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / content_attempts / title
        Removed value: -"Content Attempts"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / error / title
        Removed value: -"Error"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / execution_iteration / title
        Removed value: -"Execution Iteration"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / finished_at / title
        Removed value: -"Finished At"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / infrastructure_attempts / title
        Removed value: -"Infrastructure Attempts"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / inputs / title
        Removed value: -"Inputs"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / missing_inputs / title
        Removed value: -"Missing Inputs"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / node_id / title
        Removed value: -"Node Id"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / outputs / title
        Removed value: -"Outputs"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / primitive_bindings / title
        Removed value: -"Primitive Bindings"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / skip_reason / title
        Removed value: -"Skip Reason"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / started_at / title
        Removed value: -"Started At"
      • removedOutput schema / $defs / WorkflowNodeRunRead / properties / status / title
        Removed value: -"Status"
      • removedOutput schema / $defs / WorkflowNodeRunRead / title
        Removed value: -"WorkflowNodeRunRead"
      • removedOutput schema / $defs / WorkflowNodeType / title
        Removed value: -"WorkflowNodeType"
      • removedOutput schema / $defs / WorkflowPortValueRead / properties / declared_type / title
        Removed value: -"Declared Type"
      • removedOutput schema / $defs / WorkflowPortValueRead / properties / port / title
        Removed value: -"Port"
      • removedOutput schema / $defs / WorkflowPortValueRead / properties / value / title
        Removed value: -"Value"
      • removedOutput schema / $defs / WorkflowPortValueRead / title
        Removed value: -"WorkflowPortValueRead"
      • removedOutput schema / $defs / WorkflowPrimitiveBindingRead / properties / primitive_id / title
        Removed value: -"Primitive Id"
      • removedOutput schema / $defs / WorkflowPrimitiveBindingRead / properties / primitive_type / title
        Removed value: -"Primitive Type"
      • removedOutput schema / $defs / WorkflowPrimitiveBindingRead / properties / role / title
        Removed value: -"Role"
      • removedOutput schema / $defs / WorkflowPrimitiveBindingRead / title
        Removed value: -"WorkflowPrimitiveBindingRead"
      • removedOutput schema / $defs / WorkflowResultArtifactRead / properties / kind / title
        Removed value: -"Kind"
      • removedOutput schema / $defs / WorkflowResultArtifactRead / properties / media_type / title
        Removed value: -"Media Type"
      • removedOutput schema / $defs / WorkflowResultArtifactRead / properties / thumbnail_url / title
        Removed value: -"Thumbnail Url"
      • removedOutput schema / $defs / WorkflowResultArtifactRead / properties / url / title
        Removed value: -"Url"
      • removedOutput schema / $defs / WorkflowResultArtifactRead / title
        Removed value: -"WorkflowResultArtifactRead"
      • removedOutput schema / $defs / WorkflowResultBillingRead / properties / debited_units / title
        Removed value: -"Debited Units"
      • removedOutput schema / $defs / WorkflowResultBillingRead / properties / estimated_units / title
        Removed value: -"Estimated Units"
      • removedOutput schema / $defs / WorkflowResultBillingRead / properties / net_units / title
        Removed value: -"Net Units"
      • removedOutput schema / $defs / WorkflowResultBillingRead / properties / refunded_units / title
        Removed value: -"Refunded Units"
      • removedOutput schema / $defs / WorkflowResultBillingRead / title
        Removed value: -"WorkflowResultBillingRead"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / asset_sha256 / title
        Removed value: -"Asset Sha256"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / compliance_version / title
        Removed value: -"Compliance Version"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / provenance_id / title
        Removed value: -"Provenance Id"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / provider / title
        Removed value: -"Provider"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / status / title
        Removed value: -"Status"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / uwear_c2pa_applied / title
        Removed value: -"Uwear C2Pa Applied"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / uwear_watermark_applied / title
        Removed value: -"Uwear Watermark Applied"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / watermark_method / title
        Removed value: -"Watermark Method"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / watermark_strength / title
        Removed value: -"Watermark Strength"
      • removedOutput schema / $defs / WorkflowResultOriginRead / properties / watermark_version / title
        Removed value: -"Watermark Version"
      • removedOutput schema / $defs / WorkflowResultOriginRead / title
        Removed value: -"WorkflowResultOriginRead"
      • removedOutput schema / $defs / WorkflowResultProvenanceRead / properties / generation_id / title
        Removed value: -"Generation Id"
      • removedOutput schema / $defs / WorkflowResultProvenanceRead / properties / generation_result_id / title
        Removed value: -"Generation Result Id"
      • removedOutput schema / $defs / WorkflowResultProvenanceRead / title
        Removed value: -"WorkflowResultProvenanceRead"
      • removedOutput schema / $defs / WorkflowResultQaRead / properties / decision / title
        Removed value: -"Decision"
      • removedOutput schema / $defs / WorkflowResultQaRead / properties / error / title
        Removed value: -"Error"
      • removedOutput schema / $defs / WorkflowResultQaRead / properties / status / title
        Removed value: -"Status"
      • removedOutput schema / $defs / WorkflowResultQaRead / title
        Removed value: -"WorkflowResultQaRead"
      • removedOutput schema / $defs / WorkflowResultRead / properties / generation_result_id / title
        Removed value: -"Generation Result Id"
      • removedOutput schema / $defs / WorkflowResultRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowResultRead / title
        Removed value: -"WorkflowResultRead"
      • removedOutput schema / $defs / WorkflowRunStatus / title
        Removed value: -"WorkflowRunStatus"
      • removedOutput schema / $defs / WorkflowTriggerActorRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowTriggerActorRead / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / WorkflowTriggerActorRead / title
        Removed value: -"WorkflowTriggerActorRead"
      • removedOutput schema / $defs / WorkflowTriggerEventRead / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / $defs / WorkflowTriggerEventRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowTriggerEventRead / properties / payload / title
        Removed value: -"Payload"
      • removedOutput schema / $defs / WorkflowTriggerEventRead / properties / received_at / title
        Removed value: -"Received At"
      • removedOutput schema / $defs / WorkflowTriggerEventRead / title
        Removed value: -"WorkflowTriggerEventRead"
      • removedOutput schema / $defs / WorkflowTriggerIdentityRead / properties / external_event_id / title
        Removed value: -"External Event Id"
      • removedOutput schema / $defs / WorkflowTriggerIdentityRead / properties / original_trigger_event_id / title
        Removed value: -"Original Trigger Event Id"
      • removedOutput schema / $defs / WorkflowTriggerIdentityRead / properties / payload_hash / title
        Removed value: -"Payload Hash"
      • removedOutput schema / $defs / WorkflowTriggerIdentityRead / properties / replay_id / title
        Removed value: -"Replay Id"
      • removedOutput schema / $defs / WorkflowTriggerIdentityRead / properties / source / title
        Removed value: -"Source"
      • removedOutput schema / $defs / WorkflowTriggerIdentityRead / title
        Removed value: -"WorkflowTriggerIdentityRead"
      • removedOutput schema / $defs / WorkflowTriggerObjectRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowTriggerObjectRead / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / WorkflowTriggerObjectRead / title
        Removed value: -"WorkflowTriggerObjectRead"
      • removedOutput schema / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / properties / finished_at / title
        Removed value: -"Finished At"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / is_test / title
        Removed value: -"Is Test"
      • removedOutput schema / properties / node_runs / title
        Removed value: -"Node Runs"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / results / title
        Removed value: -"Results"
      • removedOutput schema / properties / started_at / title
        Removed value: -"Started At"
      • removedOutput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedOutput schema / properties / workflow_version_id / title
        Removed value: -"Workflow Version Id"
      • removedOutput schema / title
        Removed value: -"WorkflowRunDetailRead"
    • Changedget_production_workflow_version149 fields changed
      • removedInput schema / properties / version_id / title
        Removed value: -"Version Id"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"WorkflowVersionIdentityInput"
      • removedOutput schema / $defs / AiModelInputConfig / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / AiModelInputConfig / title
        Removed value: -"AiModelInputConfig"
      • removedOutput schema / $defs / AiModelInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / AiModelInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / AiModelInputNodeInput / title
        Removed value: -"AiModelInputNodeInput"
      • removedOutput schema / $defs / ArtDirectionInputConfig / properties / art_direction_id / title
        Removed value: -"Art Direction Id"
      • removedOutput schema / $defs / ArtDirectionInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / ArtDirectionInputConfig / title
        Removed value: -"ArtDirectionInputConfig"
      • removedOutput schema / $defs / ArtDirectionInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ArtDirectionInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / ArtDirectionInputNodeInput / title
        Removed value: -"ArtDirectionInputNodeInput"
      • removedOutput schema / $defs / AvatarInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / AvatarInputConfig / properties / avatar_id / title
        Removed value: -"Avatar Id"
      • removedOutput schema / $defs / AvatarInputConfig / title
        Removed value: -"AvatarInputConfig"
      • removedOutput schema / $defs / AvatarInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / AvatarInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / AvatarInputNodeInput / title
        Removed value: -"AvatarInputNodeInput"
      • removedOutput schema / $defs / BranchNodeConfig / properties / cases / title
        Removed value: -"Cases"
      • removedOutput schema / $defs / BranchNodeConfig / properties / condition_type / title
        Removed value: -"Condition Type"
      • removedOutput schema / $defs / BranchNodeConfig / title
        Removed value: -"BranchNodeConfig"
      • removedOutput schema / $defs / BranchNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / BranchNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / BranchNodeInput / title
        Removed value: -"BranchNodeInput"
      • removedOutput schema / $defs / ClothingInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / ClothingInputConfig / properties / clothing_item_id / title
        Removed value: -"Clothing Item Id"
      • removedOutput schema / $defs / ClothingInputConfig / title
        Removed value: -"ClothingInputConfig"
      • removedOutput schema / $defs / ClothingInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ClothingInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / ClothingInputNodeInput / title
        Removed value: -"ClothingInputNodeInput"
      • removedOutput schema / $defs / DeliverTagDestination / properties / tag_ids / title
        Removed value: -"Tag Ids"
      • removedOutput schema / $defs / DeliverTagDestination / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / DeliverTagDestination / title
        Removed value: -"DeliverTagDestination"
      • removedOutput schema / $defs / DeliverWebhookDestination / properties / event_type / title
        Removed value: -"Event Type"
      • removedOutput schema / $defs / DeliverWebhookDestination / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / DeliverWebhookDestination / properties / webhook_id / title
        Removed value: -"Webhook Id"
      • removedOutput schema / $defs / DeliverWebhookDestination / title
        Removed value: -"DeliverWebhookDestination"
      • removedOutput schema / $defs / EdgeBindingInput / properties / mode / title
        Removed value: -"Mode"
      • removedOutput schema / $defs / EdgeBindingInput / properties / required / title
        Removed value: -"Required"
      • removedOutput schema / $defs / EdgeBindingInput / properties / role / title
        Removed value: -"Role"
      • removedOutput schema / $defs / EdgeBindingInput / title
        Removed value: -"EdgeBindingInput"
      • removedOutput schema / $defs / EdgeEndpointInput / properties / node_id / title
        Removed value: -"Node Id"
      • removedOutput schema / $defs / EdgeEndpointInput / properties / port / title
        Removed value: -"Port"
      • removedOutput schema / $defs / EdgeEndpointInput / title
        Removed value: -"EdgeEndpointInput"
      • removedOutput schema / $defs / GenerateNodeConfig / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / GenerateNodeConfig / properties / parameters / title
        Removed value: -"Parameters"
      • removedOutput schema / $defs / GenerateNodeConfig / properties / variant / title
        Removed value: -"Variant"
      • removedOutput schema / $defs / GenerateNodeConfig / title
        Removed value: -"GenerateNodeConfig"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / properties / parameters / title
        Removed value: -"Parameters"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / properties / variant / title
        Removed value: -"Variant"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / title
        Removed value: -"GenerateNodeConfigV1_2"
      • removedOutput schema / $defs / GenerateNodeInput / properties / config / title
        Removed value: -"Config"
      • removedOutput schema / $defs / GenerateNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / GenerateNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / GenerateNodeInput / title
        Removed value: -"GenerateNodeInput"
      • removedOutput schema / $defs / ImageInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / ImageInputConfig / properties / generation_result_id / title
        Removed value: -"Generation Result Id"
      • removedOutput schema / $defs / ImageInputConfig / title
        Removed value: -"ImageInputConfig"
      • removedOutput schema / $defs / ImageInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ImageInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / ImageInputNodeInput / title
        Removed value: -"ImageInputNodeInput"
      • removedOutput schema / $defs / InfrastructureRetryInput / properties / initial_backoff_seconds / title
        Removed value: -"Initial Backoff Seconds"
      • removedOutput schema / $defs / InfrastructureRetryInput / properties / max_attempts / title
        Removed value: -"Max Attempts"
      • removedOutput schema / $defs / InfrastructureRetryInput / properties / max_backoff_seconds / title
        Removed value: -"Max Backoff Seconds"
      • removedOutput schema / $defs / InfrastructureRetryInput / title
        Removed value: -"InfrastructureRetryInput"
      • removedOutput schema / $defs / LocationInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / LocationInputConfig / properties / location_id / title
        Removed value: -"Location Id"
      • removedOutput schema / $defs / LocationInputConfig / title
        Removed value: -"LocationInputConfig"
      • removedOutput schema / $defs / LocationInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / LocationInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / LocationInputNodeInput / title
        Removed value: -"LocationInputNodeInput"
      • removedOutput schema / $defs / NotifyNodeConfig / properties / event_type / title
        Removed value: -"Event Type"
      • removedOutput schema / $defs / NotifyNodeConfig / properties / webhook_id / title
        Removed value: -"Webhook Id"
      • removedOutput schema / $defs / NotifyNodeConfig / title
        Removed value: -"NotifyNodeConfig"
      • removedOutput schema / $defs / NotifyNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / NotifyNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / NotifyNodeInput / title
        Removed value: -"NotifyNodeInput"
      • removedOutput schema / $defs / OutputNodeConfig / properties / projection / title
        Removed value: -"Projection"
      • removedOutput schema / $defs / OutputNodeConfig / title
        Removed value: -"OutputNodeConfig"
      • removedOutput schema / $defs / OutputNodeConfigV1_2 / properties / projection / title
        Removed value: -"Projection"
      • removedOutput schema / $defs / OutputNodeConfigV1_2 / title
        Removed value: -"OutputNodeConfigV1_2"
      • removedOutput schema / $defs / OutputNodeConfigV1_3 / properties / destinations / title
        Removed value: -"Destinations"
      • removedOutput schema / $defs / OutputNodeConfigV1_3 / properties / projection / title
        Removed value: -"Projection"
      • removedOutput schema / $defs / OutputNodeConfigV1_3 / title
        Removed value: -"OutputNodeConfigV1_3"
      • removedOutput schema / $defs / OutputNodeConfigV1_4 / properties / destinations / title
        Removed value: -"Destinations"
      • removedOutput schema / $defs / OutputNodeConfigV1_4 / title
        Removed value: -"OutputNodeConfigV1_4"
      • removedOutput schema / $defs / OutputNodeInput / properties / config / title
        Removed value: -"Config"
      • removedOutput schema / $defs / OutputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / OutputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / OutputNodeInput / title
        Removed value: -"OutputNodeInput"
      • removedOutput schema / $defs / PromptInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / PromptInputConfig / properties / text / title
        Removed value: -"Text"
      • removedOutput schema / $defs / PromptInputConfig / title
        Removed value: -"PromptInputConfig"
      • removedOutput schema / $defs / PromptInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / PromptInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / PromptInputNodeInput / title
        Removed value: -"PromptInputNodeInput"
      • removedOutput schema / $defs / QaGateNodeConfig / properties / max_content_retries / title
        Removed value: -"Max Content Retries"
      • removedOutput schema / $defs / QaGateNodeConfig / properties / policy / title
        Removed value: -"Policy"
      • removedOutput schema / $defs / QaGateNodeConfig / title
        Removed value: -"QaGateNodeConfig"
      • removedOutput schema / $defs / QaGateNodeConfigV1_2 / properties / max_content_retries / title
        Removed value: -"Max Content Retries"
      • removedOutput schema / $defs / QaGateNodeConfigV1_2 / properties / policy / title
        Removed value: -"Policy"
      • removedOutput schema / $defs / QaGateNodeConfigV1_2 / title
        Removed value: -"QaGateNodeConfigV1_2"
      • removedOutput schema / $defs / QaGateNodeInput / properties / config / title
        Removed value: -"Config"
      • removedOutput schema / $defs / QaGateNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / QaGateNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / QaGateNodeInput / title
        Removed value: -"QaGateNodeInput"
      • removedOutput schema / $defs / QaGraphRetryConfig / properties / max_retries / title
        Removed value: -"Max Retries"
      • removedOutput schema / $defs / QaGraphRetryConfig / properties / retry_from_node_id / title
        Removed value: -"Retry From Node Id"
      • removedOutput schema / $defs / QaGraphRetryConfig / title
        Removed value: -"QaGraphRetryConfig"
      • removedOutput schema / $defs / ReadinessInput / properties / mode / title
        Removed value: -"Mode"
      • removedOutput schema / $defs / ReadinessInput / title
        Removed value: -"ReadinessInput"
      • removedOutput schema / $defs / TriggerNodeConfig / properties / settings / title
        Removed value: -"Settings"
      • removedOutput schema / $defs / TriggerNodeConfig / properties / source / title
        Removed value: -"Source"
      • removedOutput schema / $defs / TriggerNodeConfig / title
        Removed value: -"TriggerNodeConfig"
      • removedOutput schema / $defs / TriggerNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / TriggerNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / TriggerNodeInput / title
        Removed value: -"TriggerNodeInput"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / base_version_id / title
        Removed value: -"Base Version Id"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / number / title
        Removed value: -"Number"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / published_at / title
        Removed value: -"Published At"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / title
        Removed value: -"WorkflowDefinitionVersionRead"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / title
        Removed value: -"WorkflowDefinitionWorkflowRead"
      • removedOutput schema / $defs / WorkflowEdgeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowEdgeInput / title
        Removed value: -"WorkflowEdgeInput"
      • removedOutput schema / $defs / WorkflowFailurePolicy / title
        Removed value: -"WorkflowFailurePolicy"
      • removedOutput schema / $defs / WorkflowVersionState / title
        Removed value: -"WorkflowVersionState"
      • removedOutput schema / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / properties / edges / title
        Removed value: -"Edges"
      • removedOutput schema / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / properties / nodes / title
        Removed value: -"Nodes"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / result_projection / title
        Removed value: -"Result Projection"
      • removedOutput schema / title
        Removed value: -"WorkflowDefinitionRead"
    • Changedlist_production_workflow_runs29 fields changed
      • removedInput schema / $defs / WorkflowRunStatus / title
        Removed value: -"WorkflowRunStatus"
      • removedInput schema / properties / items_per_page / title
        Removed value: -"Items Per Page"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"ListWorkflowRunsInput"
      • removedOutput schema / $defs / WorkflowRunStatus / title
        Removed value: -"WorkflowRunStatus"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / debited_credit_units / title
        Removed value: -"Debited Credit Units"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / finished_at / title
        Removed value: -"Finished At"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / is_test / title
        Removed value: -"Is Test"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / net_credit_units / title
        Removed value: -"Net Credit Units"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / refunded_credit_units / title
        Removed value: -"Refunded Credit Units"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / started_at / title
        Removed value: -"Started At"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / trigger_object_id / title
        Removed value: -"Trigger Object Id"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / trigger_object_type / title
        Removed value: -"Trigger Object Type"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / trigger_source / title
        Removed value: -"Trigger Source"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / properties / workflow_version_id / title
        Removed value: -"Workflow Version Id"
      • removedOutput schema / $defs / WorkflowRunSummaryRead / title
        Removed value: -"WorkflowRunSummaryRead"
      • removedOutput schema / properties / data / title
        Removed value: -"Data"
      • removedOutput schema / properties / items_per_page / title
        Removed value: -"Items Per Page"
      • removedOutput schema / properties / page / title
        Removed value: -"Page"
      • removedOutput schema / properties / total_count / title
        Removed value: -"Total Count"
      • removedOutput schema / title
        Removed value: -"PaginatedWorkflowRunRead"
    • Changedlist_production_workflow_versions22 fields changed
      • removedInput schema / properties / items_per_page / title
        Removed value: -"Items Per Page"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"ListWorkflowVersionsInput"
      • removedOutput schema / $defs / WorkflowVersionState / title
        Removed value: -"WorkflowVersionState"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / base_version_id / title
        Removed value: -"Base Version Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / number / title
        Removed value: -"Number"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / published_at / title
        Removed value: -"Published At"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / published_by_profile_id / title
        Removed value: -"Published By Profile Id"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / $defs / WorkflowVersionSummaryRead / title
        Removed value: -"WorkflowVersionSummaryRead"
      • removedOutput schema / properties / data / title
        Removed value: -"Data"
      • removedOutput schema / properties / items_per_page / title
        Removed value: -"Items Per Page"
      • removedOutput schema / properties / page / title
        Removed value: -"Page"
      • removedOutput schema / properties / total_count / title
        Removed value: -"Total Count"
      • removedOutput schema / title
        Removed value: -"WorkflowVersionListRead"
    • Changedlist_production_workflows19 fields changed
      • removedInput schema / properties / include_archived / title
        Removed value: -"Include Archived"
      • removedInput schema / properties / items_per_page / title
        Removed value: -"Items Per Page"
      • removedInput schema / properties / page / title
        Removed value: -"Page"
      • removedInput schema / title
        Removed value: -"ListWorkflowsInput"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / run_time_slot_kinds / title
        Removed value: -"Run Time Slot Kinds"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / $defs / WorkflowResourceRead / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / $defs / WorkflowResourceRead / title
        Removed value: -"WorkflowResourceRead"
      • removedOutput schema / properties / data / title
        Removed value: -"Data"
      • removedOutput schema / properties / total_count / title
        Removed value: -"Total Count"
      • removedOutput schema / title
        Removed value: -"PaginatedWorkflowRead"
    • Changedprepare_local_garment_upload1 field changed
      • removedInput schema / $defs
        Removed value: -{
        -  "LocalGarmentUploadFileInput": {
        -    "additionalProperties": false,
        -    "description": "Metadata for one client-local image that will be uploaded directly.",
        -    "properties": {
        -      "content_length": {
        -        "description": "Exact local image size in bytes; maximum 25 MB",
        -        "exclusiveMinimum": 0,
        -        "maximum": 26214400,
        -        "type": "integer"
        -      },
        -      "content_type": {
        -        "description": "Image MIME type used by the direct upload",
        -        "enum": [
        -          "image/jpeg",
        -          "image/png",
        -          "image/webp",
        -          "image/avif",
        -          "image/gif",
        -          "image/bmp",
        -          "image/tiff"
        -        ],
        -        "type": "string"
        -      },
        -      "file_name": {
        -        "description": "Local image filename only; never include its filesystem path",
        -        "maxLength": 255,
        -        "minLength": 1,
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "file_name",
        -      "content_type",
        -      "content_length"
        -    ],
        -    "type": "object"
        -  }
        -}
    • Changedpropose_brief5 fields changed
      • removedInput schema / $defs / GenerationCommand / properties / source / discriminator / mapping
        Removed value: -{
        -  "generation_result": "#/$defs/GenerationResultCommandSource",
        -  "pipeline_step": "#/$defs/PipelineStepCommandSource",
        -  "public_url": "#/$defs/PublicUrlCommandSource",
        -  "uploaded_file": "#/$defs/UploadedFileCommandSource"
        -}
      • removedInput schema / $defs / GenerationResultCommandSource
        Removed value: -{
        -  "properties": {
        -    "generation_result_id": {
        -      "minimum": 1,
        -      "type": "integer"
        -    },
        -    "type": {
        -      "const": "generation_result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "generation_result_id"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / PipelineStepCommandSource
        Removed value: -{
        -  "description": "Durable identity for a source produced by an earlier pipeline step.",
        -  "properties": {
        -    "output_index": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "post_claim_reference": {
        -      "minLength": 1,
        -      "type": "string"
        -    },
        -    "step_index": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "type": {
        -      "const": "pipeline_step",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "post_claim_reference",
        -    "step_index",
        -    "output_index"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / PublicUrlCommandSource
        Removed value: -{
        -  "properties": {
        -    "image_url": {
        -      "minLength": 1,
        -      "type": "string"
        -    },
        -    "type": {
        -      "const": "public_url",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "image_url"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / UploadedFileCommandSource
        Removed value: -{
        -  "properties": {
        -    "type": {
        -      "const": "uploaded_file",
        -      "type": "string"
        -    },
        -    "uploaded_file_id": {
        -      "minimum": 1,
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "uploaded_file_id"
        -  ],
        -  "type": "object"
        -}
    • Changedpublish_production_workflow_version149 fields changed
      • removedInput schema / properties / version_id / title
        Removed value: -"Version Id"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"WorkflowVersionIdentityInput"
      • removedOutput schema / $defs / AiModelInputConfig / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / AiModelInputConfig / title
        Removed value: -"AiModelInputConfig"
      • removedOutput schema / $defs / AiModelInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / AiModelInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / AiModelInputNodeInput / title
        Removed value: -"AiModelInputNodeInput"
      • removedOutput schema / $defs / ArtDirectionInputConfig / properties / art_direction_id / title
        Removed value: -"Art Direction Id"
      • removedOutput schema / $defs / ArtDirectionInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / ArtDirectionInputConfig / title
        Removed value: -"ArtDirectionInputConfig"
      • removedOutput schema / $defs / ArtDirectionInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ArtDirectionInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / ArtDirectionInputNodeInput / title
        Removed value: -"ArtDirectionInputNodeInput"
      • removedOutput schema / $defs / AvatarInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / AvatarInputConfig / properties / avatar_id / title
        Removed value: -"Avatar Id"
      • removedOutput schema / $defs / AvatarInputConfig / title
        Removed value: -"AvatarInputConfig"
      • removedOutput schema / $defs / AvatarInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / AvatarInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / AvatarInputNodeInput / title
        Removed value: -"AvatarInputNodeInput"
      • removedOutput schema / $defs / BranchNodeConfig / properties / cases / title
        Removed value: -"Cases"
      • removedOutput schema / $defs / BranchNodeConfig / properties / condition_type / title
        Removed value: -"Condition Type"
      • removedOutput schema / $defs / BranchNodeConfig / title
        Removed value: -"BranchNodeConfig"
      • removedOutput schema / $defs / BranchNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / BranchNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / BranchNodeInput / title
        Removed value: -"BranchNodeInput"
      • removedOutput schema / $defs / ClothingInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / ClothingInputConfig / properties / clothing_item_id / title
        Removed value: -"Clothing Item Id"
      • removedOutput schema / $defs / ClothingInputConfig / title
        Removed value: -"ClothingInputConfig"
      • removedOutput schema / $defs / ClothingInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ClothingInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / ClothingInputNodeInput / title
        Removed value: -"ClothingInputNodeInput"
      • removedOutput schema / $defs / DeliverTagDestination / properties / tag_ids / title
        Removed value: -"Tag Ids"
      • removedOutput schema / $defs / DeliverTagDestination / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / DeliverTagDestination / title
        Removed value: -"DeliverTagDestination"
      • removedOutput schema / $defs / DeliverWebhookDestination / properties / event_type / title
        Removed value: -"Event Type"
      • removedOutput schema / $defs / DeliverWebhookDestination / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / DeliverWebhookDestination / properties / webhook_id / title
        Removed value: -"Webhook Id"
      • removedOutput schema / $defs / DeliverWebhookDestination / title
        Removed value: -"DeliverWebhookDestination"
      • removedOutput schema / $defs / EdgeBindingInput / properties / mode / title
        Removed value: -"Mode"
      • removedOutput schema / $defs / EdgeBindingInput / properties / required / title
        Removed value: -"Required"
      • removedOutput schema / $defs / EdgeBindingInput / properties / role / title
        Removed value: -"Role"
      • removedOutput schema / $defs / EdgeBindingInput / title
        Removed value: -"EdgeBindingInput"
      • removedOutput schema / $defs / EdgeEndpointInput / properties / node_id / title
        Removed value: -"Node Id"
      • removedOutput schema / $defs / EdgeEndpointInput / properties / port / title
        Removed value: -"Port"
      • removedOutput schema / $defs / EdgeEndpointInput / title
        Removed value: -"EdgeEndpointInput"
      • removedOutput schema / $defs / GenerateNodeConfig / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / GenerateNodeConfig / properties / parameters / title
        Removed value: -"Parameters"
      • removedOutput schema / $defs / GenerateNodeConfig / properties / variant / title
        Removed value: -"Variant"
      • removedOutput schema / $defs / GenerateNodeConfig / title
        Removed value: -"GenerateNodeConfig"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / properties / model_slug / title
        Removed value: -"Model Slug"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / properties / parameters / title
        Removed value: -"Parameters"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / properties / variant / title
        Removed value: -"Variant"
      • removedOutput schema / $defs / GenerateNodeConfigV1_2 / title
        Removed value: -"GenerateNodeConfigV1_2"
      • removedOutput schema / $defs / GenerateNodeInput / properties / config / title
        Removed value: -"Config"
      • removedOutput schema / $defs / GenerateNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / GenerateNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / GenerateNodeInput / title
        Removed value: -"GenerateNodeInput"
      • removedOutput schema / $defs / ImageInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / ImageInputConfig / properties / generation_result_id / title
        Removed value: -"Generation Result Id"
      • removedOutput schema / $defs / ImageInputConfig / title
        Removed value: -"ImageInputConfig"
      • removedOutput schema / $defs / ImageInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / ImageInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / ImageInputNodeInput / title
        Removed value: -"ImageInputNodeInput"
      • removedOutput schema / $defs / InfrastructureRetryInput / properties / initial_backoff_seconds / title
        Removed value: -"Initial Backoff Seconds"
      • removedOutput schema / $defs / InfrastructureRetryInput / properties / max_attempts / title
        Removed value: -"Max Attempts"
      • removedOutput schema / $defs / InfrastructureRetryInput / properties / max_backoff_seconds / title
        Removed value: -"Max Backoff Seconds"
      • removedOutput schema / $defs / InfrastructureRetryInput / title
        Removed value: -"InfrastructureRetryInput"
      • removedOutput schema / $defs / LocationInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / LocationInputConfig / properties / location_id / title
        Removed value: -"Location Id"
      • removedOutput schema / $defs / LocationInputConfig / title
        Removed value: -"LocationInputConfig"
      • removedOutput schema / $defs / LocationInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / LocationInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / LocationInputNodeInput / title
        Removed value: -"LocationInputNodeInput"
      • removedOutput schema / $defs / NotifyNodeConfig / properties / event_type / title
        Removed value: -"Event Type"
      • removedOutput schema / $defs / NotifyNodeConfig / properties / webhook_id / title
        Removed value: -"Webhook Id"
      • removedOutput schema / $defs / NotifyNodeConfig / title
        Removed value: -"NotifyNodeConfig"
      • removedOutput schema / $defs / NotifyNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / NotifyNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / NotifyNodeInput / title
        Removed value: -"NotifyNodeInput"
      • removedOutput schema / $defs / OutputNodeConfig / properties / projection / title
        Removed value: -"Projection"
      • removedOutput schema / $defs / OutputNodeConfig / title
        Removed value: -"OutputNodeConfig"
      • removedOutput schema / $defs / OutputNodeConfigV1_2 / properties / projection / title
        Removed value: -"Projection"
      • removedOutput schema / $defs / OutputNodeConfigV1_2 / title
        Removed value: -"OutputNodeConfigV1_2"
      • removedOutput schema / $defs / OutputNodeConfigV1_3 / properties / destinations / title
        Removed value: -"Destinations"
      • removedOutput schema / $defs / OutputNodeConfigV1_3 / properties / projection / title
        Removed value: -"Projection"
      • removedOutput schema / $defs / OutputNodeConfigV1_3 / title
        Removed value: -"OutputNodeConfigV1_3"
      • removedOutput schema / $defs / OutputNodeConfigV1_4 / properties / destinations / title
        Removed value: -"Destinations"
      • removedOutput schema / $defs / OutputNodeConfigV1_4 / title
        Removed value: -"OutputNodeConfigV1_4"
      • removedOutput schema / $defs / OutputNodeInput / properties / config / title
        Removed value: -"Config"
      • removedOutput schema / $defs / OutputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / OutputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / OutputNodeInput / title
        Removed value: -"OutputNodeInput"
      • removedOutput schema / $defs / PromptInputConfig / properties / ask_at_run_time / title
        Removed value: -"Ask At Run Time"
      • removedOutput schema / $defs / PromptInputConfig / properties / text / title
        Removed value: -"Text"
      • removedOutput schema / $defs / PromptInputConfig / title
        Removed value: -"PromptInputConfig"
      • removedOutput schema / $defs / PromptInputNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / PromptInputNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / PromptInputNodeInput / title
        Removed value: -"PromptInputNodeInput"
      • removedOutput schema / $defs / QaGateNodeConfig / properties / max_content_retries / title
        Removed value: -"Max Content Retries"
      • removedOutput schema / $defs / QaGateNodeConfig / properties / policy / title
        Removed value: -"Policy"
      • removedOutput schema / $defs / QaGateNodeConfig / title
        Removed value: -"QaGateNodeConfig"
      • removedOutput schema / $defs / QaGateNodeConfigV1_2 / properties / max_content_retries / title
        Removed value: -"Max Content Retries"
      • removedOutput schema / $defs / QaGateNodeConfigV1_2 / properties / policy / title
        Removed value: -"Policy"
      • removedOutput schema / $defs / QaGateNodeConfigV1_2 / title
        Removed value: -"QaGateNodeConfigV1_2"
      • removedOutput schema / $defs / QaGateNodeInput / properties / config / title
        Removed value: -"Config"
      • removedOutput schema / $defs / QaGateNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / QaGateNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / QaGateNodeInput / title
        Removed value: -"QaGateNodeInput"
      • removedOutput schema / $defs / QaGraphRetryConfig / properties / max_retries / title
        Removed value: -"Max Retries"
      • removedOutput schema / $defs / QaGraphRetryConfig / properties / retry_from_node_id / title
        Removed value: -"Retry From Node Id"
      • removedOutput schema / $defs / QaGraphRetryConfig / title
        Removed value: -"QaGraphRetryConfig"
      • removedOutput schema / $defs / ReadinessInput / properties / mode / title
        Removed value: -"Mode"
      • removedOutput schema / $defs / ReadinessInput / title
        Removed value: -"ReadinessInput"
      • removedOutput schema / $defs / TriggerNodeConfig / properties / settings / title
        Removed value: -"Settings"
      • removedOutput schema / $defs / TriggerNodeConfig / properties / source / title
        Removed value: -"Source"
      • removedOutput schema / $defs / TriggerNodeConfig / title
        Removed value: -"TriggerNodeConfig"
      • removedOutput schema / $defs / TriggerNodeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / TriggerNodeInput / properties / type / title
        Removed value: -"Type"
      • removedOutput schema / $defs / TriggerNodeInput / title
        Removed value: -"TriggerNodeInput"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / base_version_id / title
        Removed value: -"Base Version Id"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / number / title
        Removed value: -"Number"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / properties / published_at / title
        Removed value: -"Published At"
      • removedOutput schema / $defs / WorkflowDefinitionVersionRead / title
        Removed value: -"WorkflowDefinitionVersionRead"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / $defs / WorkflowDefinitionWorkflowRead / title
        Removed value: -"WorkflowDefinitionWorkflowRead"
      • removedOutput schema / $defs / WorkflowEdgeInput / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowEdgeInput / title
        Removed value: -"WorkflowEdgeInput"
      • removedOutput schema / $defs / WorkflowFailurePolicy / title
        Removed value: -"WorkflowFailurePolicy"
      • removedOutput schema / $defs / WorkflowVersionState / title
        Removed value: -"WorkflowVersionState"
      • removedOutput schema / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / properties / edges / title
        Removed value: -"Edges"
      • removedOutput schema / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / properties / nodes / title
        Removed value: -"Nodes"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / result_projection / title
        Removed value: -"Result Projection"
      • removedOutput schema / title
        Removed value: -"WorkflowDefinitionRead"
    • Changedsave_template5 fields changed
      • removedInput schema / $defs / GenerationCommand / properties / source / discriminator / mapping
        Removed value: -{
        -  "generation_result": "#/$defs/GenerationResultCommandSource",
        -  "pipeline_step": "#/$defs/PipelineStepCommandSource",
        -  "public_url": "#/$defs/PublicUrlCommandSource",
        -  "uploaded_file": "#/$defs/UploadedFileCommandSource"
        -}
      • removedInput schema / $defs / GenerationResultCommandSource
        Removed value: -{
        -  "properties": {
        -    "generation_result_id": {
        -      "minimum": 1,
        -      "type": "integer"
        -    },
        -    "type": {
        -      "const": "generation_result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "generation_result_id"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / PipelineStepCommandSource
        Removed value: -{
        -  "description": "Durable identity for a source produced by an earlier pipeline step.",
        -  "properties": {
        -    "output_index": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "post_claim_reference": {
        -      "minLength": 1,
        -      "type": "string"
        -    },
        -    "step_index": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "type": {
        -      "const": "pipeline_step",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "post_claim_reference",
        -    "step_index",
        -    "output_index"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / PublicUrlCommandSource
        Removed value: -{
        -  "properties": {
        -    "image_url": {
        -      "minLength": 1,
        -      "type": "string"
        -    },
        -    "type": {
        -      "const": "public_url",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "image_url"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / UploadedFileCommandSource
        Removed value: -{
        -  "properties": {
        -    "type": {
        -      "const": "uploaded_file",
        -      "type": "string"
        -    },
        -    "uploaded_file_id": {
        -      "minimum": 1,
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "uploaded_file_id"
        -  ],
        -  "type": "object"
        -}
    • Changedstart_production_workflow_run27 fields changed
      • removedInput schema / $defs / WorkflowRunCreate / properties / object_id / title
        Removed value: -"Object Id"
      • removedInput schema / $defs / WorkflowRunCreate / properties / object_type / title
        Removed value: -"Object Type"
      • removedInput schema / $defs / WorkflowRunCreate / properties / payload / title
        Removed value: -"Payload"
      • removedInput schema / $defs / WorkflowRunCreate / properties / slot_bindings / title
        Removed value: -"Slot Bindings"
      • removedInput schema / $defs / WorkflowRunCreate / properties / version_id / title
        Removed value: -"Version Id"
      • removedInput schema / $defs / WorkflowRunCreate / title
        Removed value: -"WorkflowRunCreate"
      • removedInput schema / properties / idempotency_key / title
        Removed value: -"Idempotency Key"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"StartWorkflowRunInput"
      • removedOutput schema / $defs / WorkflowRunStatus / title
        Removed value: -"WorkflowRunStatus"
      • removedOutput schema / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / debited_credit_units / title
        Removed value: -"Debited Credit Units"
      • removedOutput schema / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / properties / finished_at / title
        Removed value: -"Finished At"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / is_test / title
        Removed value: -"Is Test"
      • removedOutput schema / properties / net_credit_units / title
        Removed value: -"Net Credit Units"
      • removedOutput schema / properties / refunded_credit_units / title
        Removed value: -"Refunded Credit Units"
      • removedOutput schema / properties / replayed / title
        Removed value: -"Replayed"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / started_at / title
        Removed value: -"Started At"
      • removedOutput schema / properties / trigger_event_id / title
        Removed value: -"Trigger Event Id"
      • removedOutput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedOutput schema / properties / workflow_version_id / title
        Removed value: -"Workflow Version Id"
      • removedOutput schema / title
        Removed value: -"WorkflowRunStartRead"
    • Changedstart_production_workflow_run_batch34 fields changed
      • removedInput schema / $defs / WorkflowRunBatchCreate / properties / object_ids / title
        Removed value: -"Object Ids"
      • removedInput schema / $defs / WorkflowRunBatchCreate / properties / object_type / title
        Removed value: -"Object Type"
      • removedInput schema / $defs / WorkflowRunBatchCreate / properties / payload / title
        Removed value: -"Payload"
      • removedInput schema / $defs / WorkflowRunBatchCreate / properties / slot_bindings / title
        Removed value: -"Slot Bindings"
      • removedInput schema / $defs / WorkflowRunBatchCreate / properties / version_id / title
        Removed value: -"Version Id"
      • removedInput schema / $defs / WorkflowRunBatchCreate / title
        Removed value: -"WorkflowRunBatchCreate"
      • removedInput schema / properties / idempotency_key / title
        Removed value: -"Idempotency Key"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"StartWorkflowRunBatchInput"
      • removedOutput schema / $defs / WorkflowRunBatchFailure / properties / detail / title
        Removed value: -"Detail"
      • removedOutput schema / $defs / WorkflowRunBatchFailure / properties / object_id / title
        Removed value: -"Object Id"
      • removedOutput schema / $defs / WorkflowRunBatchFailure / title
        Removed value: -"WorkflowRunBatchFailure"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / debited_credit_units / title
        Removed value: -"Debited Credit Units"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / definition_hash / title
        Removed value: -"Definition Hash"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / estimated_credit_units / title
        Removed value: -"Estimated Credit Units"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / finished_at / title
        Removed value: -"Finished At"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / is_test / title
        Removed value: -"Is Test"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / net_credit_units / title
        Removed value: -"Net Credit Units"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / refunded_credit_units / title
        Removed value: -"Refunded Credit Units"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / replayed / title
        Removed value: -"Replayed"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / started_at / title
        Removed value: -"Started At"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / trigger_event_id / title
        Removed value: -"Trigger Event Id"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedOutput schema / $defs / WorkflowRunStartRead / properties / workflow_version_id / title
        Removed value: -"Workflow Version Id"
      • removedOutput schema / $defs / WorkflowRunStartRead / title
        Removed value: -"WorkflowRunStartRead"
      • removedOutput schema / $defs / WorkflowRunStatus / title
        Removed value: -"WorkflowRunStatus"
      • removedOutput schema / properties / failures / title
        Removed value: -"Failures"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / runs / title
        Removed value: -"Runs"
      • removedOutput schema / title
        Removed value: -"WorkflowRunBatchStartRead"
    • Changedupdate_brief5 fields changed
      • removedInput schema / $defs / GenerationCommand / properties / source / discriminator / mapping
        Removed value: -{
        -  "generation_result": "#/$defs/GenerationResultCommandSource",
        -  "pipeline_step": "#/$defs/PipelineStepCommandSource",
        -  "public_url": "#/$defs/PublicUrlCommandSource",
        -  "uploaded_file": "#/$defs/UploadedFileCommandSource"
        -}
      • removedInput schema / $defs / GenerationResultCommandSource
        Removed value: -{
        -  "properties": {
        -    "generation_result_id": {
        -      "minimum": 1,
        -      "type": "integer"
        -    },
        -    "type": {
        -      "const": "generation_result",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "generation_result_id"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / PipelineStepCommandSource
        Removed value: -{
        -  "description": "Durable identity for a source produced by an earlier pipeline step.",
        -  "properties": {
        -    "output_index": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "post_claim_reference": {
        -      "minLength": 1,
        -      "type": "string"
        -    },
        -    "step_index": {
        -      "minimum": 0,
        -      "type": "integer"
        -    },
        -    "type": {
        -      "const": "pipeline_step",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "post_claim_reference",
        -    "step_index",
        -    "output_index"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / PublicUrlCommandSource
        Removed value: -{
        -  "properties": {
        -    "image_url": {
        -      "minLength": 1,
        -      "type": "string"
        -    },
        -    "type": {
        -      "const": "public_url",
        -      "type": "string"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "image_url"
        -  ],
        -  "type": "object"
        -}
      • removedInput schema / $defs / UploadedFileCommandSource
        Removed value: -{
        -  "properties": {
        -    "type": {
        -      "const": "uploaded_file",
        -      "type": "string"
        -    },
        -    "uploaded_file_id": {
        -      "minimum": 1,
        -      "type": "integer"
        -    }
        -  },
        -  "required": [
        -    "type",
        -    "uploaded_file_id"
        -  ],
        -  "type": "object"
        -}
    • Changedupdate_production_workflow18 fields changed
      • removedInput schema / $defs / WorkflowUpdate / properties / archived / title
        Removed value: -"Archived"
      • removedInput schema / $defs / WorkflowUpdate / properties / enabled / title
        Removed value: -"Enabled"
      • removedInput schema / $defs / WorkflowUpdate / properties / name / title
        Removed value: -"Name"
      • removedInput schema / $defs / WorkflowUpdate / title
        Removed value: -"WorkflowUpdate"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"UpdateWorkflowInput"
      • removedOutput schema / properties / archived / title
        Removed value: -"Archived"
      • removedOutput schema / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / properties / created_at / title
        Removed value: -"Created At"
      • removedOutput schema / properties / created_by_profile_id / title
        Removed value: -"Created By Profile Id"
      • removedOutput schema / properties / enabled / title
        Removed value: -"Enabled"
      • removedOutput schema / properties / enabled_version_id / title
        Removed value: -"Enabled Version Id"
      • removedOutput schema / properties / id / title
        Removed value: -"Id"
      • removedOutput schema / properties / name / title
        Removed value: -"Name"
      • removedOutput schema / properties / run_time_slot_kinds / title
        Removed value: -"Run Time Slot Kinds"
      • removedOutput schema / properties / updated_at / title
        Removed value: -"Updated At"
      • removedOutput schema / properties / updated_by_profile_id / title
        Removed value: -"Updated By Profile Id"
      • removedOutput schema / title
        Removed value: -"WorkflowResourceRead"
    • Changedupdate_production_workflow_control12 fields changed
      • removedInput schema / $defs / WorkflowControlUpdate / properties / reason / title
        Removed value: -"Reason"
      • removedInput schema / $defs / WorkflowControlUpdate / properties / stopped / title
        Removed value: -"Stopped"
      • removedInput schema / $defs / WorkflowControlUpdate / title
        Removed value: -"WorkflowControlUpdate"
      • removedInput schema / title
        Removed value: -"UpdateWorkflowControlInput"
      • removedOutput schema / properties / changed_at / title
        Removed value: -"Changed At"
      • removedOutput schema / properties / changed_by_profile_id / title
        Removed value: -"Changed By Profile Id"
      • removedOutput schema / properties / company_id / title
        Removed value: -"Company Id"
      • removedOutput schema / properties / contract_version / title
        Removed value: -"Contract Version"
      • removedOutput schema / properties / reason / title
        Removed value: -"Reason"
      • removedOutput schema / properties / resource_type / title
        Removed value: -"Resource Type"
      • removedOutput schema / properties / stopped / title
        Removed value: -"Stopped"
      • removedOutput schema / title
        Removed value: -"WorkflowControlRead"
    • Changedupdate_production_workflow_version8 fields changed
      • removedInput schema / $defs
        Removed value: -{
        -  "AiModelInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "model_slug": {
        -        "anyOf": [
        -          {
        -            "maxLength": 100,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Model Slug"
        -      }
        -    },
        -    "title": "AiModelInputConfig",
        -    "type": "object"
        -  },
        -  "AiModelInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/AiModelInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.ai_model",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "AiModelInputNodeInput",
        -    "type": "object"
        -  },
        -  "ArtDirectionInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "art_direction_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Art Direction Id"
        -      },
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      }
        -    },
        -    "title": "ArtDirectionInputConfig",
        -    "type": "object"
        -  },
        -  "ArtDirectionInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/ArtDirectionInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.art_direction",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "ArtDirectionInputNodeInput",
        -    "type": "object"
        -  },
        -  "AvatarInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "avatar_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Avatar Id"
        -      }
        -    },
        -    "title": "AvatarInputConfig",
        -    "type": "object"
        -  },
        -  "AvatarInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/AvatarInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.avatar",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "AvatarInputNodeInput",
        -    "type": "object"
        -  },
        -  "BranchNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "cases": {
        -        "additionalProperties": {
        -          "enum": [
        -            "accepted",
        -            "rejected",
        -            "error"
        -          ],
        -          "type": "string"
        -        },
        -        "minProperties": 1,
        -        "propertyNames": {
        -          "enum": [
        -            "accepted",
        -            "rejected",
        -            "error"
        -          ]
        -        },
        -        "title": "Cases",
        -        "type": "object"
        -      },
        -      "condition_type": {
        -        "const": "qa_decision",
        -        "title": "Condition Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "condition_type",
        -      "cases"
        -    ],
        -    "title": "BranchNodeConfig",
        -    "type": "object"
        -  },
        -  "BranchNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/BranchNodeConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "branch",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "BranchNodeInput",
        -    "type": "object"
        -  },
        -  "ClothingInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "clothing_item_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Clothing Item Id"
        -      }
        -    },
        -    "title": "ClothingInputConfig",
        -    "type": "object"
        -  },
        -  "ClothingInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/ClothingInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.clothing",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "ClothingInputNodeInput",
        -    "type": "object"
        -  },
        -  "DeliverTagDestination": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "tag_ids": {
        -        "items": {
        -          "type": "integer"
        -        },
        -        "maxItems": 50,
        -        "minItems": 1,
        -        "title": "Tag Ids",
        -        "type": "array"
        -      },
        -      "type": {
        -        "const": "tag",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "tag_ids"
        -    ],
        -    "title": "DeliverTagDestination",
        -    "type": "object"
        -  },
        -  "DeliverWebhookDestination": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "event_type": {
        -        "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -        "title": "Event Type",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "webhook",
        -        "title": "Type",
        -        "type": "string"
        -      },
        -      "webhook_id": {
        -        "format": "uuid",
        -        "title": "Webhook Id",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "type",
        -      "webhook_id",
        -      "event_type"
        -    ],
        -    "title": "DeliverWebhookDestination",
        -    "type": "object"
        -  },
        -  "EdgeBindingInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "mode": {
        -        "enum": [
        -          "single",
        -          "collect"
        -        ],
        -        "title": "Mode",
        -        "type": "string"
        -      },
        -      "required": {
        -        "title": "Required",
        -        "type": "boolean"
        -      },
        -      "role": {
        -        "anyOf": [
        -          {
        -            "enum": [
        -              "background",
        -              "style"
        -            ],
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Role"
        -      }
        -    },
        -    "required": [
        -      "mode",
        -      "required"
        -    ],
        -    "title": "EdgeBindingInput",
        -    "type": "object"
        -  },
        -  "EdgeEndpointInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "node_id": {
        -        "format": "uuid",
        -        "title": "Node Id",
        -        "type": "string"
        -      },
        -      "port": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Port",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "node_id",
        -      "port"
        -    ],
        -    "title": "EdgeEndpointInput",
        -    "type": "object"
        -  },
        -  "GenerateNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "model_slug": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Model Slug",
        -        "type": "string"
        -      },
        -      "parameters": {
        -        "additionalProperties": true,
        -        "title": "Parameters",
        -        "type": "object"
        -      },
        -      "variant": {
        -        "enum": [
        -          "generate",
        -          "edit",
        -          "text_to_image"
        -        ],
        -        "title": "Variant",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "variant",
        -      "model_slug",
        -      "parameters"
        -    ],
        -    "title": "GenerateNodeConfig",
        -    "type": "object"
        -  },
        -  "GenerateNodeConfigV1_2": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "model_slug": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Model Slug",
        -        "type": "string"
        -      },
        -      "parameters": {
        -        "additionalProperties": true,
        -        "title": "Parameters",
        -        "type": "object"
        -      },
        -      "variant": {
        -        "enum": [
        -          "generate",
        -          "edit",
        -          "text_to_image",
        -          "video"
        -        ],
        -        "title": "Variant",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "variant",
        -      "model_slug",
        -      "parameters"
        -    ],
        -    "title": "GenerateNodeConfigV1_2",
        -    "type": "object"
        -  },
        -  "GenerateNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/GenerateNodeConfig"
        -          },
        -          {
        -            "$ref": "#/$defs/GenerateNodeConfigV1_2"
        -          }
        -        ],
        -        "title": "Config"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "generate",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "GenerateNodeInput",
        -    "type": "object"
        -  },
        -  "ImageInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "generation_result_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Generation Result Id"
        -      }
        -    },
        -    "title": "ImageInputConfig",
        -    "type": "object"
        -  },
        -  "ImageInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/ImageInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.image",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "ImageInputNodeInput",
        -    "type": "object"
        -  },
        -  "InfrastructureRetryInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "initial_backoff_seconds": {
        -        "maximum": 86400,
        -        "minimum": 0,
        -        "title": "Initial Backoff Seconds",
        -        "type": "integer"
        -      },
        -      "max_attempts": {
        -        "maximum": 20,
        -        "minimum": 1,
        -        "title": "Max Attempts",
        -        "type": "integer"
        -      },
        -      "max_backoff_seconds": {
        -        "maximum": 86400,
        -        "minimum": 0,
        -        "title": "Max Backoff Seconds",
        -        "type": "integer"
        -      }
        -    },
        -    "required": [
        -      "max_attempts",
        -      "initial_backoff_seconds",
        -      "max_backoff_seconds"
        -    ],
        -    "title": "InfrastructureRetryInput",
        -    "type": "object"
        -  },
        -  "LocationInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "location_id": {
        -        "anyOf": [
        -          {
        -            "minimum": 1,
        -            "type": "integer"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Location Id"
        -      }
        -    },
        -    "title": "LocationInputConfig",
        -    "type": "object"
        -  },
        -  "LocationInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/LocationInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.location",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "LocationInputNodeInput",
        -    "type": "object"
        -  },
        -  "NotifyNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "event_type": {
        -        "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -        "title": "Event Type",
        -        "type": "string"
        -      },
        -      "webhook_id": {
        -        "format": "uuid",
        -        "title": "Webhook Id",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "webhook_id",
        -      "event_type"
        -    ],
        -    "title": "NotifyNodeConfig",
        -    "type": "object"
        -  },
        -  "NotifyNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/NotifyNodeConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "notify",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "NotifyNodeInput",
        -    "type": "object"
        -  },
        -  "OutputNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "projection": {
        -        "items": {
        -          "enum": [
        -            "artifacts",
        -            "qa",
        -            "billing",
        -            "provenance"
        -          ],
        -          "type": "string"
        -        },
        -        "minItems": 1,
        -        "title": "Projection",
        -        "type": "array"
        -      }
        -    },
        -    "required": [
        -      "projection"
        -    ],
        -    "title": "OutputNodeConfig",
        -    "type": "object"
        -  },
        -  "OutputNodeConfigV1_2": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "projection": {
        -        "items": {
        -          "enum": [
        -            "artifacts",
        -            "qa",
        -            "billing",
        -            "provenance"
        -          ],
        -          "type": "string"
        -        },
        -        "minItems": 1,
        -        "title": "Projection",
        -        "type": "array"
        -      }
        -    },
        -    "title": "OutputNodeConfigV1_2",
        -    "type": "object"
        -  },
        -  "OutputNodeConfigV1_3": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "destinations": {
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "tag": "#/$defs/DeliverTagDestination",
        -              "webhook": "#/$defs/DeliverWebhookDestination"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "tag_ids": {
        -                  "items": {
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 50,
        -                  "minItems": 1,
        -                  "title": "Tag Ids",
        -                  "type": "array"
        -                },
        -                "type": {
        -                  "const": "tag",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "tag_ids"
        -              ],
        -              "title": "DeliverTagDestination",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "event_type": {
        -                  "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                  "title": "Event Type",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "webhook",
        -                  "title": "Type",
        -                  "type": "string"
        -                },
        -                "webhook_id": {
        -                  "format": "uuid",
        -                  "title": "Webhook Id",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "webhook_id",
        -                "event_type"
        -              ],
        -              "title": "DeliverWebhookDestination",
        -              "type": "object"
        -            }
        -          ],
        -          "properties": {
        -            "event_type": {
        -              "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -              "title": "Event Type",
        -              "type": "string"
        -            },
        -            "tag_ids": {
        -              "items": {
        -                "type": "integer"
        -              },
        -              "maxItems": 50,
        -              "minItems": 1,
        -              "title": "Tag Ids",
        -              "type": "array"
        -            },
        -            "type": {
        -              "enum": [
        -                "tag",
        -                "webhook"
        -              ],
        -              "type": "string"
        -            },
        -            "webhook_id": {
        -              "format": "uuid",
        -              "title": "Webhook Id",
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "maxItems": 20,
        -        "title": "Destinations",
        -        "type": "array"
        -      },
        -      "projection": {
        -        "anyOf": [
        -          {
        -            "items": {
        -              "enum": [
        -                "artifacts",
        -                "qa",
        -                "billing",
        -                "provenance"
        -              ],
        -              "type": "string"
        -            },
        -            "type": "array"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Projection"
        -      }
        -    },
        -    "title": "OutputNodeConfigV1_3",
        -    "type": "object"
        -  },
        -  "OutputNodeConfigV1_4": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "destinations": {
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "tag": "#/$defs/DeliverTagDestination",
        -              "webhook": "#/$defs/DeliverWebhookDestination"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "tag_ids": {
        -                  "items": {
        -                    "type": "integer"
        -                  },
        -                  "maxItems": 50,
        -                  "minItems": 1,
        -                  "title": "Tag Ids",
        -                  "type": "array"
        -                },
        -                "type": {
        -                  "const": "tag",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "tag_ids"
        -              ],
        -              "title": "DeliverTagDestination",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "event_type": {
        -                  "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                  "title": "Event Type",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "webhook",
        -                  "title": "Type",
        -                  "type": "string"
        -                },
        -                "webhook_id": {
        -                  "format": "uuid",
        -                  "title": "Webhook Id",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "type",
        -                "webhook_id",
        -                "event_type"
        -              ],
        -              "title": "DeliverWebhookDestination",
        -              "type": "object"
        -            }
        -          ],
        -          "properties": {
        -            "event_type": {
        -              "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -              "title": "Event Type",
        -              "type": "string"
        -            },
        -            "tag_ids": {
        -              "items": {
        -                "type": "integer"
        -              },
        -              "maxItems": 50,
        -              "minItems": 1,
        -              "title": "Tag Ids",
        -              "type": "array"
        -            },
        -            "type": {
        -              "enum": [
        -                "tag",
        -                "webhook"
        -              ],
        -              "type": "string"
        -            },
        -            "webhook_id": {
        -              "format": "uuid",
        -              "title": "Webhook Id",
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "maxItems": 20,
        -        "title": "Destinations",
        -        "type": "array"
        -      }
        -    },
        -    "title": "OutputNodeConfigV1_4",
        -    "type": "object"
        -  },
        -  "OutputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/OutputNodeConfig"
        -          },
        -          {
        -            "$ref": "#/$defs/OutputNodeConfigV1_2"
        -          },
        -          {
        -            "$ref": "#/$defs/OutputNodeConfigV1_3"
        -          },
        -          {
        -            "$ref": "#/$defs/OutputNodeConfigV1_4"
        -          }
        -        ],
        -        "title": "Config"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "output",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "OutputNodeInput",
        -    "type": "object"
        -  },
        -  "PromptInputConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "ask_at_run_time": {
        -        "default": false,
        -        "title": "Ask At Run Time",
        -        "type": "boolean"
        -      },
        -      "text": {
        -        "anyOf": [
        -          {
        -            "maxLength": 10000,
        -            "minLength": 1,
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null,
        -        "title": "Text"
        -      }
        -    },
        -    "title": "PromptInputConfig",
        -    "type": "object"
        -  },
        -  "PromptInputNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/PromptInputConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "input.prompt",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "PromptInputNodeInput",
        -    "type": "object"
        -  },
        -  "QaGateNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "max_content_retries": {
        -        "maximum": 20,
        -        "minimum": 0,
        -        "title": "Max Content Retries",
        -        "type": "integer"
        -      },
        -      "policy": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Policy",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "policy",
        -      "max_content_retries"
        -    ],
        -    "title": "QaGateNodeConfig",
        -    "type": "object"
        -  },
        -  "QaGateNodeConfigV1_2": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "graph_retry": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/QaGraphRetryConfig"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ],
        -        "default": null
        -      },
        -      "max_content_retries": {
        -        "maximum": 20,
        -        "minimum": 0,
        -        "title": "Max Content Retries",
        -        "type": "integer"
        -      },
        -      "policy": {
        -        "maxLength": 100,
        -        "minLength": 1,
        -        "title": "Policy",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "policy",
        -      "max_content_retries"
        -    ],
        -    "title": "QaGateNodeConfigV1_2",
        -    "type": "object"
        -  },
        -  "QaGateNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "anyOf": [
        -          {
        -            "$ref": "#/$defs/QaGateNodeConfig"
        -          },
        -          {
        -            "$ref": "#/$defs/QaGateNodeConfigV1_2"
        -          }
        -        ],
        -        "title": "Config"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "infrastructure_retry": {
        -        "$ref": "#/$defs/InfrastructureRetryInput"
        -      },
        -      "readiness": {
        -        "$ref": "#/$defs/ReadinessInput"
        -      },
        -      "type": {
        -        "const": "qa_gate",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "readiness",
        -      "infrastructure_retry",
        -      "type",
        -      "config"
        -    ],
        -    "title": "QaGateNodeInput",
        -    "type": "object"
        -  },
        -  "QaGraphRetryConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "max_retries": {
        -        "maximum": 20,
        -        "minimum": 1,
        -        "title": "Max Retries",
        -        "type": "integer"
        -      },
        -      "retry_from_node_id": {
        -        "format": "uuid",
        -        "title": "Retry From Node Id",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "retry_from_node_id",
        -      "max_retries"
        -    ],
        -    "title": "QaGraphRetryConfig",
        -    "type": "object"
        -  },
        -  "ReadinessInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "mode": {
        -        "enum": [
        -          "all_required",
        -          "all_terminal"
        -        ],
        -        "title": "Mode",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "mode"
        -    ],
        -    "title": "ReadinessInput",
        -    "type": "object"
        -  },
        -  "TriggerNodeConfig": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "settings": {
        -        "additionalProperties": true,
        -        "title": "Settings",
        -        "type": "object"
        -      },
        -      "source": {
        -        "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        -        "title": "Source",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "source",
        -      "settings"
        -    ],
        -    "title": "TriggerNodeConfig",
        -    "type": "object"
        -  },
        -  "TriggerNodeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "config": {
        -        "$ref": "#/$defs/TriggerNodeConfig"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "type": {
        -        "const": "trigger",
        -        "title": "Type",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "type",
        -      "config"
        -    ],
        -    "title": "TriggerNodeInput",
        -    "type": "object"
        -  },
        -  "WorkflowEdgeInput": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "binding": {
        -        "$ref": "#/$defs/EdgeBindingInput"
        -      },
        -      "id": {
        -        "format": "uuid",
        -        "title": "Id",
        -        "type": "string"
        -      },
        -      "source": {
        -        "$ref": "#/$defs/EdgeEndpointInput"
        -      },
        -      "target": {
        -        "$ref": "#/$defs/EdgeEndpointInput"
        -      }
        -    },
        -    "required": [
        -      "id",
        -      "source",
        -      "target",
        -      "binding"
        -    ],
        -    "title": "WorkflowEdgeInput",
        -    "type": "object"
        -  },
        -  "WorkflowFailurePolicy": {
        -    "enum": [
        -      "fail_fast",
        -      "continue_independent"
        -    ],
        -    "title": "WorkflowFailurePolicy",
        -    "type": "string"
        -  },
        -  "WorkflowVersionUpdate": {
        -    "additionalProperties": false,
        -    "properties": {
        -      "edges": {
        -        "default": null,
        -        "items": {
        -          "$ref": "#/$defs/WorkflowEdgeInput"
        -        },
        -        "minItems": 1,
        -        "title": "Edges",
        -        "type": "array"
        -      },
        -      "failure_policy": {
        -        "$ref": "#/$defs/WorkflowFailurePolicy",
        -        "default": null
        -      },
        -      "nodes": {
        -        "default": null,
        -        "items": {
        -          "discriminator": {
        -            "mapping": {
        -              "branch": "#/$defs/BranchNodeInput",
        -              "generate": "#/$defs/GenerateNodeInput",
        -              "input.ai_model": "#/$defs/AiModelInputNodeInput",
        -              "input.art_direction": "#/$defs/ArtDirectionInputNodeInput",
        -              "input.avatar": "#/$defs/AvatarInputNodeInput",
        -              "input.clothing": "#/$defs/ClothingInputNodeInput",
        -              "input.image": "#/$defs/ImageInputNodeInput",
        -              "input.location": "#/$defs/LocationInputNodeInput",
        -              "input.prompt": "#/$defs/PromptInputNodeInput",
        -              "notify": "#/$defs/NotifyNodeInput",
        -              "output": "#/$defs/OutputNodeInput",
        -              "qa_gate": "#/$defs/QaGateNodeInput",
        -              "trigger": "#/$defs/TriggerNodeInput"
        -            },
        -            "propertyName": "type"
        -          },
        -          "oneOf": [
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "settings": {
        -                      "additionalProperties": true,
        -                      "title": "Settings",
        -                      "type": "object"
        -                    },
        -                    "source": {
        -                      "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        -                      "title": "Source",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "source",
        -                    "settings"
        -                  ],
        -                  "title": "TriggerNodeConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "trigger",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "TriggerNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "model_slug": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Model Slug",
        -                          "type": "string"
        -                        },
        -                        "parameters": {
        -                          "additionalProperties": true,
        -                          "title": "Parameters",
        -                          "type": "object"
        -                        },
        -                        "variant": {
        -                          "enum": [
        -                            "generate",
        -                            "edit",
        -                            "text_to_image"
        -                          ],
        -                          "title": "Variant",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "variant",
        -                        "model_slug",
        -                        "parameters"
        -                      ],
        -                      "title": "GenerateNodeConfig",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "model_slug": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Model Slug",
        -                          "type": "string"
        -                        },
        -                        "parameters": {
        -                          "additionalProperties": true,
        -                          "title": "Parameters",
        -                          "type": "object"
        -                        },
        -                        "variant": {
        -                          "enum": [
        -                            "generate",
        -                            "edit",
        -                            "text_to_image",
        -                            "video"
        -                          ],
        -                          "title": "Variant",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "variant",
        -                        "model_slug",
        -                        "parameters"
        -                      ],
        -                      "title": "GenerateNodeConfigV1_2",
        -                      "type": "object"
        -                    }
        -                  ],
        -                  "title": "Config"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "generate",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "GenerateNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "max_content_retries": {
        -                          "maximum": 20,
        -                          "minimum": 0,
        -                          "title": "Max Content Retries",
        -                          "type": "integer"
        -                        },
        -                        "policy": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Policy",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "policy",
        -                        "max_content_retries"
        -                      ],
        -                      "title": "QaGateNodeConfig",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "graph_retry": {
        -                          "anyOf": [
        -                            {
        -                              "additionalProperties": false,
        -                              "properties": {
        -                                "max_retries": {
        -                                  "maximum": 20,
        -                                  "minimum": 1,
        -                                  "title": "Max Retries",
        -                                  "type": "integer"
        -                                },
        -                                "retry_from_node_id": {
        -                                  "format": "uuid",
        -                                  "title": "Retry From Node Id",
        -                                  "type": "string"
        -                                }
        -                              },
        -                              "required": [
        -                                "retry_from_node_id",
        -                                "max_retries"
        -                              ],
        -                              "title": "QaGraphRetryConfig",
        -                              "type": "object"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "default": null
        -                        },
        -                        "max_content_retries": {
        -                          "maximum": 20,
        -                          "minimum": 0,
        -                          "title": "Max Content Retries",
        -                          "type": "integer"
        -                        },
        -                        "policy": {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "title": "Policy",
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "policy",
        -                        "max_content_retries"
        -                      ],
        -                      "title": "QaGateNodeConfigV1_2",
        -                      "type": "object"
        -                    }
        -                  ],
        -                  "title": "Config"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "qa_gate",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "QaGateNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "cases": {
        -                      "additionalProperties": {
        -                        "enum": [
        -                          "accepted",
        -                          "rejected",
        -                          "error"
        -                        ],
        -                        "type": "string"
        -                      },
        -                      "minProperties": 1,
        -                      "propertyNames": {
        -                        "enum": [
        -                          "accepted",
        -                          "rejected",
        -                          "error"
        -                        ]
        -                      },
        -                      "title": "Cases",
        -                      "type": "object"
        -                    },
        -                    "condition_type": {
        -                      "const": "qa_decision",
        -                      "title": "Condition Type",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "condition_type",
        -                    "cases"
        -                  ],
        -                  "title": "BranchNodeConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "branch",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "BranchNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "anyOf": [
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "projection": {
        -                          "items": {
        -                            "enum": [
        -                              "artifacts",
        -                              "qa",
        -                              "billing",
        -                              "provenance"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          "minItems": 1,
        -                          "title": "Projection",
        -                          "type": "array"
        -                        }
        -                      },
        -                      "required": [
        -                        "projection"
        -                      ],
        -                      "title": "OutputNodeConfig",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "projection": {
        -                          "items": {
        -                            "enum": [
        -                              "artifacts",
        -                              "qa",
        -                              "billing",
        -                              "provenance"
        -                            ],
        -                            "type": "string"
        -                          },
        -                          "minItems": 1,
        -                          "title": "Projection",
        -                          "type": "array"
        -                        }
        -                      },
        -                      "title": "OutputNodeConfigV1_2",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "destinations": {
        -                          "items": {
        -                            "discriminator": {
        -                              "mapping": {
        -                                "tag": "#/$defs/DeliverTagDestination",
        -                                "webhook": "#/$defs/DeliverWebhookDestination"
        -                              },
        -                              "propertyName": "type"
        -                            },
        -                            "oneOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "tag_ids": {
        -                                    "items": {
        -                                      "type": "integer"
        -                                    },
        -                                    "maxItems": 50,
        -                                    "minItems": 1,
        -                                    "title": "Tag Ids",
        -                                    "type": "array"
        -                                  },
        -                                  "type": {
        -                                    "const": "tag",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "tag_ids"
        -                                ],
        -                                "title": "DeliverTagDestination",
        -                                "type": "object"
        -                              },
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "event_type": {
        -                                    "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                    "title": "Event Type",
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "webhook",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  },
        -                                  "webhook_id": {
        -                                    "format": "uuid",
        -                                    "title": "Webhook Id",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "webhook_id",
        -                                  "event_type"
        -                                ],
        -                                "title": "DeliverWebhookDestination",
        -                                "type": "object"
        -                              }
        -                            ],
        -                            "properties": {
        -                              "event_type": {
        -                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                "title": "Event Type",
        -                                "type": "string"
        -                              },
        -                              "tag_ids": {
        -                                "items": {
        -                                  "type": "integer"
        -                                },
        -                                "maxItems": 50,
        -                                "minItems": 1,
        -                                "title": "Tag Ids",
        -                                "type": "array"
        -                              },
        -                              "type": {
        -                                "enum": [
        -                                  "tag",
        -                                  "webhook"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              "webhook_id": {
        -                                "format": "uuid",
        -                                "title": "Webhook Id",
        -                                "type": "string"
        -                              }
        -                            },
        -                            "type": "object"
        -                          },
        -                          "maxItems": 20,
        -                          "title": "Destinations",
        -                          "type": "array"
        -                        },
        -                        "projection": {
        -                          "anyOf": [
        -                            {
        -                              "items": {
        -                                "enum": [
        -                                  "artifacts",
        -                                  "qa",
        -                                  "billing",
        -                                  "provenance"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              "type": "array"
        -                            },
        -                            {
        -                              "type": "null"
        -                            }
        -                          ],
        -                          "default": null,
        -                          "title": "Projection"
        -                        }
        -                      },
        -                      "title": "OutputNodeConfigV1_3",
        -                      "type": "object"
        -                    },
        -                    {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "destinations": {
        -                          "items": {
        -                            "discriminator": {
        -                              "mapping": {
        -                                "tag": "#/$defs/DeliverTagDestination",
        -                                "webhook": "#/$defs/DeliverWebhookDestination"
        -                              },
        -                              "propertyName": "type"
        -                            },
        -                            "oneOf": [
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "tag_ids": {
        -                                    "items": {
        -                                      "type": "integer"
        -                                    },
        -                                    "maxItems": 50,
        -                                    "minItems": 1,
        -                                    "title": "Tag Ids",
        -                                    "type": "array"
        -                                  },
        -                                  "type": {
        -                                    "const": "tag",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "tag_ids"
        -                                ],
        -                                "title": "DeliverTagDestination",
        -                                "type": "object"
        -                              },
        -                              {
        -                                "additionalProperties": false,
        -                                "properties": {
        -                                  "event_type": {
        -                                    "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                    "title": "Event Type",
        -                                    "type": "string"
        -                                  },
        -                                  "type": {
        -                                    "const": "webhook",
        -                                    "title": "Type",
        -                                    "type": "string"
        -                                  },
        -                                  "webhook_id": {
        -                                    "format": "uuid",
        -                                    "title": "Webhook Id",
        -                                    "type": "string"
        -                                  }
        -                                },
        -                                "required": [
        -                                  "type",
        -                                  "webhook_id",
        -                                  "event_type"
        -                                ],
        -                                "title": "DeliverWebhookDestination",
        -                                "type": "object"
        -                              }
        -                            ],
        -                            "properties": {
        -                              "event_type": {
        -                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                                "title": "Event Type",
        -                                "type": "string"
        -                              },
        -                              "tag_ids": {
        -                                "items": {
        -                                  "type": "integer"
        -                                },
        -                                "maxItems": 50,
        -                                "minItems": 1,
        -                                "title": "Tag Ids",
        -                                "type": "array"
        -                              },
        -                              "type": {
        -                                "enum": [
        -                                  "tag",
        -                                  "webhook"
        -                                ],
        -                                "type": "string"
        -                              },
        -                              "webhook_id": {
        -                                "format": "uuid",
        -                                "title": "Webhook Id",
        -                                "type": "string"
        -                              }
        -                            },
        -                            "type": "object"
        -                          },
        -                          "maxItems": 20,
        -                          "title": "Destinations",
        -                          "type": "array"
        -                        }
        -                      },
        -                      "title": "OutputNodeConfigV1_4",
        -                      "type": "object"
        -                    }
        -                  ],
        -                  "title": "Config"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "output",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "OutputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "event_type": {
        -                      "pattern": "^workflow\\.[a-z0-9_.-]+$",
        -                      "title": "Event Type",
        -                      "type": "string"
        -                    },
        -                    "webhook_id": {
        -                      "format": "uuid",
        -                      "title": "Webhook Id",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "webhook_id",
        -                    "event_type"
        -                  ],
        -                  "title": "NotifyNodeConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "infrastructure_retry": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "initial_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Initial Backoff Seconds",
        -                      "type": "integer"
        -                    },
        -                    "max_attempts": {
        -                      "maximum": 20,
        -                      "minimum": 1,
        -                      "title": "Max Attempts",
        -                      "type": "integer"
        -                    },
        -                    "max_backoff_seconds": {
        -                      "maximum": 86400,
        -                      "minimum": 0,
        -                      "title": "Max Backoff Seconds",
        -                      "type": "integer"
        -                    }
        -                  },
        -                  "required": [
        -                    "max_attempts",
        -                    "initial_backoff_seconds",
        -                    "max_backoff_seconds"
        -                  ],
        -                  "title": "InfrastructureRetryInput",
        -                  "type": "object"
        -                },
        -                "readiness": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "mode": {
        -                      "enum": [
        -                        "all_required",
        -                        "all_terminal"
        -                      ],
        -                      "title": "Mode",
        -                      "type": "string"
        -                    }
        -                  },
        -                  "required": [
        -                    "mode"
        -                  ],
        -                  "title": "ReadinessInput",
        -                  "type": "object"
        -                },
        -                "type": {
        -                  "const": "notify",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "readiness",
        -                "infrastructure_retry",
        -                "type",
        -                "config"
        -              ],
        -              "title": "NotifyNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "avatar_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Avatar Id"
        -                    }
        -                  },
        -                  "title": "AvatarInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.avatar",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "AvatarInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "clothing_item_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Clothing Item Id"
        -                    }
        -                  },
        -                  "title": "ClothingInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.clothing",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "ClothingInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "location_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Location Id"
        -                    }
        -                  },
        -                  "title": "LocationInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.location",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "LocationInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "art_direction_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Art Direction Id"
        -                    },
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    }
        -                  },
        -                  "title": "ArtDirectionInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.art_direction",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "ArtDirectionInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "text": {
        -                      "anyOf": [
        -                        {
        -                          "maxLength": 10000,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Text"
        -                    }
        -                  },
        -                  "title": "PromptInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.prompt",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "PromptInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "ask_at_run_time": {
        -                      "default": false,
        -                      "title": "Ask At Run Time",
        -                      "type": "boolean"
        -                    },
        -                    "generation_result_id": {
        -                      "anyOf": [
        -                        {
        -                          "minimum": 1,
        -                          "type": "integer"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Generation Result Id"
        -                    }
        -                  },
        -                  "title": "ImageInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.image",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "ImageInputNodeInput",
        -              "type": "object"
        -            },
        -            {
        -              "additionalProperties": false,
        -              "properties": {
        -                "config": {
        -                  "additionalProperties": false,
        -                  "properties": {
        -                    "model_slug": {
        -                      "anyOf": [
        -                        {
        -                          "maxLength": 100,
        -                          "minLength": 1,
        -                          "type": "string"
        -                        },
        -                        {
        -                          "type": "null"
        -                        }
        -                      ],
        -                      "default": null,
        -                      "title": "Model Slug"
        -                    }
        -                  },
        -                  "title": "AiModelInputConfig",
        -                  "type": "object"
        -                },
        -                "id": {
        -                  "format": "uuid",
        -                  "title": "Id",
        -                  "type": "string"
        -                },
        -                "type": {
        -                  "const": "input.ai_model",
        -                  "title": "Type",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "id",
        -                "type",
        -                "config"
        -              ],
        -              "title": "AiModelInputNodeInput",
        -              "type": "object"
        -            }
        -          ],
        -          "properties": {
        -            "config": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "settings": {
        -                  "additionalProperties": true,
        -                  "title": "Settings",
        -                  "type": "object"
        -                },
        -                "source": {
        -                  "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        -                  "title": "Source",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "source",
        -                "settings"
        -              ],
        -              "title": "TriggerNodeConfig",
        -              "type": "object"
        -            },
        -            "id": {
        -              "format": "uuid",
        -              "title": "Id",
        -              "type": "string"
        -            },
        -            "infrastructure_retry": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "initial_backoff_seconds": {
        -                  "maximum": 86400,
        -                  "minimum": 0,
        -                  "title": "Initial Backoff Seconds",
        -                  "type": "integer"
        -                },
        -                "max_attempts": {
        -                  "maximum": 20,
        -                  "minimum": 1,
        -                  "title": "Max Attempts",
        -                  "type": "integer"
        -                },
        -                "max_backoff_seconds": {
        -                  "maximum": 86400,
        -                  "minimum": 0,
        -                  "title": "Max Backoff Seconds",
        -                  "type": "integer"
        -                }
        -              },
        -              "required": [
        -                "max_attempts",
        -                "initial_backoff_seconds",
        -                "max_backoff_seconds"
        -              ],
        -              "title": "InfrastructureRetryInput",
        -              "type": "object"
        -            },
        -            "readiness": {
        -              "additionalProperties": false,
        -              "properties": {
        -                "mode": {
        -                  "enum": [
        -                    "all_required",
        -                    "all_terminal"
        -                  ],
        -                  "title": "Mode",
        -                  "type": "string"
        -                }
        -              },
        -              "required": [
        -                "mode"
        -              ],
        -              "title": "ReadinessInput",
        -              "type": "object"
        -            },
        -            "type": {
        -              "enum": [
        -                "trigger",
        -                "generate",
        -                "qa_gate",
        -                "branch",
        -                "output",
        -                "notify",
        -                "input.avatar",
        -                "input.clothing",
        -                "input.location",
        -                "input.art_direction",
        -                "input.prompt",
        -                "input.image",
        -                "input.ai_model"
        -              ],
        -              "type": "string"
        -            }
        -          },
        -          "type": "object"
        -        },
        -        "minItems": 2,
        -        "title": "Nodes",
        -        "type": "array"
        -      },
        -      "result_projection": {
        -        "default": null,
        -        "items": {
        -          "enum": [
        -            "artifacts",
        -            "qa",
        -            "billing",
        -            "provenance"
        -          ],
        -          "type": "string"
        -        },
        -        "minItems": 1,
        -        "title": "Result Projection",
        -        "type": "array"
        -      }
        -    },
        -    "title": "WorkflowVersionUpdate",
        -    "type": "object"
        -  }
        -}
      • removedInput schema / properties / update / $ref
        Removed value: -"#/$defs/WorkflowVersionUpdate"
      • addedInput schema / properties / update / additionalProperties
        Added value: +false
      • addedInput schema / properties / update / properties
        Added value: +{
        +  "edges": {
        +    "default": null,
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "binding": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "mode": {
        +              "enum": [
        +                "single",
        +                "collect"
        +              ],
        +              "type": "string"
        +            },
        +            "required": {
        +              "type": "boolean"
        +            },
        +            "role": {
        +              "anyOf": [
        +                {
        +                  "enum": [
        +                    "background",
        +                    "style"
        +                  ],
        +                  "type": "string"
        +                },
        +                {
        +                  "type": "null"
        +                }
        +              ],
        +              "default": null
        +            }
        +          },
        +          "required": [
        +            "mode",
        +            "required"
        +          ],
        +          "type": "object"
        +        },
        +        "id": {
        +          "format": "uuid",
        +          "type": "string"
        +        },
        +        "source": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "node_id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "port": {
        +              "maxLength": 100,
        +              "minLength": 1,
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "node_id",
        +            "port"
        +          ],
        +          "type": "object"
        +        },
        +        "target": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "node_id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "port": {
        +              "maxLength": 100,
        +              "minLength": 1,
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "node_id",
        +            "port"
        +          ],
        +          "type": "object"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "source",
        +        "target",
        +        "binding"
        +      ],
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "failure_policy": {
        +    "default": null,
        +    "enum": [
        +      "fail_fast",
        +      "continue_independent"
        +    ],
        +    "type": "string"
        +  },
        +  "nodes": {
        +    "default": null,
        +    "items": {
        +      "discriminator": {
        +        "propertyName": "type"
        +      },
        +      "oneOf": [
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "settings": {
        +                  "additionalProperties": true,
        +                  "type": "object"
        +                },
        +                "source": {
        +                  "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "source",
        +                "settings"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "trigger",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "model_slug": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "parameters": {
        +                      "additionalProperties": true,
        +                      "type": "object"
        +                    },
        +                    "variant": {
        +                      "enum": [
        +                        "generate",
        +                        "edit",
        +                        "text_to_image"
        +                      ],
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "variant",
        +                    "model_slug",
        +                    "parameters"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "model_slug": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    "parameters": {
        +                      "additionalProperties": true,
        +                      "type": "object"
        +                    },
        +                    "variant": {
        +                      "enum": [
        +                        "generate",
        +                        "edit",
        +                        "text_to_image",
        +                        "video"
        +                      ],
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "variant",
        +                    "model_slug",
        +                    "parameters"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "generate",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "max_content_retries": {
        +                      "maximum": 20,
        +                      "minimum": 0,
        +                      "type": "integer"
        +                    },
        +                    "policy": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "policy",
        +                    "max_content_retries"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "graph_retry": {
        +                      "anyOf": [
        +                        {
        +                          "additionalProperties": false,
        +                          "properties": {
        +                            "max_retries": {
        +                              "maximum": 20,
        +                              "minimum": 1,
        +                              "type": "integer"
        +                            },
        +                            "retry_from_node_id": {
        +                              "format": "uuid",
        +                              "type": "string"
        +                            }
        +                          },
        +                          "required": [
        +                            "retry_from_node_id",
        +                            "max_retries"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    },
        +                    "max_content_retries": {
        +                      "maximum": 20,
        +                      "minimum": 0,
        +                      "type": "integer"
        +                    },
        +                    "policy": {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "policy",
        +                    "max_content_retries"
        +                  ],
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "qa_gate",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "cases": {
        +                  "additionalProperties": {
        +                    "enum": [
        +                      "accepted",
        +                      "rejected",
        +                      "error"
        +                    ],
        +                    "type": "string"
        +                  },
        +                  "minProperties": 1,
        +                  "propertyNames": {
        +                    "enum": [
        +                      "accepted",
        +                      "rejected",
        +                      "error"
        +                    ]
        +                  },
        +                  "type": "object"
        +                },
        +                "condition_type": {
        +                  "const": "qa_decision",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "condition_type",
        +                "cases"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "branch",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "anyOf": [
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "projection": {
        +                      "items": {
        +                        "enum": [
        +                          "artifacts",
        +                          "qa",
        +                          "billing",
        +                          "provenance"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "minItems": 1,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "required": [
        +                    "projection"
        +                  ],
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "projection": {
        +                      "items": {
        +                        "enum": [
        +                          "artifacts",
        +                          "qa",
        +                          "billing",
        +                          "provenance"
        +                        ],
        +                        "type": "string"
        +                      },
        +                      "minItems": 1,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "destinations": {
        +                      "items": {
        +                        "discriminator": {
        +                          "propertyName": "type"
        +                        },
        +                        "oneOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "tag_ids": {
        +                                "items": {
        +                                  "type": "integer"
        +                                },
        +                                "maxItems": 50,
        +                                "minItems": 1,
        +                                "type": "array"
        +                              },
        +                              "type": {
        +                                "const": "tag",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "tag_ids"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "event_type": {
        +                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                                "type": "string"
        +                              },
        +                              "type": {
        +                                "const": "webhook",
        +                                "type": "string"
        +                              },
        +                              "webhook_id": {
        +                                "format": "uuid",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "webhook_id",
        +                              "event_type"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ],
        +                        "properties": {
        +                          "event_type": {
        +                            "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                            "type": "string"
        +                          },
        +                          "tag_ids": {
        +                            "items": {
        +                              "type": "integer"
        +                            },
        +                            "maxItems": 50,
        +                            "minItems": 1,
        +                            "type": "array"
        +                          },
        +                          "type": {
        +                            "enum": [
        +                              "tag",
        +                              "webhook"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "webhook_id": {
        +                            "format": "uuid",
        +                            "type": "string"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "maxItems": 20,
        +                      "type": "array"
        +                    },
        +                    "projection": {
        +                      "anyOf": [
        +                        {
        +                          "items": {
        +                            "enum": [
        +                              "artifacts",
        +                              "qa",
        +                              "billing",
        +                              "provenance"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "type": "array"
        +                        },
        +                        {
        +                          "type": "null"
        +                        }
        +                      ],
        +                      "default": null
        +                    }
        +                  },
        +                  "type": "object"
        +                },
        +                {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "destinations": {
        +                      "items": {
        +                        "discriminator": {
        +                          "propertyName": "type"
        +                        },
        +                        "oneOf": [
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "tag_ids": {
        +                                "items": {
        +                                  "type": "integer"
        +                                },
        +                                "maxItems": 50,
        +                                "minItems": 1,
        +                                "type": "array"
        +                              },
        +                              "type": {
        +                                "const": "tag",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "tag_ids"
        +                            ],
        +                            "type": "object"
        +                          },
        +                          {
        +                            "additionalProperties": false,
        +                            "properties": {
        +                              "event_type": {
        +                                "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                                "type": "string"
        +                              },
        +                              "type": {
        +                                "const": "webhook",
        +                                "type": "string"
        +                              },
        +                              "webhook_id": {
        +                                "format": "uuid",
        +                                "type": "string"
        +                              }
        +                            },
        +                            "required": [
        +                              "type",
        +                              "webhook_id",
        +                              "event_type"
        +                            ],
        +                            "type": "object"
        +                          }
        +                        ],
        +                        "properties": {
        +                          "event_type": {
        +                            "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                            "type": "string"
        +                          },
        +                          "tag_ids": {
        +                            "items": {
        +                              "type": "integer"
        +                            },
        +                            "maxItems": 50,
        +                            "minItems": 1,
        +                            "type": "array"
        +                          },
        +                          "type": {
        +                            "enum": [
        +                              "tag",
        +                              "webhook"
        +                            ],
        +                            "type": "string"
        +                          },
        +                          "webhook_id": {
        +                            "format": "uuid",
        +                            "type": "string"
        +                          }
        +                        },
        +                        "type": "object"
        +                      },
        +                      "maxItems": 20,
        +                      "type": "array"
        +                    }
        +                  },
        +                  "type": "object"
        +                }
        +              ]
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "output",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "event_type": {
        +                  "pattern": "^workflow\\.[a-z0-9_.-]+$",
        +                  "type": "string"
        +                },
        +                "webhook_id": {
        +                  "format": "uuid",
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "webhook_id",
        +                "event_type"
        +              ],
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "infrastructure_retry": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "initial_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                },
        +                "max_attempts": {
        +                  "maximum": 20,
        +                  "minimum": 1,
        +                  "type": "integer"
        +                },
        +                "max_backoff_seconds": {
        +                  "maximum": 86400,
        +                  "minimum": 0,
        +                  "type": "integer"
        +                }
        +              },
        +              "required": [
        +                "max_attempts",
        +                "initial_backoff_seconds",
        +                "max_backoff_seconds"
        +              ],
        +              "type": "object"
        +            },
        +            "readiness": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "mode": {
        +                  "enum": [
        +                    "all_required",
        +                    "all_terminal"
        +                  ],
        +                  "type": "string"
        +                }
        +              },
        +              "required": [
        +                "mode"
        +              ],
        +              "type": "object"
        +            },
        +            "type": {
        +              "const": "notify",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "readiness",
        +            "infrastructure_retry",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "avatar_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.avatar",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "clothing_item_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.clothing",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "location_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.location",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "art_direction_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                },
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.art_direction",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "text": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 10000,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.prompt",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "ask_at_run_time": {
        +                  "default": false,
        +                  "type": "boolean"
        +                },
        +                "generation_result_id": {
        +                  "anyOf": [
        +                    {
        +                      "minimum": 1,
        +                      "type": "integer"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.image",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        },
        +        {
        +          "additionalProperties": false,
        +          "properties": {
        +            "config": {
        +              "additionalProperties": false,
        +              "properties": {
        +                "model_slug": {
        +                  "anyOf": [
        +                    {
        +                      "maxLength": 100,
        +                      "minLength": 1,
        +                      "type": "string"
        +                    },
        +                    {
        +                      "type": "null"
        +                    }
        +                  ],
        +                  "default": null
        +                }
        +              },
        +              "type": "object"
        +            },
        +            "id": {
        +              "format": "uuid",
        +              "type": "string"
        +            },
        +            "type": {
        +              "const": "input.ai_model",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "id",
        +            "type",
        +            "config"
        +          ],
        +          "type": "object"
        +        }
        +      ],
        +      "properties": {
        +        "config": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "settings": {
        +              "additionalProperties": true,
        +              "type": "object"
        +            },
        +            "source": {
        +              "pattern": "^[a-z][a-z0-9_-]*(\\.[a-z][a-z0-9_-]*)+$",
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "source",
        +            "settings"
        +          ],
        +          "type": "object"
        +        },
        +        "id": {
        +          "format": "uuid",
        +          "type": "string"
        +        },
        +        "infrastructure_retry": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "initial_backoff_seconds": {
        +              "maximum": 86400,
        +              "minimum": 0,
        +              "type": "integer"
        +            },
        +            "max_attempts": {
        +              "maximum": 20,
        +              "minimum": 1,
        +              "type": "integer"
        +            },
        +            "max_backoff_seconds": {
        +              "maximum": 86400,
        +              "minimum": 0,
        +              "type": "integer"
        +            }
        +          },
        +          "required": [
        +            "max_attempts",
        +            "initial_backoff_seconds",
        +            "max_backoff_seconds"
        +          ],
        +          "type": "object"
        +        },
        +        "readiness": {
        +          "additionalProperties": false,
        +          "properties": {
        +            "mode": {
        +              "enum": [
        +                "all_required",
        +                "all_terminal"
        +              ],
        +              "type": "string"
        +            }
        +          },
        +          "required": [
        +            "mode"
        +          ],
        +          "type": "object"
        +        },
        +        "type": {
        +          "enum": [
        +            "trigger",
        +            "generate",
        +            "qa_gate",
        +            "branch",
        +            "output",
        +            "notify",
        +            "input.avatar",
        +            "input.clothing",
        +            "input.location",
        +            "input.art_direction",
        +            "input.prompt",
        +            "input.image",
        +            "input.ai_model"
        +          ],
        +          "type": "string"
        +        }
        +      },
        +      "type": "object"
        +    },
        +    "minItems": 2,
        +    "type": "array"
        +  },
        +  "result_projection": {
        +    "default": null,
        +    "items": {
        +      "enum": [
        +        "artifacts",
        +        "qa",
        +        "billing",
        +        "provenance"
        +      ],
        +      "type": "string"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • addedInput schema / properties / update / type
        Added value: +"object"
      • removedInput schema / properties / version_id / title
        Removed value: -"Version Id"
      • removedInput schema / properties / workflow_id / title
        Removed value: -"Workflow Id"
      • removedInput schema / title
        Removed value: -"UpdateWorkflowVersionInput"
  8. 77 tool updates
    • First observedarchive_production_workflow
    • First observedauthor_art_direction
    • First observedbuild_avatar_prompt
    • First observedconfirm_brief
    • First observedcreate_art_direction
    • First observedcreate_credit_checkout_session
    • First observedcreate_location
    • First observedcreate_outfit_from_garment_ids
    • First observedcreate_production_workflow
    • First observedcreate_production_workflow_version
    • First observedcreate_tag
    • First observeddelete_template
    • First observeddownload_generation_results
    • First observedduplicate_art_direction
    • First observedestimate_cost
    • First observedfinish_local_garment_upload
    • First observedgenerate_avatar
    • First observedget_art_direction
    • First observedget_art_direction_authoring_job
    • First observedget_brief
    • First observedget_garment
    • First observedget_generation_results
    • First observedget_generation_status
    • First observedget_items_by_tag
    • First observedget_location
    • First observedget_production_workflow
    • First observedget_production_workflow_control
    • First observedget_production_workflow_run
    • First observedget_production_workflow_version
    • First observedget_template
    • First observedget_user_credits
    • First observedlist_art_directions
    • First observedlist_avatars
    • First observedlist_garments
    • First observedlist_locations
    • First observedlist_models
    • First observedlist_outfits
    • First observedlist_production_workflow_runs
    • First observedlist_production_workflow_versions
    • First observedlist_production_workflows
    • First observedlist_tags
    • First observedlist_templates
    • First observedmcp_add_context
    • First observedmcp_clear_context
    • First observedmcp_create_credit_checkout_session
    • First observedmcp_export_montage
    • First observedmcp_generate_clip
    • First observedmcp_get_context
    • First observedmcp_list_files
    • First observedmcp_replace_context
    • First observedmcp_save_retouch
    • First observedprepare_local_garment_upload
    • First observedpropose_brief
    • First observedpropose_montage
    • First observedpropose_outfits
    • First observedpublish_production_workflow_version
    • First observedqueue_generation_result_qa
    • First observedread_generation_result_qa
    • First observedrequest_user_context
    • First observedsave_generated_avatar
    • First observedsave_reference_file_from_chat_file
    • First observedsave_template
    • First observedsearch_uwear_library
    • First observedstart_production_workflow_run
    • First observedstart_production_workflow_run_batch
    • First observedupdate_art_direction
    • First observedupdate_brief
    • First observedupdate_garment
    • First observedupdate_montage_proposal
    • First observedupdate_preferences
    • First observedupdate_production_workflow
    • First observedupdate_production_workflow_control
    • First observedupdate_production_workflow_version
    • First observedupload_avatar_from_chat_file
    • First observedupload_garment_from_chat_file
    • First observedupload_garment_from_public_url
    • First observedview_image

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources