Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Added "create_automation"; changed the definition of "confirm_brief", "propose_brief" and "update_brief" (73 tools before, 74 now)
⟨57 unchanged words⟩ the quote and wait for their yes. expected_brief_revision, runs and expected_total_credits must match the latest brief; ifthe quotethey changed, nothing runs and thenewcurrentquotebrief is returned. The same idempotency_key never runs or charges twice.
{"$defs":{"BriefRun":{"additionalProperties":false,"properties":{"automation":{"maxLength":300,"type":"string"},"looks":{"items":{"type":"string"},"maxItems":50,"type":"array"},"steps":{"items":{"type":"string"},"maxItems":100,"type":"array"}},"required":["automation","looks","steps"],"type":"object"}},"additionalProperties":false,"properties":{"board_id":{"description":"The open Shoot Board's ⟨26 unchanged words⟩ ,"type":"integer"},"expected_total_credits":{"default":null,"description":"Thequote'screditstotal_creditsthistheGenerateusercharges,saw.as get_brief returns them.","minimum":0,"type":"integer"} ⟨13 unchanged words⟩ 64,"minLength":1,"type":"string"},"runs":{"description":"What this Generate runs: each Automation, its looks and its steps, as get_brief returns them.","items":{"$ref":"#/$defs/BriefRun"},"maxItems":50,"minItems":1,"type":"array"}},"required":["brief_id","expected_brief_revision","idempotency_key","expected_total_credits","runs","board_id"],"type":"object"}
⟨10 unchanged words⟩ the looks to shoot, their direction andtheirtheshots.Automation they run through. The previous brief is kept (one that ⟨15 unchanged words⟩
⟨148 unchanged words⟩ a saved art direction, or both; neverneither\n(``NO_DIRECTION``)neither,so\nso every brief says what runs.","properties": ⟨74 unchanged words⟩ ":"string"}},"type":"object"},"RecipeSpec":{"additionalProperties":false,"description":"The recipe a demand asks for: its shots and their steps.","properties":{"aspect_ratio":{"default":null,"description":"Photo aspect ratio, e.g. \"3:4\".","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"image_model":{"default":null,"description":"A listed image model's slug, only when the user named it.","type":"string"},"name":{"description":"What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').","maxLength":80,"minLength":1,"type":"string"},"resolution":{"default":null,"description":"Photo resolution, e.g. \"2K\".","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"},"shots":{"description":"One shot per view, in order.","items":{"$ref":"#/$defs/ShotSpec"},"maxItems":8,"minItems":1,"type":"array"},"video_model":{"default":null,"description":"A listed video model's slug, only when the user named it.","type":"string"}},"required":["name","shots"],"type":"object"},"ShotSpec":{"
Use this when the user asks in chatSavestoachangerevisedtheversionboard'sof brief:its looks, Models, outfits, Locations, references, name, shots and steps, AI model or art direction. Send the complete replacement look list with thebrief_idit replaces, keeping each unchanged look's key. Shotsonorthestepsboard:recipe withthe complete newshotlook list (recipe_look_keys for someunchanged looksonly) or
Create Automation — Saves shots and steps as a new Automation in the user's Automations and returns its workflow_id; an identical saved one is returned instead (reused true). Nothing runs or is charged. Returns the problems to fix if any.
Changed the definition of "confirm_brief", "mcp_edit_brief", "propose_brief" and 1 more
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":false,"title":"Generate Brief"}
⟨324 unchanged words⟩ string"},"upscale_factor":{"anyOf":[{"exclusiveMinimum":0,"type":"integer"},{"exclusiveMinimum":0,"type":"number"}],"default":null," ⟨6 unchanged words⟩ 4: one of the upscale model's upscale_factors.","gt":0}},"required":["op"],"type" ⟨518 unchanged words⟩
Authorization not required, issuer https://api.uwear.ai
Changed the definition of "confirm_brief", "propose_brief" and "update_brief"
⟨23 unchanged words⟩ :"integer"},"expected_brief_revision":{"description":"brief.revision ofThetheboard'slatestbrief_revisionresultshownforwith thisbrief; any other runs nothing.brief.","minimum":0,"type":"integer"},"expected_total_credits":{"default":null,"description":"quote.total_credits of the latest result for this brief; any other total runs nothingTheandquote's
Added "list_automations" and "list_briefs"; changed the definition of "confirm_brief", "get_generation_results", "get_generation_status" and 6 more (71 tools before, 73 now)
Generates the photos and videos of brief brief_id. Spends credits:at the brief's quote. This client may show no approval prompt, so call it only when the user agreed in chat to run the briefat its credit quote.:Theirtheir message asking to generate or run it("run the same for these")is that agreement: state the quote in the same reply,then call. Otherwise give the quote and wait for their yes;a request to change the brief is notone. Pass brief.revision and brief.quote.total_creditsone;ofotherwise
Authorization not required, issuer https://api.uwear.ai
Added "set_garment_side"; changed the definition of "add_chat_photos_to_board", "confirm_brief", "get_brief" and 7 more (70 tools before, 71 now)
⟨141 unchanged words⟩ user and call again with the same files, kinds andkinds.sides. sides: {image_file_N: back} for a garment photo that plainly shows the garment's back (you can see it); left out, a photo is its garment's front.
⟨492 unchanged words⟩ "string"}},"type":"object"},"upload_handlessides":{"additionalProperties":false,"description":"OnlyGarmentthephotos
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Changed the definition of "mcp_edit_brief", "propose_brief" and "update_brief"
⟨23 unchanged words⟩ one left out: none; both left out:Uwear'snothingdefaultdirectslookthe shoot and Generate waits for\none, ``slots.UNDIRECTED``). Never changesan\nautomation.an automation.","properties":{"art_direction_id":{"default": ⟨621 unchanged words⟩
Added "add_chat_photos_to_board", "mcp_add_garment_view", "mcp_brief_list" and 33 more; removed "add_avatar_reference", "apply_backdrop", "author_art_direction" and 29 more; changed the definition of "confirm_brief", "get_brief", "get_generation_results" and 20 more (66 tools before, 70 now)
Approve and RunGenerate Brief
CallGeneratethisatoShootapproveBoardandbrief:idempotently
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Changed the definition of "propose_brief", "save_template" and "update_brief"
⟨944 unchanged words⟩ "minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.","minimum":1,"type":"integer"},"side":{"default":null,"enum":[" ⟨7 unchanged words⟩ ","generation_result","location","avatar","clothing_item","outfit"],"type":"string"},"uploaded_file_id": ⟨307 unchanged words⟩
⟨950 unchanged words⟩ "minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.","minimum":1,"type":"integer"},"
Authorization not required, issuer https://api.uwear.ai
Changed the definition of "list_garments", "search_uwear_library", "update_garment" and 1 more
List user's garments with structured filters or query for hybrid name/SKU/metadata/image-attribute search. body_zone expands to categories and is ORed with category when both are given. Garments may have no category. A category or body_zone filter excludes them unless include_uncategorized is true.⟨4 unchanged words⟩ schema for listing garments.","properties":{"body_zone":{"default":null,"description":"Filter to categories in any of these body zones; OR with category when both are given.","items":{"enum":["upper_body","lower_body","full_body","footwear","accessory","other"],"type":"string"},"type":"array"},"category":{"default":null,"description":"Filter to garments in any of these canonicalcategoriescategories; OR with body_zone when both are given.
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Authorization not required, issuer https://api.uwear.ai
Removed "create_credit_checkout_session" and "mcp_create_credit_checkout_session"; changed the definition of "add_avatar_reference", "apply_backdrop", "author_art_direction" and 14 more (68 tools before, 66 now)
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Add Avatar Reference"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Apply Backdrop"}
Authorization not required, issuer https://api.uwear.ai
Certificate recorded, valid to 2027-01-03
Authorization not required, issuer https://api.uwear.ai
First tool surface recorded: 68 tools (server version 1.0.0)
Showing the latest 29 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨148 unchanged words⟩ a saved art direction, or both; neverneither\n(``NO_DIRECTION``)neither,so\nso every brief says what runs.","properties": ⟨74 unchanged words⟩ ":"string"}},"type":"object"},"RecipeSpec":{"additionalProperties":false,"description":"The recipe a demand asks for: its shots and their steps.","properties":{"aspect_ratio":{"default":null,"description":"Photo aspect ratio, e.g. \"3:4\".","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"image_model":{"default":null,"description":"A listed image model's slug, only when the user named it.","type":"string"},"name":{"description":"What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').","maxLength":80,"minLength":1,"type":"string"},"resolution":{"default":null,"description":"Photo resolution, e.g. \"2K\".","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"},"shots":{"description":"One shot per view, in order.","items":{"$ref":"#/$defs/ShotSpec"},"maxItems":8,"minItems":1,"type":"array"},"video_model":{"default":null,"description":"A listed video model's slug, only when the user named it.","type":"string"}},"required":["name","shots"],"type":"object"},"ShotSpec":{"additionalProperties":false,"description":"One photo of each look, from one camera.","properties":{"camera":{"description":"The view, from the camera list.","enum":["auto","full_body_front","full_body_back","full_body_side","upper_body_front","upper_body_back","upper_body_side","lower_body_front","lower_body_back","lower_body_side","clothing_detail_front","clothing_detail_back","clothing_detail_side"],"type":"string"},"then":{"description":"Steps on this shot's photo, in order (a video ends the chain).","items":{"$ref":"#/$defs/StepSpec"},"maxItems":4,"type":"array"}},"required":["camera"],"type":"object"},"StepSpec":{"additionalProperties":false,"description":"One step on a shot's photo (or on the step before it).","properties":{"camera_edit_id":{"default":null,"description":"camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.","type":"string"},"factor":{"default":null,"description":"upscale only: the upscale factor, e.g. 2.","exclusiveMinimum":0,"type":"number"},"kind":{"description":"camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.","enum":["camera_edit","edit","upscale","video","remove_background"],"type":"string"},"length_seconds":{"default":null,"description":"video only: the video length in seconds.","minimum":1,"type":"integer"},"prompt":{"default":null,"description":"edit: the change; video: the motion (optional).","maxLength":1000,"type":"string"},"sound":{"default":null,"description":"video only: whether the video has sound.","type":"boolean"}},"required":["kind"],"type":"object"}},"additionalProperties":false,"properties":{"board_id":{"description":"The open Shoot Board's ⟨83 unchanged words⟩ "image_model":{"default":null,"description":"A listed image model's slug the user asked for (\"use GPT Image\"): theThe shoot'sAIimage model, every shot and edit of every look runs on it; the automation is:unchanged.aNotslugwithfromrecipebrief_inputs.ai_models (name it inomit:recipe.image_modelkept).","type":"string"},"looks" ⟨21 unchanged words⟩ "minItems":1,"type":"array"},"recipe":{"$ref":"#/$defs/RecipeSpec","default":null,"description":"The complete new shots and steps, built as a new automation for the looks below (e.g. the old shots plus a side view). Not with recipe_workflow_id."},"recipe_look_keys":{"default":null,"description":"The looks (keys you send) that move torecipe /recipe_workflow_id; omit for every look.","items":{ ⟨11 unchanged words⟩ "recipe_workflow_id":{"default":null,"description":"AnTheautomationAutomationfromtheread_shoot_board'slooksbrief_inputs.automationsbelowformovetheto,looksrunbelow.asNotitwithisrecipe.saved: a workflow_id from brief_inputs.automations or create_automation.","pattern":"^[0-9a-fA-F]{8}-[ ⟨36 unchanged words⟩ "video_model":{"default":null,"description":"AThelistedshoot's videomodel's slug the user asked formodel:the shoot's videos run on it.aNotslugwithfromrecipebrief_inputs.ai_models (name it inomit:recipe.video_modelkept).","type":"string"}},"required ⟨5 unchanged words⟩
Saves a new briefon the board, inandplaceshowsofititsoncurrenttheoneboard: the looks to shoot, their direction and their shots. The previous brief is kept (one that ran stays in Brief History). Returns the saved brief, or the problems to fix.
⟨126 unchanged words⟩ "array"}},"type":"object"},"OutputInput":{"additionalProperties":false,"description":"This brief's output; a field left out is kept, null follows the board's default again.","properties":{"aspect_ratio":{"default":null,"description":"Photo aspect ratio, e.g. \"3:4\".","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"duration":{"default":null,"description":"Video length in seconds.","minimum":1,"type":"integer"},"generate_audio":{"default":null,"description":"Whether videos have sound.","type":"boolean"},"resolution":{"default":null,"description":"Photo resolution, e.g. \"2K\".","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"},"upscale_factor":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":null,"description":"Upscale factor, e.g. 2.","gt":0}},"type":"object"},"ProposedDirection":{"additionalProperties":false,"anyOf":[{ ⟨15 unchanged words⟩ a saved art direction, or both; neverneither.neither\n(``NO_DIRECTION``), so every brief says what runs.","properties":{"art_direction_id":{"default": ⟨19 unchanged words⟩ "prompt":{"default":null,"description":"TheYourdirectionwordsinforwordsthis shoot, inEnglish.English,Optional1-3 sentences. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look. Not needed with an art_direction_id.","maxLength":2000,"type" ⟨14 unchanged words⟩ shots and their steps.","properties":{"aspect_ratio":{"default":null,"description":"Photo aspect ratio, e.g. \"3:4\".","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"image_model":{"default":null,"description":"A ⟨41 unchanged words⟩ "minLength":1,"type":"string"},"resolution":{"default":null,"description":"Photo resolution, e.g. \"2K\".","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"},"shots":{"description":"One shot per view ⟨134 unchanged words⟩ clothing_detail_back, clothing_detail_side.","type":"string"},"factor":{"default":null,"description":"upscale only: the upscale factor, e.g. 2.","exclusiveMinimum":0,"type":"number"},"kind":{"description":"camera_edit: the same ⟨37 unchanged words⟩ ,"remove_background"],"type":"string"},"length_seconds":{"default":null,"description":"video only: the video length in seconds.","minimum":1,"type":"integer"},"prompt":{"default":null,"description":"edit ⟨7 unchanged words⟩ ","maxLength":1000,"type":"string"},"sound":{"default":null,"description":"video only: whether the video has sound.","type":"boolean"}},"required":["kind"],"type":" ⟨21 unchanged words⟩ ":{"$ref":"#/$defs/ProposedDirection","description":"TheRequired:brief'swhatdirectionevery shot of every look follows, exactly what Generate runs: prompt, art_direction_id (a saved art direction), or both."},"image_model":{"default":null,"description":"Thebrief'sWriteimageonemodeldirection(aforslugevery look frombrief_inputs.ai_modelswhat the user wants (setting, light, mood, poses, purpose).NotNeverwithnamerecipe."a garment,"type"model, location or look:"stringthe same words run on every look."},"looks":{"description":"The looks ⟨18 unchanged words⟩ "minItems":1,"type":"array"},"output":{"$ref":"#/$defs/OutputInput","default":null,"description":"This brief's output settings; a field left out keeps the brief's."},"recipe":{"$ref":"#/$defs/RecipeSpec","default": ⟨25 unchanged words⟩ ":{"default":null,"description":"AnAutomationautomationforfromtheread_shoot_board'slooksbrief_inputs.automations that every look runs through as is (aonlyworkflow_idwhenfromitbrief_inputs.automationsmatches what the user asked for). Not with recipe. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it.","pattern":"^[0-9a-fA-F]{8}-[ ⟨25 unchanged words⟩ words; otherwise leave it out.","maxLength":80,"type":"string"},"video_model":{"default":null,"description":"The brief's video model (a slug from brief_inputs.ai_models). Not with recipe.","type":"string"}},"required":[ ⟨5 unchanged words⟩
SavesUseathisrevisedwhenversiontheofuser asks in chat to change the board's brief:brief_iditsonlooks, Models, outfits, Locations, references, name, shots and steps, AI model or art direction. Send theboardcomplete replacement look list with the brief_id it replaces, keeping each unchanged look's key. Shots or steps: recipe with the complete newlookshot list (unchangedrecipe_look_keyslooksforkeepsometheirlookskeyonly)andor recipe_workflow_id. AI model only:theimage_modelfields/thatvideo_model.change.ArtReturnsdirection only: art_direction_id. Saves the revised brief,oron the board; nothing runs. If the result lists problems,tofixfix.them all and call again; on revision_conflict,meansread theboard's briefboardchangedandsincereviseyouitsreadcurrentit.brief.
⟨126 unchanged words⟩ "array"}},"type":"object"},"OutputInput":{"additionalProperties":false,"description":"This brief's output; a field left out is kept, null follows the board's default again.","properties":{"aspect_ratio":{"default":null,"description":"Photo aspect ratio, e.g. \"3:4\".","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"duration":{"default":null,"description":"Video length in seconds.","minimum":1,"type":"integer"},"generate_audio":{"default":null,"description":"Whether videos have sound.","type":"boolean"},"resolution":{"default":null,"description":"Photo resolution, e.g. \"2K\".","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"},"upscale_factor":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":null,"description":"Upscale factor, e.g. 2.","gt":0}},"type":"object"},"ProposedDirection":{"additionalProperties":false,"anyOf":[{ ⟨15 unchanged words⟩ a saved art direction, or both; neverneither.neither\n(``NO_DIRECTION``), so every brief says what runs.","properties":{"art_direction_id":{"default": ⟨19 unchanged words⟩ "prompt":{"default":null,"description":"TheYourdirectionwordsinforwordsthis shoot, inEnglish.English,Optional1-3 sentences. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look. Not needed
⟨10 unchanged words⟩ its current one: the looks to shoot,thetheir directionevery shot followsandthe Automation every look runs through. Nothing runs or istheircharged.shots. Returns thebrief with its creditsavedquotebrief, or the problems to fix.
⟨19 unchanged words⟩ key) and only the fields that change.Nothing runs or is charged.Returns the revised briefwith its credit quote, or the problems to fix. revision_conflict means ⟨8 unchanged words⟩
⟨23 unchanged words⟩ :"integer"},"expected_brief_revision":{"description":"Thebrief.revisionboard'sofbrief_revisiontheshownlatestwithresult for thisbrief.brief; any other runs nothing.","minimum":0,"type":"integer"},"expected_total_credits":{"default":null,"description":"Thequote.total_creditsquote'softotal_creditsthe latest result for this brief; any other total runs nothing and returns theusernewsaw.quote.","minimum":0,"type":"integer"},"idempotency_key":{"description":"Retry key for one Generate, brief-{brief_id}-r{revision}: the same key never runs or charges ⟨14 unchanged words⟩
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Generate Brief"}
{"additionalProperties":false,"description":"Input schema for listing generation results." ⟨338 unchanged words⟩
{"additionalProperties":false,"description":"Input schema for checking generation status." ⟨53 unchanged words⟩
⟨15 unchanged words⟩ look's run of brief_id with its status,error,creditsand, results (generation_result_id, kind, url) bystep.step and the error of every step that failed (failures lists them all). Read it again until done is true; while ⟨17 unchanged words⟩
⟨171 unchanged words⟩ the board's default (the user's\npreferences) again. Every step it is for (a Shoot, a Video, an Upscale) runs and is priced on it.","properties" ⟨34 unchanged words⟩ 2})?$","type":"string"},"duration":{"default":null,"description":"Video steps only: the clip's length in seconds, one of the video model's durations (a longer one costs more).","minimum":1,"type":"integer"},"generate_audio":{"default":null,"description":"Video steps only: true for a clip with sound (only a video model that supports audio), false for a silent one.","type":"boolean"},"op":{"const":"brief.output","type": ⟨28 unchanged words⟩ ,2}(\\.\\d)?K$","type":"string"},"upscale_factor":{"anyOf":[{"type":"integer"},{"type":"number"}],"default":null,"description":"Upscale steps only: e.g. 2, 4: one of the upscale model's upscale_factors.","gt":0}},"required":["op"],"type" ⟨518 unchanged words⟩
Use this when the user describes a shoot.Saves abrief, the looks to shoot and the automation they run through, and linksnewitbrieftoon the board, in place oftheits currentone. Nothing runs or is chargedone:showtheuser thelooksand the credit quote; confirm_brief runs it when they ask.toReadshoot, theboarddirectionfirsteverywithshotread_shoot_boardfollows andfollow brief_inputs.guide. Iftheresult lists problems, fix them all andAutomationcalleveryagain.look"Runrunsthethrough.same"Nothingforrunsotherorclothing:ispasscharged.from_brief_idReturns(the briefthatwithran)itsandcredit quote, or thenewproblemslookstoonly.fix.
⟨149 unchanged words⟩ "aspect_ratio":{"default":null,"description":"e.g.Photo\"3:4\",aspect\"1:1\"ratio, e.g. \"93:16\4\": one of the shoot image model's aspect_ratios..","pattern":"^\\d{1,2}(\\.\\d{ ⟨8 unchanged words⟩ 2})?$","type":"string"},"resolutionduration":{"default":null,"description":"e.g.Video\length in seconds."1K\,"minimum":1,\"2K\type":"integer"}
⟨58 unchanged words⟩ , then call read_generation_result_qa for the same IDs.Queued or requeuedQAcosts 1 credit per generation result; already-completed QA rows are not chargedisagain.free. QA is built for scale — validating large ⟨42 unchanged words⟩
⟨12 unchanged words⟩ {"description":"Generation result IDs to QA.Queued or requeuedQAcosts 1 credit perisresult.free.","items":{"type":"integer"}, ⟨33 unchanged words⟩
⟨95 unchanged words⟩ has a brief, apply it with update_briefart_direction_id.direction.art_direction_id. If the result lists problems, fix them all and call again.
Use this when the user asks in chatSavestoachangerevisedtheversionboard'sof brief:its looks, Models, outfits, Locations, references, name, shots and steps, AI model or art direction. Send the complete replacement look list with thebrief_idit replaces, keeping each unchanged look's key. Shotsonorthestepsboard:recipe withthe complete newshotlook list (recipe_look_keysunchangedforlookssomekeeplookstheironlykey)or recipe_workflow_id.andAIonlymodeltheonly:fieldsimage_modelthat/change.video_model.NothingArtrunsdirectionoronly:isart_direction_id.charged.SavesReturns the revised briefon the board; nothing runswith(confirm_briefitsrunscreditit).quote,Ifor theresult listsproblems,fix them all and call again;toonfix. revision_conflict,readmeans theboardboard'sandbriefrevisechangeditssincecurrentyoubrief.read it.
⟨149 unchanged words⟩ "aspect_ratio":{"default":null,"description":"e.g.Photo\"3:4\",aspect\"1:1\"ratio, e.g. \"93:16\4\": one of the shoot image model's aspect_ratios..","pattern":"^\\d{1,2}(\\.\\d{ ⟨8 unchanged words⟩ 2})?$","type":"string"},"resolutionduration":{"default":null,"description":"e.g.Video\length in seconds."1K\,"minimum":1,\"2K\type":"integer"}
Automations — Lists the user's Automations, most recently used first, one row each. 10 per page (limit up to 25; cursor: next_cursor for more). Changes nothing.
Brief History — Use this to find a past shoot when the user refers to one ("run the same as last week") or asks what ran: the account's briefs, newest first, 10 by default (limit up to 25; before: next_before for older ones; status ran for generated ones only; automation_workflow_id for the runs of one Automation). Each compact row has its brief_id, title, status, ran_at, automations, direction label, image model, output, look count and credits. Then read the one you need with get_brief for its full values. Changes nothing.
GenerateSpendsacredits:ShootcallBoardit only when the user agreed in chat to run the brief:publishesat itsautomationcreditdrafts,quote.thenTheirstartsmessageoneaskingworkflowto generate or runperitlook,("runchargedthepersamerun.forSpendsthese")creditsis that agreement:callstateittheonlyquoteafterin theusersamehasreply,seenthenthecall.brief'sOtherwiselooksgive the quote andcreditwaitquotefor(get_brief)theirandyes;agreedainrequestchat.toPasschange theboard'sbriefbrief_revisionis(read_shoot_board)not one. Pass brief.revision and brief.quote.total_credits of your last propose_brief, update_brief or get_brief result as expected_brief_revision and expected_total_credits, and idempotency_key brief-{brief_id}-r{revision} (afreshretryidempotency_key;with the sameidempotency_keykey neverpublishes,runs or chargestwice.twice).FollowOn quote_changed, tell therunsuser the new quote and wait for their yes. Then follow it with mcp_brief_runs.
⟨52 unchanged words⟩ :{"description":"Retry key for one Generatetap: the same key never runs or charges twice.","maxLength": ⟨12 unchanged words⟩
ReadUseonethisofwhentheyouaccount'sneed a Shoot Boardbriefsbrief by brief_id: its looks, automations, credit quote (quote.total_credits), status andstatus.revision.ChangesShows it on the board; spends nothing.
Get GenerationShow Results
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.UseTheythisaretodisplayshowpreviews,resultsnotinoriginalschat:url/download_url are originals, preview_url is the fallback link, and poster_url/thumbnail_url is a video poster. Every result includesgeneration_result_idand 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=[...],fromexecute_immediately=truemcp_brief_runs)when the user asked toforrunonenowresult,update_briefgeneration_id for acomplete commandjob'sreplacementresults, orconfirm_brief(execute=true) for a visible brief. Pass generation_result_id to fetch onequery,resultfiltersorandgeneration_iddates tolist a job's results. Defaults tofindcompactpastresultones.metadata.ReturnsSetimageinclude_snapshot=truepreviews torecover fullshowsettings,asresourcetheysnapshotsareand(neverpriorMarkdown-embedprompts.resultUseURLs);start_date/end_dateurlforisrequeststhelikeoriginal.'lastChangesweek'.nothing.
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"Get GenerationShow Results"}
GetGeneration Status
Check generation job status. Completed results may include labeled native ImageContent previews; use them directly and never Markdown-embedUseresultthisURLs.toTheycheckareonedisplaygenerationpreviews,jobnotbyoriginalsgeneration_id:url/download_url are originals, preview_url is the fallback link, and poster_url/thumbnail_url is a video poster. Returns compactits status,parent/child generation IDs, camera, avatar_id, model_id, model_slug,creditsuse_caseand,net credits_charged,whencredits_refunded,itestimated_processing_secondsfailed,and status_guidance. Failed jobs also returna safeerror_message and error_type (user, transient, or provider). Set include_snapshot=true to recover full settings, resource snapshots and prior prompts. Status can remain Created while queued/preparing; avoid tight polling loops.error_message.UIA'Geminibrief'sPro'runsmapsaretoreadmodel_slugwithnano-banana-promcp_brief_runs.orChangesnano_banana_pro_clothing.nothing.
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"GetGeneration Status"}
Follow Brief RunsEveryUse this after confirm_brief or when the user asks how a shoot is going: each look's run ofabrief_idgeneratingwithbriefits status, error, credits and results (brief_id)generation_result_id,orkind,runsurl) byidstep.(workflow_run_idsRead it again until done is true; while it runs,eachsaywithso (thelook itsboardcardsshowsheldprogress):.status,Then show the resultsbywithstep,get_generation_results.credits.Changes nothing.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Follow Brief Runs"}
⟨116 unchanged words⟩ 0-9a-fA-F]{64}$","type":"string"},"side":{"description":"A new garment only: the side its photo shows (default front; back: it is also its back photo)","enum":["front","back"],"type":"string"}},"required":["image_url","kind"," ⟨15 unchanged words⟩
⟨152 unchanged words⟩ ["op"],"type":"object"},"BriefOutputSet":{"additionalProperties":false,"description":"Set this brief's output: a field left out is kept, null follows the board's default (the user's\npreferences) again. Every Shoot runs and is priced on it.","properties":{"aspect_ratio":{"default":null,"description":"e.g. \"3:4\", \"1:1\", \"9:16\": one of the shoot image model's aspect_ratios.","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"op":{"const":"brief.output","type":"string"},"resolution":{"default":null,"description":"e.g. \"1K\", \"2K\", \"4K\": one of the shoot image model's resolutions (a higher one costs more).","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"}},"required":["op"],"type":"object"},"BriefRefresh":{"additionalProperties":false,"description":"Re-pin ⟨458 unchanged words⟩ brief.discard":"#/$defs/BriefDiscard","brief.models":"#/$defs/BriefModelsSet","brief.output":"#/$defs/BriefOutputSet","brief.refresh":"#/$defs/BriefRefresh","brief.restore":"#/$defs/BriefRestore"," ⟨19 unchanged words⟩ "$ref":"#/$defs/BriefDirectionSet"},{"$ref":"#/$defs/BriefModelsSet"},{"$ref":"#/$defs/BriefOutputSet"},{"$ref":"#/$defs/BriefRefresh"},{"$ref ⟨16 unchanged words⟩
⟨38 unchanged words⟩ show the user the looks and the creditquote (get_brief), and generate withquote; confirm_briefonlyrunsafterit when theyagree.ask. Read the board first with read_shoot_board and follow ⟨4 unchanged words⟩ lists problems, fix them all and call again. "Run the same" for other clothing: pass from_brief_id (the brief that ran) and the new looks only.
⟨126 unchanged words⟩ "array"}},"type":"object"},"OutputInput":{"additionalProperties":false,"description":"This brief's output; a field left out is kept, null follows the board's default again.","properties":{"aspect_ratio":{"default":null,"description":"e.g. \"3:4\", \"1:1\", \"9:16\": one of the shoot image model's aspect_ratios.","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"resolution":{"default":null,"description":"e.g. \"1K\", \"2K\", \"4K\": one of the shoot image model's resolutions (a higher one costs more).","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"}},"type":"object"},"ProposedDirection":{"additionalProperties":false,"anyOf":[{ ⟨402 unchanged words⟩ },"direction":{"$ref":"#/$defs/ProposedDirection","default":null,"description":"Required unless from_brief_id: what every shot of every look follows, ⟨38 unchanged words⟩ same words run on every look."},"from_brief_id":{"default":null,"description":"\"The same\" on other clothing: a brief_id that ran. The new brief keeps its automations as they are now, its direction, AI model and output (leave out direction, recipe and recipe_workflow_id); a model_id, location_id or reference_ids left out or empty is that brief's looks' in turn. If the user asked to run it, call confirm_brief in the same turn; otherwise do not.","minimum":1,"type":"integer"},"looks":{"description":"The looks to shoot ⟨16 unchanged words⟩ "minItems":1,"type":"array"},"output":{"$ref":"#/$defs/OutputInput","default":null,"description":"The shoot's aspect ratio and resolution, only when the user asked for them; omit to keep the brief's (the user's preferences by default). The brief's output is what runs and is priced; a value the image model does not offer runs at the nearest one it does."},"recipe":{"$ref":"#/$defs/RecipeSpec","default": ⟨101 unchanged words⟩ type":"string"}},"required":["looks","direction","board_id"],"type":"object"}
⟨71 unchanged words⟩ Saves the revised brief on the board; nothingruns.runs (confirm_brief runs it). If the result lists problems, fix them ⟨14 unchanged words⟩
⟨126 unchanged words⟩ "array"}},"type":"object"},"OutputInput":{"additionalProperties":false,"description":"This brief's output; a field left out is kept, null follows the board's default again.","properties":{"aspect_ratio":{"default":null,"description":"e.g. \"3:4\", \"1:1\", \"9:16\": one of the shoot image model's aspect_ratios.","pattern":"^\\d{1,2}(\\.\\d{1,2})?:\\d{1,2}(\\.\\d{1,2})?$","type":"string"},"resolution":{"default":null,"description":"e.g. \"1K\", \"2K\", \"4K\": one of the shoot image model's resolutions (a higher one costs more).","pattern":"^\\d{1,2}(\\.\\d)?K$","type":"string"}},"type":"object"},"ProposedDirection":{"additionalProperties":false,"anyOf":[{ ⟨541 unchanged words⟩ ":50,"minItems":1,"type":"array"},"output":{"$ref":"#/$defs/OutputInput","default":null,"description":"The shoot's aspect ratio and resolution, only when the user asked for them; omit to keep the brief's (the user's preferences by default). The brief's output is what runs and is priced; a value the image model does not offer runs at the nearest one it does."},"recipe":{"$ref":"#/$defs/RecipeSpec", ⟨153 unchanged words⟩
Set Garment Side — Use this when a garment's photo shows its back but Uwear has it as the front (or the other way round): you saw the photo in this chat, or the user says so. side back makes the photo the garment's back, so back shots run from it; front undoes that. Call it yourself and continue (confirm_brief if the user asked to run): never ask the user to relabel a photo on the board. The board's brief is saved again with its new quote. Deletes nothing.
⟨126 unchanged words⟩ "array"}},"type":"object"},"ProposedDirection":{"additionalProperties":false,"anyOf":[{"required":["prompt"]},{"required":["art_direction_id"]}],"description":"The shoot's Direction as the host writes it: its words, a saved art direction, or both; never neither\n(``NO_DIRECTION``), so every brief says what runs.","properties":{"art_direction_id":{"default":null,"description":"A saved art direction (a library id, or the id save_art_direction returns).","minimum":1,"type":"integer"},"prompt":{"default":null,"description":"Your words for this shoot, in English, 1-3 sentences. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look. Not needed with an art_direction_id.","maxLength":2000,"type":"string"}},"type":"object"},"RecipeSpec":{"additionalProperties":false,"description":"The ⟨270 unchanged words⟩ "}},"additionalProperties":false,"properties":{"art_direction_id":{"default":null,"description":"A new art direction for the whole shoot (omit: kept). Changing it never changes the automation. For a new look and feel, call save_art_direction first and pass its id.","minimum":1,"type":"integer"},"board_id":{"description":"The open Shoot Board's ⟨20 unchanged words⟩ read_shoot_board.","minimum":1,"type":"integer"},"direction":{"$ref":"#/$defs/ProposedDirection","default":null,"description":"A new Direction for the whole shoot, replacing the brief's (omit: kept): prompt, art_direction_id (a saved art direction), or both. Write one direction for every look from what the user wants (setting, light, mood, poses, purpose). Never name a garment, model, location or look: the same words run on every look."},"image_model":{"default":null,"description ⟨223 unchanged words⟩
{"additionalProperties":false,"properties":{"board_id":{"description":"ConfirmTheandopenoptionallyShootexecuteBoard'sanboard_id,immutablefromcanonical-commandOpenbrief.Shoot Board or your context.","propertiestype":{"string"},"brief_id":{"minimum":1,"type":"integer"},"expected_brief_revision":{"description":"IDTheofboard'sthebrief_revisionpersistedshownbriefwithtothisconfirmbrief.","exclusiveMinimumminimum":0,"type":"integer"},"executeexpected_total_credits":{"default":truenull,"description":"Execute the brief immediately after confirming. Defaults true becauseTheMCPquote's'confirmtotal_credits thebrief' means approve and run. Set false onlyuserwhensaw.","minimum":0,"type":"integer"},"idempotency_key":{"description":"RetrythekeyuserforexplicitlyonewantsGeneratetotap:saveneverapprovalrunswithoutorstartingchargesgeneration.twice.","maxLength":64,"minLength":1,"type":"booleanstring"}},"required":["brief_id","expected_brief_revision","idempotency_key","board_id"],"type":"object"}
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":false,"title":"Approve and RunGenerate Brief"}
Reopen SavedRead Brief
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 newReadphotoshoot.oneWhenof theuseraccount'sasksShoottoBoardmodify,briefsrewrite,byaddbrief_id:stepsitstolooks,or show an adjusted briefautomations,call update_brief with the complete updated briefcreditinsteadquoteofandloopingstatus.onChangesget_brief.nothing.
{"descriptionadditionalProperties":"Input schema for loading a persisted brief for UI rehydration."false,"properties":{"brief_idboard_id":{"description":"Real persisted brief ID to load unchanged. Do notTheuseopen0,ShootguessedBoard'sIDsboard_id,or thisfromtoolOpenforShooteditingBoardaorvisibleyourbrief.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":truefalse,"title":"Reopen SavedRead Brief"}
⟨105 unchanged words⟩ result or generation_id to list a job's results.ReturnsDefaultsrawtopayloadcompactwhenresultavailablemetadata.soSetpriorinclude_snapshot=truepromptstocanrecoverbefullrecovered.settings, resource snapshots and prior prompts. Use start_date/end_date for requests like 'last week'.
⟨152 unchanged words⟩ result directly.","type":"integer"},"include_snapshot":{"default":false,"description":"Include full generation settings, resource snapshots and raw prompt payloads. Large; use only for prompt recovery.","type":"boolean"},"kind":{"default":null,"description":"Filter ⟨162 unchanged words⟩
⟨34 unchanged words⟩ , and poster_url/thumbnail_url is a video poster. Returns compact status,rawparent/childpayloadgeneration IDs,settingscamera, avatar_id, model_id, model_slug, use_case, net ⟨12 unchanged words⟩ and error_type (user, transient, or provider). Set include_snapshot=true to recover full settings, resource snapshots and prior prompts. Status can remain Created while queued/preparing; avoid tight ⟨11 unchanged words⟩
⟨9 unchanged words⟩ description":"The generation ID to check. Returnsraw payload,compactgeneration_settingstatus, avatar_id, model_id, model_slug, and use_case. UI 'Gemini Pro' maps to model_slug nano-banana-pro or nano_banana_pro_clothing.","type":"integer"},"include_snapshot":{"default":false,"description":"Include full generation settings, resource snapshots and raw prompt payloads. Large; use only for prompt recovery.","type":"boolean"}},"required":["generation_id"],"type":"object"}
ListAvatarsModels
List the user'savatarsModels: the reusable people who wear thegarments, called 'models' or 'mannequins' in fashion termsClothing (not the AIengines —models; for those, uselist_modelsmcp_list_model_catalog). Supports structured filters or query for hybrid name/metadata/image-attribute search. Set include_image_url=true when theavatarModel's image itself is needed.
⟨5 unchanged words⟩ :false,"readOnlyHint":true,"title":"ListAvatarsModels"}
⟨17 unchanged words⟩ is ORed with category when both are given.GarmentsWithmayahavecategorynoorcategory.body_zoneAfiltercategoryandorinclude_uncategorized=false,body_zoneuncategorized_count reports garments hidden by the category filterexcludeswithinthemtheunlesssameinclude_uncategorizedscope.isIftrue.matches are short and uncategorized_count > 0, call again with include_uncategorized=true and inspect those garments.
⟨186 unchanged words⟩ category when category and/or body_zone filters are used. If the first result has uncategorized_count > 0 and too few matches, call again with true and inspect those garments.","type":"boolean"},"limit":{ ⟨98 unchanged words⟩
App-only: appendAppend items to thesession-scopedUwear Shoot Board.
{"properties":{"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"board_version":{"description":"Pass 2 to receive board v2 state, including the board's output settings","enum":[2],"type":"integer"},"context_items":{"description":"Shoot Board items to append to the current list","items":{"properties":{"description":{"maxLength":500,"type":"string"},"gender":{"maxLength":40,"type":"string"},"id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"intake":{"description":"Board v2: intake state of an item still being sorted; absent means ready","properties":{"candidates":{"items":{"enum":["clothing","models","outfits","generations","files","locations","art_directions","automations"],"type":"string"},"type":"array"},"source_hash":{"description":"sha256 hex of the source file","type":["string","null"]},"status":{"enum":["sorting","needs_answer","ready"],"type":"string"}},"required":["status"],"type":["object","null"]},"isVideo":{"type":"boolean"},"key" ⟨3 unchanged words⟩ "type":["string","null"]},"meta":{"description":"Short display facts, e.g. ['female', 'ID 7']","items":{"type":["string","number","boolean"]},"maxItems":8,"type":"array"},"name":{"type":"string"},"posterUrl" ⟨17 unchanged words⟩ ,"outfits","generations","files","locations","art_directions","automations"],"type":"string"}},"required": ⟨2 unchanged words⟩ type":"object"},"type":"array"},"expected_revision":{"description":"Board revision this write is based on; a stale revision returns a revision_conflict error with the current board instead of overwriting it","minimum":0,"type":"integer"}},"required":["context_items","board_id","expected_revision"],"type":"object"}
App-only: clearClear allsessionShootcontextBoard items, or only one context type.
{"properties":{"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"board_version":{"description":"Pass 2 to receive board v2 state, including the board's output settings","enum":[2],"type":"integer"},"expected_revision":{"description":"Board revision this write is based on; a stale revision returns a revision_conflict error with the current board instead of overwriting it","minimum":0,"type":"integer"},"type":{"description":"Context type to remove; omit to clear the ⟨8 unchanged words⟩ ,"file","files","location","locations","art_direction","art_directions","automation","automations"],"type":"string"}},"required":["board_id","expected_revision"],"type":"object"}
App-only: export the user-confirmedExport montage clips asaone stitched video. Spends credits,:socall itis hidden from hostonlyLLMs;after theMCP iframe calls thisuserafterconfirmed theuser pressesclipsExportandontheirtheorderMontageProposalincard.chat. Returns the generation_id to pollviawith get_generation_status.
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Export Montage Video"}
App-only: queueQueue an image-to-video generation foraone montage clip. Spends credits,:socall itis hidden from host LLMs; the montage editor calls thisonlywhenafter the userpresses Generate on aagreeddraftinclip.chat. Returns the generation_id to pollviawith get_generation_status.
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":true,"readOnlyHint":false,"title":"Generate Montage Clip"}
App-only: hydrateRead thesession-scopedUwear Shoot Board.
{"properties":{"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"board_version":{"description":"Pass 2 to receive board v2 state, including the board's output settings","enum":[2],"type":"integer"}},"required":["board_id"],"type":"object"}
App-only: listList uploaded (reference) files for the Uwear MCP workspace files tab and the Shoot Board's References tab.
⟨24 unchanged words⟩ ","minimum":1,"type":"integer"},"query":{"description":"Optional search over file names and tags (the Shoot Board's References tab)","type":"string"},"tag_ids":{"description":"Optional: only files with any of these tags","items":{"type":"integer"},"type":"array"}},"required":[],"type":"object"}
App-only: replaceReplace thesession-scopedUwear Shoot Board items.
{"properties":{"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"board_version":{"description":"Pass 2 to receive board v2 state, including the board's output settings","enum":[2],"type":"integer"},"context_items":{"description":"Shoot Board items that ⟨6 unchanged words⟩ is omitted","items":{"properties":{"description":{"maxLength":500,"type":"string"},"gender":{"maxLength":40,"type":"string"},"id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"intake":{"description":"Board v2: intake state of an item still being sorted; absent means ready","properties":{"candidates":{"items":{"enum":["clothing","models","outfits","generations","files","locations","art_directions","automations"],"type":"string"},"type":"array"},"source_hash":{"description":"sha256 hex of the source file","type":["string","null"]},"status":{"enum":["sorting","needs_answer","ready"],"type":"string"}},"required":["status"],"type":["object","null"]},"isVideo":{"type":"boolean"},"key" ⟨3 unchanged words⟩ "type":["string","null"]},"meta":{"description":"Short display facts, e.g. ['female', 'ID 7']","items":{"type":["string","number","boolean"]},"maxItems":8,"type":"array"},"name":{"type":"string"},"posterUrl" ⟨17 unchanged words⟩ ,"outfits","generations","files","locations","art_directions","automations"],"type":"string"}},"required": ⟨27 unchanged words⟩ "items":{"items":{"properties":{"description":{"maxLength":500,"type":"string"},"gender":{"maxLength":40,"type":"string"},"id":{"oneOf":[{"type":"integer"},{"type":"string"}]},"intake":{"description":"Board v2: intake state of an item still being sorted; absent means ready","properties":{"candidates":{"items":{"enum":["clothing","models","outfits","generations","files","locations","art_directions","automations"],"type":"string"},"type":"array"},"source_hash":{"description":"sha256 hex of the source file","type":["string","null"]},"status":{"enum":["sorting","needs_answer","ready"],"type":"string"}},"required":["status"],"type":["object","null"]},"isVideo":{"type":"boolean"},"key" ⟨3 unchanged words⟩ "type":["string","null"]},"meta":{"description":"Short display facts, e.g. ['female', 'ID 7']","items":{"type":["string","number","boolean"]},"maxItems":8,"type":"array"},"name":{"type":"string"},"posterUrl" ⟨17 unchanged words⟩ ,"outfits","generations","files","locations","art_directions","automations"],"type":"string"}},"required": ⟨3 unchanged words⟩ :"object"},"type":"array"},"output":{"description":"Board v2: the shoot's output settings; omitted keys keep their current value","properties":{"aspect_ratio":{"description":"e.g. \"3:4\"","type":["string","null"]},"model_slug":{"type":["string","null"]},"num_images":{"minimum":1,"type":["integer","null"]},"resolution":{"description":"e.g. \"2K\"","type":["string","null"]}},"type":["object","null"]},"pendingRequest":{"type":["object","null" ⟨8 unchanged words⟩ ":"string"}},"type":"object"},"expected_revision":{"description":"Board revision this write is based on; a stale revision returns a revision_conflict error with the current board instead of overwriting it","minimum":0,"type":"integer"}},"required":["board_id","expected_revision"],"type":"object"}
App-only: saveSaveaanuser-editededited imagefrom the shared ImageDetail retouch editor(image_base64) as achild generation result. Hidden from host LLMs; the MCPnewiframechildcallsresultthisofafterparent_generation_result_id.theChangesusernopressesexistingSave.result.
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":false,"readOnlyHint":false,"title":"Save Retouched Image"}
CreatePropose Brieffor Approval
Create a Uwear BriefProposal from canonical generation commands. EveryUsecommands[].inputthisiswhen theMCP-safe GenerationIntent fields; commands and immutable plans are persisted without translation.userSupplydescribes aconcrete model_slug forshoot.generate,Savesedit,aupscalebrief,and video. Use durable command.source IDs for uploaded filestheorlooksgenerationtoresults,shoot andreference_attachments fortheadditionalautomationreferences.theyForrunvideothrough,attach available full back or sideandgarmentlinksassetsitthatto thecameraboardmayinrevealplacewhenofcapacitythepermits;currenthavingone.theNothingassetrunsuploadedor isnot enough.charged:Ifshow theresponseusercontainsthevideo_garment_view_not_attached,looksexplainanditstheexactcreditassets,quotenode(get_brief), andcapacity, then follow its remediation. Never mix reference_attachmentsgenerate withimg_ref_urls or append recommendations beyond remaining capacity. Set execute_immediately=trueconfirm_brief onlywhen the user explicitly asks to run now. Include creative_context forafterphotoshootstheyandagree.explainRead theart direction after proposing. For changesboardtofirstawithvisibleread_shoot_boardbrief,andcallfollowupdate_briefbrief_inputs.guide.withIf thecompleteresultreplacementlistscommandproblems,list.fixWebhookthemcallbackallconfigurationandiscallAPI-only.again.
before
{"$defs":{"GenerationCommand":{"additionalProperties":false,"description":"Versioned command shared by REST, Agent, MCP, jobs, and briefs.\n\nThe nested ``input`` is intentionally the API's public intent model. A\nfield added there therefore appears automatically in this command's JSON\nschema, serialization, and persisted brief representation.","properties":{"input":{"$ref":"#/$defs/GenerationIntent"},"schema_version":{"const":2,"type":"integer"},"source":{"default":null,"discriminator":{"propertyName":"type"},"oneOf":[{"properties":{"generation_result_id":{"minimum":1,"type":"integer"},"type":{"const":"generation_result","type":"string"}},"required":["type","generation_result_id"],"type":"object"},{"properties":{"type":{"const":"uploaded_file","type":"string"},"uploaded_file_id":{"minimum":1,"type":"integer"}},"required":["type","uploaded_file_id"],"type":"object"},{"properties":{"image_url":{"minLength":1,"type":"string"},"type":{"const":"public_url","type":"string"}},"required":["type","image_url"],"type":"object"},{"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"}],"properties":{"generation_result_id":{"minimum":1,"type":"integer"},"image_url":{"minLength":1,"type":"string"},"output_index":{"minimum":0,"type":"integer"},"post_claim_reference":{"minLength":1,"type":"string"},"step_index":{"minimum":0,"type":"integer"},"type":{"enum":["generation_result","uploaded_file","public_url","pipeline_step"],"type":"string"},"uploaded_file_id":{"minimum":1,"type":"integer"}},"type":"object"}},"required":["schema_version","input"],"type":"object"},"GenerationIntent":{"additionalProperties":false,"description":"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.","properties":{"alignment":{"default":null,"enum":["left","center","right","top","bottom"],"type":"string"},"art_direction_id":{"default":null,"minimum":1,"type":"integer"},"aspect_ratio":{"default":null,"type":"string"},"audio_ref_urls":{"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"},"avatar_id":{"default":null,"minimum":1,"type":"integer"},"backdrop_mode":{"default":null,"description":"Canonical Backdrop mode for new generation requests.","enum":["transparent","solid","image"],"type":"string"},"background_image_url":{"default":null,"description":"Canonical Backdrop background image URL.","type":"string"},"camera":{"default":"","type":"string"},"camera_edit_id":{"default":null,"type":"string"},"children":{"default":null,"description":"Nested generation requests to run after this generation completes. Every child must provide model_slug.","items":{"$ref":"#/$defs/GenerationIntent"},"type":"array"},"clothing_item_ids":{"default":null,"items":{"type":"integer"},"type":"array"},"color_hex":{"default":null,"description":"Canonical Backdrop solid or fallback color.","type":"string"},"do_qa":{"default":null,"description":"When true, enqueue QA after result storage and gate acceptance on QA.","type":"boolean"},"duration":{"default":null,"type":"integer"},"enhance_user_prompt":{"default":null,"deprecated":true,"description":"Deprecated REST compatibility alias. true is normalized at command preparation to the legacy prompt-enhancement ArtDirection ID; false has no effect. Prefer art_direction_id. Removal requires 90 consecutive days without production use; usage was last observed on 2026-07-26.","type":"boolean","ui":{"editable":false,"visibility":["rest"]}},"extra_params":{"additionalProperties":true,"default":null,"description":"Model-specific extension parameters. Backdrop controls are not accepted here; use backdrop_mode, color_hex, and background_image_url.","type":"object"},"generate_audio":{"default":false,"description":"Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits.","type":"boolean"},"generation_result_parent_id":{"default":null,"minimum":1,"type":"integer"},"image_url":{"default":null,"type":"string"},"img_ref_urls":{"default":null,"items":{"type":"string"},"type":"array"},"last_frame_attachment":{"$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."},"last_frame_url":{"default":null,"type":"string"},"location_id":{"default":null,"minimum":1,"type":"integer"},"max_qa_retries":{"default":null,"description":"Maximum QA-triggered retry generations after the initial attempt.","maximum":5,"minimum":0,"type":"integer"},"model_slug":{"description":"Active AI model slug. Required for every generation command.","minLength":1,"type":"string"},"negative_prompt":{"default":null,"type":"string"},"num_images":{"minimum":1,"type":"integer"},"outfit_id":{"default":null,"minimum":1,"type":"integer"},"prompt":{"default":"","description":"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.","type":"string"},"reference_attachments":{"default":null,"items":{"$ref":"#/$defs/GenerationReferenceAttachmentInput"},"type":"array"},"resolution":{"default":null,"description":"Model-defined output resolution. Legacy image tiers are normalized to 1K, 2K, or 4K; video and exact pixel presets retain their model-defined casing.","maxLength":32,"minLength":2,"type":"string"},"seed":{"default":null,"type":"integer"},"tag_ids":{"default":null,"items":{"type":"integer"},"type":"array"},"target_resolution":{"default":null,"type":"string"},"upscale_factor":{"default":null,"type":"number"},"use_case":{"default":null,"type":"string"},"video_ref_urls":{"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"}},"required":["num_images","model_slug"],"type":"object"},"GenerationReferenceAttachmentInput":{"properties":{"avatar_id":{"default":null,"minimum":1,"type":"integer"},"clothing_item_asset_id":{"default":null,"description":"Exact durable clothing asset reference. Provide with clothing_item_id; preferred over the deprecated side selector for repeated detail assets.","minimum":1,"type":"integer"},"clothing_item_id":{"default":null,"minimum":1,"type":"integer"},"generation_result_id":{"default":null,"minimum":1,"type":"integer"},"location_id":{"default":null,"minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.","minimum":1,"type":"integer"},"side":{"default":null,"enum":["front","back"],"type":"string"},"type":{"enum":["uploaded_file","generation_result","location","avatar","clothing_item","outfit"],"type":"string"},"uploaded_file_id":{"default":null,"minimum":1,"type":"integer"}},"required":["type"],"type":"object"}},"description":"Propose a brief made exclusively of canonical generation commands.","properties":{"commands":{"description":"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.","items":{"$ref":"#/$defs/GenerationCommand"},"minItems":1,"type":"array"},"creative_context":{"default":null,"description":"Required 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.","type":"string"},"execute_immediately":{"default":false,"description":"Set 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.","type":"boolean"}},"required":["commands"],"type":"object"}{"destructiveHint":truefalse,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":false,"title":"CreatePropose Brieffor Approval"}
⟨325 unchanged words⟩ "minimum":360,"type":"integer"},"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"items":{"description":"Ordered list of montage ⟨30 unchanged words⟩
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":false,"readOnlyHint":truefalse,"title":"Create Video Montage"}
Ask User toNewPickShootAssetsBoard
FIRST tool to call for a new photoshootUseonlythis when the userhas not supplied garment/outfit IDs or textual selectors such as tag names, saved ArtDirection names, location names, or outfitwantsnames.aOpensphotoshoottheandMCPyouapp/galleryhavesonotheboard_iduseryet.canCreateschooseaassetsnew,add them toemptytheUwear Shoot Board,andpress Confirm context. BLOCKS untilreturnstheitsuserboard_id,confirmswhichtheireveryselection.otherDoShootnotBoardusetoolthistakes.whenThisaclientno-UIshowspathnocanwidget:resolvebuild therequestshoot withlist_tags/get_items_by_tag/list_garments or the ArtDirectiontoolslookup(search_uwear_library,tools.modify_shoot_board,Dopropose_brief)notand tell the userto 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/modelwhat isoptional; only ask for one whenon theuser 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 useboard.generate_avatarprompt:ifonetheylinewantdescribingUwearthetoshoot;createexpected_types:awhatreusableitmodel.needs.
⟨9 unchanged words⟩ from the MCP app/gallery.","properties":{"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"expected_types":{"description":"Accepted item types ( ⟨66 unchanged words⟩
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":false,"readOnlyHint":truefalse,"title":"Ask User toNewPickShootAssetsBoard"}
⟨36 unchanged words⟩ , and other reference images that are notgarmentsClothing oravatars.Models.
{"$defs":{"OpenAIFile":{"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"},"ReferenceChatFileUploadItem":{"description":"One reference file upload ⟨72 unchanged words⟩ from chat file references.","properties":{"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"file_name":{"default":null,"description":"Single ⟨27 unchanged words⟩ ,"type":"array"},"image_file_1":{"$refadditionalProperties":"#/$defs/OpenAIFile"false,"description":"Host-provided uploaded file reference for ⟨15 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_10file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_10":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_2file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_2":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_3file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_3":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_4file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_4":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_5file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_5":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_6file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_6":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_7file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_7":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_8file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_8":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_9file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_9":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"file_id":{"type":"string"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_url":{"default":null,"description":"Single ⟨18 unchanged words⟩ , e.g. image/png","type":"string"}},"required":[],"type":"object"}
Universal hybridUseretrievalthisacrosswhen theuser's visible Uwearuserlibrary:namesgarmentsClothing,avatars/modelsModels,locationsLocations,ArtDirections,artuploadeddirections, files,andorgenerationpastresults.resultsThisinischataandfinder,younotneedatheirrecommender.ids.UseTakes a short keywordqueriesquery (2 to 52-5 words),one concept per call,or an exactname/SKU/ID. Every word must match for lexical results; long sentences can return no lexical matches. A query describing one garment finds that garment, not complementary garments. Vector results stay close to the best match. Use this before opening the picker, e.g. 'SKU 42', 'urban art direction', 'summer denim', or 'studio model'. For saved outfits, retrieve matching garments firstname,then call list_outfits with clothing_item_idsSKU orpropose_outfits from the garment IDs.id)Returnsandstablereturns typedIDs, ids_by_typeids,detail_tool/detail_arguments,names andselection hints; for saved ArtDirections, use the returned art_direction_id in briefs. This combines current lexical metadata with maintainedthumbnails.vectorItretrieval.findsInteractiveitems;searchesitdodoes notrefresh the index. indexed_count is always 0 here; it isrecommendnotthem.indexChangescoverage.nothing.
ReplaceUse this when thevisibleuserUwearasksBriefProposalinwithchatatocompletechangecanonicalthecommandboard'slist.brief:Edititscommands[].inputlooks,directlyModels,usingoutfits,theLocations,MCP-safereferences,GenerationIntentname,fieldsshots andpreservesteps,everyAIunchangedmodelfieldorandartdurabledirection.source.SendThistheiscomplete replacementstatelook list with the brief_id it replaces,notkeepingaeachpartialunchangeddiff.look'sForkey.video_garment_view_not_attachedShotswarnings,orfollowsteps: recipe with thecapacity-awarecompleteremediation:newnevershotmixlistreference_attachments(recipe_look_keyswithforimg_ref_urlssome looks only) orappendrecipe_workflow_id.recommendationsAIbeyondmodelremainingonly:capacity.image_modelInclude/updatedvideo_model.creative_contextArtfordirectionphotoshootonly:rewritesart_direction_id.andSavesexplainthe revised brief on thechangedboard;artnothingdirection.runs.WebhookIfcallbacktheconfigurationresultislistsAPI-only.problems, fix them all and call again; on revision_conflict, read the board and revise its current brief.
before
{"$defs":{"GenerationCommand":{"additionalProperties":false,"description":"Versioned command shared by REST, Agent, MCP, jobs, and briefs.\n\nThe nested ``input`` is intentionally the API's public intent model. A\nfield added there therefore appears automatically in this command's JSON\nschema, serialization, and persisted brief representation.","properties":{"input":{"$ref":"#/$defs/GenerationIntent"},"schema_version":{"const":2,"type":"integer"},"source":{"default":null,"discriminator":{"propertyName":"type"},"oneOf":[{"properties":{"generation_result_id":{"minimum":1,"type":"integer"},"type":{"const":"generation_result","type":"string"}},"required":["type","generation_result_id"],"type":"object"},{"properties":{"type":{"const":"uploaded_file","type":"string"},"uploaded_file_id":{"minimum":1,"type":"integer"}},"required":["type","uploaded_file_id"],"type":"object"},{"properties":{"image_url":{"minLength":1,"type":"string"},"type":{"const":"public_url","type":"string"}},"required":["type","image_url"],"type":"object"},{"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"}],"properties":{"generation_result_id":{"minimum":1,"type":"integer"},"image_url":{"minLength":1,"type":"string"},"output_index":{"minimum":0,"type":"integer"},"post_claim_reference":{"minLength":1,"type":"string"},"step_index":{"minimum":0,"type":"integer"},"type":{"enum":["generation_result","uploaded_file","public_url","pipeline_step"],"type":"string"},"uploaded_file_id":{"minimum":1,"type":"integer"}},"type":"object"}},"required":["schema_version","input"],"type":"object"},"GenerationIntent":{"additionalProperties":false,"description":"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.","properties":{"alignment":{"default":null,"enum":["left","center","right","top","bottom"],"type":"string"},"art_direction_id":{"default":null,"minimum":1,"type":"integer"},"aspect_ratio":{"default":null,"type":"string"},"audio_ref_urls":{"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"},"avatar_id":{"default":null,"minimum":1,"type":"integer"},"backdrop_mode":{"default":null,"description":"Canonical Backdrop mode for new generation requests.","enum":["transparent","solid","image"],"type":"string"},"background_image_url":{"default":null,"description":"Canonical Backdrop background image URL.","type":"string"},"camera":{"default":"","type":"string"},"camera_edit_id":{"default":null,"type":"string"},"children":{"default":null,"description":"Nested generation requests to run after this generation completes. Every child must provide model_slug.","items":{"$ref":"#/$defs/GenerationIntent"},"type":"array"},"clothing_item_ids":{"default":null,"items":{"type":"integer"},"type":"array"},"color_hex":{"default":null,"description":"Canonical Backdrop solid or fallback color.","type":"string"},"do_qa":{"default":null,"description":"When true, enqueue QA after result storage and gate acceptance on QA.","type":"boolean"},"duration":{"default":null,"type":"integer"},"enhance_user_prompt":{"default":null,"deprecated":true,"description":"Deprecated REST compatibility alias. true is normalized at command preparation to the legacy prompt-enhancement ArtDirection ID; false has no effect. Prefer art_direction_id. Removal requires 90 consecutive days without production use; usage was last observed on 2026-07-26.","type":"boolean","ui":{"editable":false,"visibility":["rest"]}},"extra_params":{"additionalProperties":true,"default":null,"description":"Model-specific extension parameters. Backdrop controls are not accepted here; use backdrop_mode, color_hex, and background_image_url.","type":"object"},"generate_audio":{"default":false,"description":"Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits.","type":"boolean"},"generation_result_parent_id":{"default":null,"minimum":1,"type":"integer"},"image_url":{"default":null,"type":"string"},"img_ref_urls":{"default":null,"items":{"type":"string"},"type":"array"},"last_frame_attachment":{"$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."},"last_frame_url":{"default":null,"type":"string"},"location_id":{"default":null,"minimum":1,"type":"integer"},"max_qa_retries":{"default":null,"description":"Maximum QA-triggered retry generations after the initial attempt.","maximum":5,"minimum":0,"type":"integer"},"model_slug":{"description":"Active AI model slug. Required for every generation command.","minLength":1,"type":"string"},"negative_prompt":{"default":null,"type":"string"},"num_images":{"minimum":1,"type":"integer"},"outfit_id":{"default":null,"minimum":1,"type":"integer"},"prompt":{"default":"","description":"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.","type":"string"},"reference_attachments":{"default":null,"items":{"$ref":"#/$defs/GenerationReferenceAttachmentInput"},"type":"array"},"resolution":{"default":null,"description":"Model-defined output resolution. Legacy image tiers are normalized to 1K, 2K, or 4K; video and exact pixel presets retain their model-defined casing.","maxLength":32,"minLength":2,"type":"string"},"seed":{"default":null,"type":"integer"},"tag_ids":{"default":null,"items":{"type":"integer"},"type":"array"},"target_resolution":{"default":null,"type":"string"},"upscale_factor":{"default":null,"type":"number"},"use_case":{"default":null,"type":"string"},"video_ref_urls":{"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"}},"required":["num_images","model_slug"],"type":"object"},"GenerationReferenceAttachmentInput":{"properties":{"avatar_id":{"default":null,"minimum":1,"type":"integer"},"clothing_item_asset_id":{"default":null,"description":"Exact durable clothing asset reference. Provide with clothing_item_id; preferred over the deprecated side selector for repeated detail assets.","minimum":1,"type":"integer"},"clothing_item_id":{"default":null,"minimum":1,"type":"integer"},"generation_result_id":{"default":null,"minimum":1,"type":"integer"},"location_id":{"default":null,"minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.","minimum":1,"type":"integer"},"side":{"default":null,"enum":["front","back"],"type":"string"},"type":{"enum":["uploaded_file","generation_result","location","avatar","clothing_item","outfit"],"type":"string"},"uploaded_file_id":{"default":null,"minimum":1,"type":"integer"}},"required":["type"],"type":"object"}},"description":"Input schema for updating a visible brief without immediate execution.","properties":{"commands":{"description":"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.","items":{"$ref":"#/$defs/GenerationCommand"},"minItems":1,"type":"array"},"creative_context":{"default":null,"description":"Required 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.","type":"string"}},"required":["commands"],"type":"object"}⟨275 unchanged words⟩ "minimum":360,"type":"integer"},"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"clear_trim":{"default":false,"description":"For ⟨210 unchanged words⟩ image-to-video montage items.","type":"string"}},"required":[],"type":"object"}
{"destructiveHint":false,"idempotentHint":truefalse,"openWorldHint":false,"readOnlyHint":truefalse,"title":"Update Video Montage"}
UploadAvatarsModels from Chat
Batch upload reusableavatars/modelsModels from person photos the user attached in chat. ⟨38 unchanged words⟩ not use ordinary text-to-image results as an uploadfallback; use generate_avatar followed by save_generated_avatar for Uwear-created avatars.fallback. Use only when the user explicitly wants a specific or consistent person.
⟨124 unchanged words⟩ ":["name"],"type":"object"},"OpenAIFile":{"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"}},"additionalProperties":false,"description":"Input schema for ⟨42 unchanged words⟩ "maxItems":10,"type":"array"},"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"build":{"default":null,"description":"Optional ⟨46 unchanged words⟩ ,"type":"integer"},"image_file_1":{"$refadditionalProperties":"#/$defs/OpenAIFile"false,"description":"Host-provided uploaded file reference for ⟨15 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_10file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_10":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_2file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_2":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_3file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_3":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_4file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_4":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_5file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_5":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_6file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_6":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_7file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_7":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_8file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_8":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"image_file_9file_id":{"$reftype":"#/$defs/OpenAIFilestring"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_file_9":{"additionalProperties":false,"description":"Host-provided uploaded file reference for the ⟨14 unchanged words⟩ the host, not a bare file_... ID.","properties":{"download_url":{"type":"string"},"file_id":{"type":"string"},"file_name":{"type":"string"},"mime_type":{"type":"string"}},"required":["download_url","file_id"],"type":"object"},"image_url":{"default":null,"description":"Single ⟨27 unchanged words⟩ recovered avatar/model name","type":"string"}},"required":[],"type":"object"}
⟨5 unchanged words⟩ :true,"readOnlyHint":false,"title":"UploadAvatarsModels from Chat"}
UploadGarmentsClothing from URL
Queue a recoverable batchUploaduploadClothing from public HTTP(S) imageURLsURLs. Queues a recoverable batch upload andreturnreturns an operationimmediately.immediately;Retryretry with the exact same arguments to readthe stable operationitsstate;stateretries(adoretrynotcreatescreatenoanothersecondupload.upload).DefaultsPhotostoarebackgroundstoredremoval;aspassuploaded,processing_mode='none'withouttobackgroundstoreremoval;originalprocessing_modeimagesisas-is.ignored. Prefer assets with {asset_kind: full|detail, asset_view: ⟨11 unchanged words⟩ 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.
⟨364 unchanged words⟩ image URL","type":"string"},"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"description":{"default":null,"description":"Single item-level ⟨140 unchanged words⟩ side image URL","type":"string"}},"required":[],"type":"object"}
⟨5 unchanged words⟩ :true,"readOnlyHint":false,"title":"UploadGarmentsClothing from URL"}
Add Chat Photos to Board — Use this when the user attaches images in this chat and wants them in Uwear, on the Shoot Board or in a shoot: clothing, a Model, a Location or a reference. Put each attachment in its own field, image_file_1, image_file_2, ... in attachment order, as the chat provides it: ChatGPT passes the file itself, also when you see only a file name or path. Chat attachments only: a web address is refused (ask the user to attach that photo). kinds: {image_file_N: garment|avatar|location|reference} for photos whose kind the user said or is clear (avatar: a person to use as a Model); Uwear sorts the rest. …
Add Garment View — A Clothing card dropped on another. The photo of from_garment_id becomes the back, side or detail view of garment_id, and from_garment_id leaves the board (deleted only when it is a fresh drop nothing else uses). Or a photo put in the brief's missing-photo slot: image_url instead of from_garment_id, nothing leaves the board. The board's draft brief is saved again when the view changes it. Returns the board (and brief); asking again answers status unchanged.
Briefs — The account's Shoot Board briefs, newest first: every brief that ran (on any Shoot Board) and this board's draft, each with its status, looks, automations, credits and covers.
Brief Runs — Every look's run of a generating brief (brief_id), or runs by id (workflow_run_ids, each with the look its cards held): status, results by step, credits.
Save Dropped Photos — Save sorted Shoot Board photos to the library as garments, avatars, locations or reference files, skip ones already saved, and add them to the Shoot Board at expected_revision; a board that changed is refused before anything is saved (revision_conflict with the current board).
Delete Results — Delete the user's results and their stored images, as the platform's Delete. Cannot be undone: call it only after the user confirmed in chat which results to delete.
Edit Board Brief — Edit the Shoot Board's brief by hand: add, remove or change looks, or run looks through another automation. Saves a new brief linked to the board and returns the board, the brief, its quote and the credit delta; dry_run only quotes.
Save Video Frame — Save a still frame of a video result as a new image result, as POST /generation-result/{id}/extract-frame. The result viewer's Save frame.
Sort Dropped Photos — Sort photos dropped on the Shoot Board into garment, avatar, location or reference (or unsure with two candidates) and report duplicates within the drop and in the library. Saves nothing. A photo the call had no time left for comes back with error deferred: send it again.
List Model Catalog — The active AI models with their capabilities and pricing rules, as GET /models returns them, for the widget's model pickers.
Read Generation — One generation with its results as GET /generation/{id} returns it (prompt, model, settings, inputs), for the result viewer's Info panel.
Read Result — One generation result as GET /generation-result/{id} returns it (tags, review verdict, QA, prompt, model), for the widget's result viewer.
Copy as New Automation — Copy an automation as a new automation for this shoot.
Automation History — An automation's past runs, newest first: one row per Shoot Board Generate (its looks) or per run started on Uwear, with when, how it went, credits and covers.
List Automations — The company's shoot automations (and other automations to copy).
Open Automation — Open the brief's automation in the builder: its draft, or once Generate published it its live version (saving an edit of it makes a new automation); another automation opens read-only.
Check Automation — Validate and price the automation being edited.
Save Automation Draft — Save the automation's draft.
Move Photo to Another Pile — Move a Shoot Board photo between the Clothing, Models and Locations piles. Saves the same image as the new kind and swaps it on the board; the old asset is deleted only if intake saved it in the last 24 hours and nothing uses it, otherwise it stays in the library. Asking for a move that already happened changes nothing and returns the board (status "unchanged").
Review Results — The result viewer's review rail. Sets the user's verdict on their own results to approved or rejected, or clears it (decision null), replacing any verdict they had; deletes nothing and spends no credits.
Set Result Tags — Replace a result's tags with tag_ids (empty removes all), as PUT /generation-result/{id}/tags. The result viewer's tag tray. A tag that starts one of the user's automations starts it, as on the platform.
Edit Tag — Rename or recolor one of the company's tags, as PATCH /tag/{id}. The result viewer's tag tray.
Upload Dropped Photo — Store one photo dropped on the Shoot Board, sent inline as base64, for a host that cannot upload files itself. Returns a receipt (sha256, size, stored, image_url, image_url_expires_at); pass image_url to mcp_intake_files and mcp_commit_intake. Without data, stores nothing and returns the receipt of the photo already stored under sha256 (a fresh image_url), or stored: false.
Workflow Assets — The automation builder reads library items (Clothing, Models, Locations, ...) of one kind by id to show them on its cards. Read-only.
Cameras — The camera views (front, side, back, crops) a shot or camera edit can use, for the automation builder. Read-only.
Workflow Contract — The automation format (step kinds and their settings) the automation builder edits against. Read-only.
Workflow Gallery — The automation builder's picker: one page of the user's library items of one kind, filtered by search text, tags or category. Read-only.
Garment Categories — The garment categories, for the automation builder's category filters. Read-only.
Workflow Tags — The account's tags, for the automation builder's tag filters. Read-only.
Change Shoot Board — Use this when the user asks in chat to change what is on the open Shoot Board. add puts items on it; set replaces the whole item list (to remove items, send the ones to keep); clear empties one type, or without type starts a new shoot on the same board (its brief is unlinked; photos stay in the library); add_as_view makes from_garment_id's photo the back, side or detail view of garment_id and takes from_garment_id off the board, only after the user agrees the two show one garment. Items are {type, id} from search_uwear_library or read_shoot_board. To reuse an automation, add {type: automation…
Read Shoot Board — Use this before modify_shoot_board, propose_brief or update_brief: the user changes the board in the widget at any time. Returns the board's items (Clothing, Models, Outfits, Locations, art directions, files, results) with ids and names, its revision, its linked brief_id, and brief_inputs: the guide, asset facts, automations, cameras, AI models and limits a brief is written from. Changes nothing.
Save Art Direction — Use this when the user asks to create, write or save an art direction, or the board's New art direction asks for one: write it from their words, the chat and the board, and save it in the same turn. Saves it to the library and makes it the board's one art direction, replacing the previous one (which stays in the library). Fill every section with concrete, photographable choices. It applies to every look, so it names no garment, outfit, Model or Location (text naming a board item is refused). If the board has a brief, apply it with update_brief art_direction_id. If the result lists problems, f…
Favorite Result — The result viewer's star. Marks one of the user's own generation results as a favorite (favorite true) or removes the mark (false); deletes nothing and spends no credits.
Show in Shoot Board — Moves a Shoot Board that is open in a widget to a view (board, brief, automation, results, brief_history). This client shows no widget, so it changes nothing the user sees: read the board, brief or results with read_shoot_board, get_brief or get_generation_results and tell the user.
Read Photoshoot Settings — Read the user's saved photoshoot defaults (aspect ratio, camera, resolution) with every allowed value. Backs the plugin settings page.
Update Photoshoot Settings — Save changed photoshoot defaults (aspect ratio, camera, resolution). Send only the settings that changed; returns every current value. Defaults never authorize a paid generation.
Add Avatar Reference — 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.
Apply Backdrop — 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.
Create Art Direction — 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.
Build Avatar Prompt — 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.
Copy Template to Generate Node — 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.
Write Art Direction Markdown (Advanced) — 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.
Create Avatar from References — 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.
Create Outfit — Create an outfit from existing garment IDs. Pairs saved garments together into a saved outfit without uploading new images.
Delete Template — Permanently delete a library template. Owner-only templates must be deleted through their owning resource.
Duplicate Art Direction — Duplicate a system or company ArtDirection into an editable company copy.
Estimate Credit Cost — Estimate credit cost for an operation.
Finish Local Garment Upload — 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.
Generate Avatar Reference — 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.
Get Art Direction Draft Status — 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.
Get Connection Identity — 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.
Get Garment — Get a specific garment by ID.
Get Items by Tag — 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.
Get Location — Get a reusable location/scene reference by ID.
Get Outfit — Get one saved outfit by ID, including its member garments.
Get Template — 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.
Improve Art Direction — 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.
List AI Models — 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.
Prepare Local Garment Upload — 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.
Propose Outfits — 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.
Save Generated Avatar — 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.
Save Template — 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.
Submit Uwear Feedback — 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.
Update Art Direction — 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.
Update Garment — 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.
Update Preferences — 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.
Upload Garments from Chat — 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 loca…
Analyze Image — Analyze any image using AI vision for manual inspection, debugging, visual description, or supplemental critique. Provide exactly one source: attachment_type together with attachment_id for a workspace record, 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.
⟨944 unchanged words⟩ "minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"Outfit reference. The generation uses the front image of every garment in the outfit, as if each were attached as clothing_item.","minimum":1,"type":"integer"},"side":{"default":null,"enum":[" ⟨7 unchanged words⟩ ","generation_result","location","avatar","clothing_item","outfit"],"type":"string"},"uploaded_file_id": ⟨261 unchanged words⟩
⟨12 unchanged words⟩ , ArtDirections, uploaded files, and generation results. This is a finder, not a recommender. Usethisshortbeforekeywordopeningqueriesthe(2pickertowhen5thewords),useronedescribesconceptassetsper call, orsavedancreativeexactdirectionname/SKU/ID.byEveryexactwordname/SKUmustormatchnaturalforlanguagelexical results; long sentences can return no lexical matches. A query describing one garment finds that garment, not complementary garments. Vector results stay close to the best match. Use this before opening the picker, e.g. 'SKU 42', 'urban art direction', 'summer ⟨34 unchanged words⟩ use the returned art_direction_id in briefs. This combinesindexedcurrent lexicalmatchingmetadata with maintained vectorretrieval;retrieval. Interactive searches do notrunrefreshseparatethesubstringindex.searches.indexed_count is always 0 here; it is not index coverage.
⟨6 unchanged words⟩ universal hybrid library search.","properties":{"exclude_clothing_item_ids":{"default":null,"description":"Exclude these garment IDs after ranking and before the result limit; other item types are unaffected.","items":{"type":"integer"},"maxItems":100,"type":"array"},"item_types":{"default":null,"description":"Optional ⟨45 unchanged words⟩ :"integer"},"query":{"description":"HybridShortretrievalkeywordquery.query:Handles2exacttonames/SKUs/IDs5andwords,natural-languageonevisualconcept per call, orattributeanintent.exact name/SKU/ID. Every word must match for lexical results, so long sentences can return no lexical matches. Describing a garment finds that garment, not pieces to pair with it.
⟨196 unchanged words⟩ ,"description":"Updated canonical garment category","enum":["activewear","baby_and_childrens_clothing","blouses","bodysuits","cardigans","corset_tops","hoodies","overshirts","polos","shirts","sweaters","sweatshirts","t_shirts","tank_tops","tunics","dresses","lingerie","maternity_clothing","mens_undergarments","one_pieces","outerwear","outfit_sets","pants","shorts","skirts","skorts","sleepwear_and_loungewear","socks","suits","swimwear","traditional_and_ceremonial_clothing","uniforms_and_workwear","wedding_and_bridal_party_dresses","clothing_accessories","costumes_and_accessories","handbag_and_wallet_accessories","handbags_wallets_and_cases","jewelry","shoe_accessories","shoes","other"],"type":"string"},"clothing_item_id":{"description" ⟨313 unchanged words⟩
⟨12 unchanged words⟩ or supplemental critique. Provide exactly one source: attachment_type together with attachment_id for a workspace record, generation_result_id for a Shoot Board generation, uploaded_file_id for ⟨41 unchanged words⟩
⟨10 unchanged words⟩ image using AI vision.","properties":{"attachment_id":{"default":null,"description":"ID of the workspace record to view. Supply together with attachment_type.","minimum":1,"type":"integer"},"attachment_type":{"default":null,"description":"Type of an attached workspace record. Supply together with attachment_id, without another image source.","enum":["uploaded_file","generation_result","clothing_item","outfit"],"type":"string"},"generation_result_id":{"default":null,"description":"ID ⟨119 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Create Art Direction"}
{"destructiveHint":truefalse,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Create Avatar from References"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Create Location"}
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Generate Avatar Reference"}
{"destructiveHint":falsetrue,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Improve Art Direction"}
⟨14 unchanged words⟩ "null"]},"generate_audio":{"description":"WhetherIncludetoaudiogenerateinaudiothewithdelivered video. False delivers a silent file; fixed-audio providers are muted after generation at thevideosame credits.","type":["boolean","null"]} ⟨105 unchanged words⟩
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false}
⟨465 unchanged words⟩ object"},"generate_audio":{"default":false,"description":"Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits.","type":"boolean"},"generation_result_parent_id":{"default" ⟨775 unchanged words⟩
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Create Brief for Approval"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Save Reference Images"}
⟨471 unchanged words⟩ object"},"generate_audio":{"default":false,"description":"Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits.","type":"boolean"},"generation_result_parent_id":{"default" ⟨635 unchanged words⟩
⟨465 unchanged words⟩ object"},"generate_audio":{"default":false,"description":"Include audio in the delivered video. False delivers a file with no audio stream; fixed-audio providers are muted after generation, without reducing native-generation credits.","type":"boolean"},"generation_result_parent_id":{"default" ⟨729 unchanged words⟩
{"destructiveHint":true,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Update Garment"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Upload Avatars from Chat"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Upload Garments from Chat"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false,"title":"Upload Garments from URL"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true,"title":"Analyze Image"}
Buy Credits — 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.
Buy Credits (Workspace) — 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.
after
{"$defs":{"LookInput":{"additionalProperties":false,"description":"One look: one outfit worn in the shoot, with who wears it and where.","properties":{"clothing_ids":{"description":"Clothing worn together.","items":{"minimum":1,"type":"integer"},"maxItems":4,"type":"array"},"key":{"default":null,"description":"update_brief: an existing look's key, to keep that look.","pattern":"^look_\\d{2,3}$","type":"string"},"label":{"default":"","description":"The look's name, e.g. 'Linen summer set'.","maxLength":120,"type":"string"},"location_id":{"default":null,"description":"Where the look is shot.","minimum":1,"type":"integer"},"model_id":{"default":null,"description":"The Model who wears the look.","minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"A saved outfit.","minimum":1,"type":"integer"},"reference_ids":{"description":"Reference photos (uploaded file ids from the board's References).","items":{"minimum":1,"type":"integer"},"maxItems":50,"type":"array"}},"type":"object"},"RecipeSpec":{"additionalProperties":false,"description":"The recipe a demand asks for: its shots and their steps.","properties":{"image_model":{"default":null,"description":"A listed image model's slug, only when the user named it.","type":"string"},"name":{"description":"What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').","maxLength":80,"minLength":1,"type":"string"},"shots":{"description":"One shot per view, in order.","items":{"$ref":"#/$defs/ShotSpec"},"maxItems":8,"minItems":1,"type":"array"},"video_model":{"default":null,"description":"A listed video model's slug, only when the user named it.","type":"string"}},"required":["name","shots"],"type":"object"},"ShotSpec":{"additionalProperties":false,"description":"One photo of each look, from one camera.","properties":{"camera":{"description":"The view, from the camera list.","enum":["auto","full_body_front","full_body_back","full_body_side","upper_body_front","upper_body_back","upper_body_side","lower_body_front","lower_body_back","lower_body_side","clothing_detail_front","clothing_detail_back","clothing_detail_side"],"type":"string"},"then":{"description":"Steps on this shot's photo, in order (a video ends the chain).","items":{"$ref":"#/$defs/StepSpec"},"maxItems":4,"type":"array"}},"required":["camera"],"type":"object"},"StepSpec":{"additionalProperties":false,"description":"One step on a shot's photo (or on the step before it).","properties":{"camera_edit_id":{"default":null,"description":"camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.","type":"string"},"kind":{"description":"camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.","enum":["camera_edit","edit","upscale","video","remove_background"],"type":"string"},"prompt":{"default":null,"description":"edit: the change; video: the motion (optional).","maxLength":1000,"type":"string"}},"required":["kind"],"type":"object"}},"additionalProperties":false,"properties":{"art_direction_id":{"default":null,"description":"The shoot's one art direction (a library id, or the id save_art_direction returns); omit it to keep the current one.","minimum":1,"type":"integer"},"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"looks":{"description":"The looks to shoot, each one outfit worn in the shoot, with ids from read_shoot_board.","items":{"$ref":"#/$defs/LookInput"},"maxItems":50,"minItems":1,"type":"array"},"recipe":{"$ref":"#/$defs/RecipeSpec","default":null,"description":"The shots and steps the user described (views, crops, edits, upscale, video): Uwear builds them as a new automation. Not with recipe_workflow_id."},"recipe_workflow_id":{"default":null,"description":"An automation from read_shoot_board's brief_inputs.automations that every look runs through as is (only when it matches what the user asked for). Not with recipe. Omitted while the board pins one (brief_inputs.pinned_automation): every look runs it.","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","type":"string"},"title":{"default":"","description":"The shoot's name, only in the user's own words; otherwise leave it out.","maxLength":80,"type":"string"}},"required":["looks","board_id"],"type":"object"}after
{"$defs":{"LookInput":{"additionalProperties":false,"description":"One look: one outfit worn in the shoot, with who wears it and where.","properties":{"clothing_ids":{"description":"Clothing worn together.","items":{"minimum":1,"type":"integer"},"maxItems":4,"type":"array"},"key":{"default":null,"description":"update_brief: an existing look's key, to keep that look.","pattern":"^look_\\d{2,3}$","type":"string"},"label":{"default":"","description":"The look's name, e.g. 'Linen summer set'.","maxLength":120,"type":"string"},"location_id":{"default":null,"description":"Where the look is shot.","minimum":1,"type":"integer"},"model_id":{"default":null,"description":"The Model who wears the look.","minimum":1,"type":"integer"},"outfit_id":{"default":null,"description":"A saved outfit.","minimum":1,"type":"integer"},"reference_ids":{"description":"Reference photos (uploaded file ids from the board's References).","items":{"minimum":1,"type":"integer"},"maxItems":50,"type":"array"}},"type":"object"},"RecipeSpec":{"additionalProperties":false,"description":"The recipe a demand asks for: its shots and their steps.","properties":{"image_model":{"default":null,"description":"A listed image model's slug, only when the user named it.","type":"string"},"name":{"description":"What the automation is for, 1-3 words, e.g. 'PDP', 'Lookbook', 'Campaign': Uwear names it with its views and steps ('PDP · front, side, upper').","maxLength":80,"minLength":1,"type":"string"},"shots":{"description":"One shot per view, in order.","items":{"$ref":"#/$defs/ShotSpec"},"maxItems":8,"minItems":1,"type":"array"},"video_model":{"default":null,"description":"A listed video model's slug, only when the user named it.","type":"string"}},"required":["name","shots"],"type":"object"},"ShotSpec":{"additionalProperties":false,"description":"One photo of each look, from one camera.","properties":{"camera":{"description":"The view, from the camera list.","enum":["auto","full_body_front","full_body_back","full_body_side","upper_body_front","upper_body_back","upper_body_side","lower_body_front","lower_body_back","lower_body_side","clothing_detail_front","clothing_detail_back","clothing_detail_side"],"type":"string"},"then":{"description":"Steps on this shot's photo, in order (a video ends the chain).","items":{"$ref":"#/$defs/StepSpec"},"maxItems":4,"type":"array"}},"required":["camera"],"type":"object"},"StepSpec":{"additionalProperties":false,"description":"One step on a shot's photo (or on the step before it).","properties":{"camera_edit_id":{"default":null,"description":"camera_edit only: the view, one of full_body_front, full_body_back, full_body_side, upper_body_front, upper_body_back, upper_body_side, lower_body_front, lower_body_back, lower_body_side, clothing_detail_front, clothing_detail_back, clothing_detail_side.","type":"string"},"kind":{"description":"camera_edit: the same photo from another view (camera_edit_id); edit: a written change (prompt); upscale: a larger photo; video: a clip opening on the photo (prompt: the motion); remove_background: the subject on transparency.","enum":["camera_edit","edit","upscale","video","remove_background"],"type":"string"},"prompt":{"default":null,"description":"edit: the change; video: the motion (optional).","maxLength":1000,"type":"string"}},"required":["kind"],"type":"object"}},"additionalProperties":false,"properties":{"art_direction_id":{"default":null,"description":"A new art direction for the whole shoot (omit: kept). Changing it never changes the automation. For a new look and feel, call save_art_direction first and pass its id.","minimum":1,"type":"integer"},"board_id":{"description":"The open Shoot Board's board_id, from Open Shoot Board or your context.","type":"string"},"brief_id":{"description":"The brief being revised: the board's brief_id from read_shoot_board.","minimum":1,"type":"integer"},"image_model":{"default":null,"description":"A listed image model's slug the user asked for (\"use GPT Image\"): the shoot's AI model, every shot and edit of every look runs on it; the automation is unchanged. Not with recipe (name it in recipe.image_model).","type":"string"},"looks":{"description":"The complete new look list (not a diff); an unchanged look keeps its key.","items":{"$ref":"#/$defs/LookInput"},"maxItems":50,"minItems":1,"type":"array"},"recipe":{"$ref":"#/$defs/RecipeSpec","default":null,"description":"The complete new shots and steps, built as a new automation for the looks below (e.g. the old shots plus a side view). Not with recipe_workflow_id."},"recipe_look_keys":{"default":null,"description":"The looks (keys you send) that move to recipe / recipe_workflow_id; omit for every look.","items":{"pattern":"^look_\\d{2,3}$","type":"string"},"maxItems":50,"type":"array"},"recipe_workflow_id":{"default":null,"description":"An automation from read_shoot_board's brief_inputs.automations for the looks below. Not with recipe.","pattern":"^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$","type":"string"},"title":{"default":null,"description":"A new name for the shoot, only the user's own words (omit: kept).","maxLength":80,"type":"string"},"video_model":{"default":null,"description":"A listed video model's slug the user asked for: the shoot's videos run on it. Not with recipe (name it in recipe.video_model).","type":"string"}},"required":["brief_id","looks","board_id"],"type":"object"}