scenario
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseScenario
Scenario
Overview
概述
Scenario (scenario.com) generates AI images, video, 3D, and audio across 500+ models plus custom training, all through the core loop below.
Scenario (scenario.com) 通过以下核心循环,在 500+ 模型及自定义训练基础上生成 AI 图像、视频、3D 和音频。
Setup
配置
Endpoint: (Streamable HTTP). Prefer OAuth: no credentials pass through the conversation. Client config, API-key setup for headless use, and per-client re-authentication: references/setup.md. Never ask an agent to collect, encode, or echo a secret. A connection that authenticated once and fails later is re-authenticated per client before anything else is debugged: a server-side authentication fix lands only through a fresh handshake, and names the failing layer (, , , or ) with trace ids for support.
https://mcp.scenario.com/mcpdiagnostics_runauthtenant-scopeapi-unreachablehealthyThe default toolset is wider than the core loop below: , , and are in it too and are called directly, so treat the table as the loop rather than the whole list. exposes everything. The catalog tools are the ones outside it (collections, tagging, analysis, training, members, keys): with the tool name or plain keywords as (it takes only and ) returns the schema and lane, and the matching / / runs it with , scope ids inside when the target's declares them, which nearly every catalog tool does (, which takes only , is the exception), unlike a direct tool's top-level /. The lane is the result's own , not what the verb sounds like: and are both write-class.
asset_getjob_getjobs_listmodels_list?toolsets=fullscenario_tools_searchqueryquerylimitscenario_tool_execute_readwritedelete{name, parameters}parametersinputSchemaplan_generationdescriptionteam_idproject_idpermissionasset_downloadasset_analyzeEndpoint: (Streamable HTTP)。优先使用 OAuth:对话中不传递凭据。客户端配置、用于无头使用的 API-key 设置,以及每个客户端的重新认证:references/setup.md。绝不要要求 agent 收集、编码或回显密钥。一个曾经认证成功但之后失败的连接,在调试其他任何问题之前,应先按客户端重新认证:服务端身份验证修复只能通过新的握手完成, 会指出失败层(、、 或 )并提供 trace id 以供支持。
https://mcp.scenario.com/mcpdiagnostics_runauthtenant-scopeapi-unreachablehealthy默认工具集比下面的核心循环更广:、、 和 也包含在内,可直接调用,因此请把表格视作循环而非完整列表。 暴露全部工具。目录工具(catalog tools)是核心循环之外的工具(collections、tagging、analysis、training、members、keys):使用 ,以工具名或纯关键字作为 (它只接受 和 ),返回 schema 和 lane;匹配的 / / 以 运行它,当目标的 声明了 scope id 时,将 scope id 放在 内——几乎所有目录工具都如此( 是例外,它只接受 ),这与直接工具顶层的 / 不同。lane 是结果自身的 ,而不是动词听起来的样子: 和 都属于 write 类别。
asset_getjob_getjobs_listmodels_list?toolsets=fullscenario_tools_searchqueryquerylimitscenario_tool_execute_readwritedelete{name, parameters}inputSchemaparametersplan_generationdescriptionteam_idproject_idpermissionasset_downloadasset_analyzeScope first
先确定 scope
Resolve scope first, then pass and on every later call. returns the teams with their projects; requires a , so it cannot come first. Confirm the pair with the user: a guess writes into someone else's project. A non-interactive run takes the pair from its task instructions; when they name none, stop and list the choices.
team_idproject_idteams_listprojects_listteam_idThe server fills scope in only for read-only tools with one candidate remaining; anything else fails rather than guesses, and the error names which half is wrong (see Errors and recovery). Scope errors are the most common failure here, surfacing mid-session on the first call that drops the pair once a second team or project is in play.
先解析 scope,然后在之后每次调用中传递 和 。 返回带项目的团队; 需要 ,所以不能最先调用。与用户确认这一对 id:猜错会写入别人的项目。非交互式运行从任务指令中获取这一对 id;当指令未指定时,停止并列出可选项。
team_idproject_idteams_listprojects_listteam_id服务器只会在只读工具且仅剩一个候选时自动填充 scope;其他情况宁可失败也不猜测,错误会指出哪一半是错误的(参见“错误与恢复”)。Scope 错误是这里最常见的失败,通常会在会话中途、当出现第二个团队或项目后第一次调用丢失这一对 id 时浮现。
Quick reference
快速参考
| Step | Tool | Notes |
|---|---|---|
| Resolve scope | | Once per session; pass the ids on every call |
| Find a model | | Free; |
| Get the schema | | Always before |
| Generate | | Schema-conformant |
| Wait | | Whenever |
| View / save | | Never paste raw asset URLs; |
| Inspect an asset | | Free; dimensions, duration, |
| Upload inputs | | Local files become asset_ids |
| Refine a prompt | | Advisory rewrite; needs |
| Quota / debugging | | CU consumption; |
A multi-step request ("product video with voiceover", "concept to 3D") goes to (catalog-only, read lane): plain words in , ordered steps out, each naming a tool and optional model hint; it runs nothing. Single-step: .
plan_generationdescriptionrecommend| 步骤 | 工具 | 说明 |
|---|---|---|
| 解析 scope | | 每个会话一次;每次调用传递这些 id |
| 查找模型 | | 免费; |
| 获取 schema | | 在 |
| 生成 | | 符合 schema 的 |
| 等待 | | 只要 |
| 查看 / 保存 | | 绝不要粘贴原始资产 URL; |
| 检查资产 | | 免费;尺寸、时长、 |
| 上传输入 | | 本地文件变成 asset_ids |
| 优化提示词 | | 建议性改写;需要 |
| 配额 / 调试 | | CU 消耗; |
多步骤请求(“带配音的产品视频”、“概念到 3D”)应交给 (仅目录工具,read lane):在 中用自然语言描述,输出为有序步骤,每一步指定一个工具和可选的模型提示;它不运行任何东西。单步骤:使用 。
plan_generationdescriptionrecommendWorked example
完整示例
Generating a stylized game prop image:
- with the user's own words as
recommendwhen the need is a capability;promptwithsearch,target="models",query="flux"when you have a name.public=trueranks by keyword and itssearchhold no capability key, so a capability-worded query can rank the wrong output type first. For the user's own trained models, omitfiltersonpublic(searchhas no private flag); onsearchthe flag isrecommend. Re-discover ids each time: availability differs per team.include_private_models: true - on the pick: exact field names, types, required flags, defaults, and caps such as the prompt's
model_schema_get(an overrun is a 400, never a trim). File fields take asset ids even when namedmax_length, and...Urlflags what moves the price.cost_impact: true - If the schema carries (
runs_asor"lora"), never send that model's own id to"composition". Itsmodel_runholds the real call:run_with.required_argumentsthere is the base model, and itsmodel_id(theparametersorloraswiring) merge into inputs from the same schema. SendingmodelIdalone discards your prompt.required_arguments - Optional: rewrites a thin prompt into an on-model one; pass the discovered id (a LoRA's own, not its base) and the draft
prompt_spark. Skip deliberate prompts.prompt - with
model_runand schema-conformantmodel_id. If cost matters (the default assumption unless the user says otherwise), price first withparameters, a top-level argument besidedry_run: true: no job is created and the response'smodel_idis the exact payload's price; acreativeUnitsCostcost quote assumes defaults, and the schema'srecommendfields move the real number. Then run: asset_ids come back, or acost_impactforjob_id. Thejobs_waitbeside it isstatuswhen the server's wait budget ran out; within_progressit is the backend's live word at creation (wait=false,queued,in-progress), a spelling that is not a different state.warming-up - with
jobs_wait(up to 32); each completed row carriesjob_ids=[...]andassetIds, so nocuCostfollow-up; on timeout re-call with the returnedjob_getaspending_job_ids. Failed jobs are reimbursed, except xAI generations stopped by moderation.job_ids - shows the asset inline; its
asset_displaypicks the rendering:format(the default) returns an inline image plus links and viewer data;displayreturns a lighter payload for a host that renders the interactive widget;viewerandjsonreturn metadata and links.markdowndoes not disable a host's widget. For PNG files, usedisplaywithasset_download, one call per asset.format: "png"returns a file URL (save withasset_download, it may redirect).curl -Lis an image conversion (format,png,webp, andjpgto keep an animated GIF animated: thegifdefault flattens it to one frame) and nothing else; omit it for video, 3D, and audio. Whenpngreportscurlorhost_not_allowedwhile MCP calls work, check the host's proxy or sandbox egress policy. A CDN 403 alone does not establish the cause; request a fresh download URL before diagnosing it: Sandbox network access names the setting that lifts it, an organization-level allowlist on some hosts that the user may not be able to change. Meanwhile hand over theCONNECT tunnel failed, response 403thatapp_urlreturns, where the user downloads directly and, for a mesh, picks the 3D export format the app offers, none of whichasset_displayconverts to. The signed URL also opens in a browser but expires, so it is a last resort, never the deliverable.asset_download
Local inputs go up with : always , , and (, , , ), plus exactly one of or , since the call fails without either. Prefer , the file's exact byte count read from disk, and omit : the reply carries presigned part URLs and ; PUT each part's raw bytes to its URL with no added headers (a checksum header makes the store answer 403), check every PUT returned 200, then with the . Inline base64 only under 100KB (that path returns the asset directly, with no complete step); a larger file is rejected naming the cap. Scope rides on both; they take no other fields: no parts list, no etags. The server decodes the file at completion, so , , or means the uploaded image could not be decoded: check for a corrupt source, a truncated or re-encoded body, a missing part, or a mismatched . Confirm the local file opens, its content type matches, and its byte count is correct, then start over with a fresh and raw PUTs; never re-complete the same . at upload lists what accepts: convert locally first. A host with no shell cannot PUT parts at all; the user uploads in the web app at app.scenario.com and the agent continues from the asset id.
upload_assetfile_namecontent_typekindimageaudiovideo3dfile_sizedatafile_sizedatainstructionsupload_asset_completeupload_iddataUpload upl_… failed: Corrupt JPEG datapremature end of data segmentbad Huffman codelibpng read errorfile_sizeupload_assetupload_idUnhandled image formatkind: "image"Filing is part of delivering, not a tidy-up: run the catalog tools above with arguments under (never , which the executor drops silently, surfacing as a scope error that is not one). takes a name and the scope pair only; sent there is ignored without an error, so adding is always a second call, with and , and re-adding a filed asset is a hard 400 naming the duplicate: drop it and continue. Confirm membership with and read each record's ; lags on a fresh write. takes at most 49 ids per call (past it, 400 ), so chunk a larger set. is additive, one per call, so a set is one call per asset, and a tag the asset already carries returns 400 : read off first and send only the missing ones; skip the write when none are missing.
parametersargumentscollection_createasset_idscollection_add_assetscollection_idasset_idsassets_get_bulkcollectionIdssearchfilters={"collection_ids": [...]}collection_add_assetsYou can not add more than 49 assets at onceasset_add_tagsasset_idDuplicated tagtagsasset_getFor reusable templates or reference content, follow the shared asset lifecycle: resolve existing assets, stage new versions, publish only through a supported operation, and verify public access before recording public IDs. Uploading and filing alone are not publication.
生成风格化游戏道具图像:
- 当需求是能力时,用用户自己的话作为 调用
prompt;当你知道名称时,用recommend、target="models"、query="flux"调用public=true。search按关键字排序,且其search没有能力键,因此用能力措辞的查询可能把错误的输出类型排在前面。对于用户自己训练的模型,在filters上省略search(public没有 private 标志);在search上该标志是recommend。每次重新发现 id:不同团队的可用性不同。include_private_models: true - 对选中的模型调用 :确切的字段名、类型、必填标志、默认值和上限,例如提示词的
model_schema_get(超出会返回 400,绝不会自动截断)。文件字段即使命名为max_length也接受 asset id;...Url标记哪些字段会影响价格。cost_impact: true - 如果 schema 带有 (
runs_as或"lora"),绝不要将该模型自身的 id 传给"composition"。它的model_run保存了真正的调用:其中的run_with.required_arguments是基础模型,其model_id(parameters或loras接线)会从同一 schema 合并到输入中。仅发送modelId会丢掉你的提示词。required_arguments - 可选:将单薄提示词改写成适合模型的版本;传入发现的 id(LoRA 自身的 id,而非其基础模型 id)和草稿
prompt_spark。刻意写好的提示词可跳过。prompt - 使用 和符合 schema 的
model_id调用parameters。如果成本很重要(默认假设,除非用户另有说明),先用model_run定价,它是dry_run: true旁边的顶层参数:不会创建任务,响应的model_id就是该 payload 的确切价格;creativeUnitsCost的成本报价假设默认值,schema 的recommend字段会改变实际数字。然后运行:返回 asset_ids,或返回交给cost_impact的jobs_wait。旁边的job_id在服务器等待预算用尽时是status;当in_progress时,它是后端创建时的实时状态(wait=false、queued、in-progress),这种拼写差异并不表示不同状态。warming-up - 使用 (最多 32 个)调用
job_ids=[...];每个完成行都带有jobs_wait和assetIds,因此不需要再调用cuCost;超时后用返回的job_get作为pending_job_ids重新调用。失败的任务会得到补偿,但被审核拦截的 xAI 生成除外。job_ids - 内联显示资产;其
asset_display决定渲染方式:format(默认)返回内联图像以及链接和查看器数据;display返回更轻量的 payload,供渲染交互式 widget 的主机使用;viewer和json返回元数据和链接。markdown不会禁用主机的 widget。对于 PNG 文件,使用display并设置asset_download,每个资产一次调用。format: "png"返回文件 URL(使用asset_download保存,它可能会重定向)。curl -L是图像转换(format、png、webp和jpg——gif可保持动画 GIF 动起来:默认的gif会将其压平为单帧),不支持其他类型;视频、3D 和音频请省略它。当 MCP 调用正常但png报告curl或host_not_allowed时,检查主机的代理或沙箱出口策略。单独的 CDN 403 不能确定原因;在诊断前先请求一个新的下载 URL:沙箱网络访问 指出了解除该限制的设置——在某些主机上是组织级允许名单,用户可能无法更改。同时,把CONNECT tunnel failed, response 403返回的asset_display交给用户,让用户直接下载;对于网格(mesh),让用户选择应用提供的 3D 导出格式,这些格式app_url都不会转换。签名 URL 也可以在浏览器中打开,但会过期,所以是最后手段,绝不是交付物。asset_download
本地输入通过 上传:始终提供 、 和 (、、、),以及 或 中的恰好一个,因为缺少任何一个调用都会失败。优先使用 (从磁盘读取的文件确切字节数),并省略 :回复会携带预签名分片 URL 和 ;将每个分片的原始字节 PUT 到其 URL,不要添加额外头部(校验和头部会导致存储返回 403),检查每个 PUT 都返回 200,然后调用 并传入 。内联 base64 仅限 100KB 以下(该路径直接返回资产,没有 complete 步骤);更大的文件会被拒绝并说明上限。Scope 同时应用于这两个调用;它们不接受其他字段:没有分片列表,没有 etags。服务器在完成时解码文件,因此 、、 或 表示上传的图像无法解码:检查源文件是否损坏、正文是否被截断或重新编码、是否有缺失分片或 是否不匹配。确认本地文件可打开、内容类型匹配、字节数正确,然后重新发起一次全新的 和原始 PUT;绝不要重新 complete 同一个 。上传时的 会列出 接受的内容:先在本地转换。没有 shell 的主机根本无法 PUT 分片;用户可在 app.scenario.com 的 Web 应用中上传,agent 从 asset id 继续。
upload_assetfile_namecontent_typekindimageaudiovideo3dfile_sizedatafile_sizedatainstructionsupload_asset_completeupload_iddataUpload upl_… failed: Corrupt JPEG datapremature end of data segmentbad Huffman codelibpng read errorfile_sizeupload_assetupload_idUnhandled image formatkind: "image"归档是交付的一部分,而不是事后整理:使用上面的目录工具,参数放在 下(绝不要放在 下,executor 会静默丢弃,表现为一个并非 scope 错误的 scope 错误)。 只接受名称和 scope 对;发送到那里的 会被忽略且不报错,因此添加总是第二次调用:,带上 和 。重新添加已归档的资产会返回硬 400 并指出重复:放弃该资产并继续。用 确认成员关系,并读取每条记录的 ; 的 在刚写入后会有延迟。 每次调用最多接受 49 个 id(超过会返回 400 ),因此更大的集合要分块。 是追加式的,每次调用一个 ,因此一个集合需要每个资产一次调用;资产已携带的标签会返回 400 :先从 读取 ,只发送缺失的标签;没有缺失就跳过写入。
parametersargumentscollection_createasset_idscollection_add_assetscollection_idasset_idsassets_get_bulkcollectionIdssearchfilters={"collection_ids": [...]}collection_add_assetsYou can not add more than 49 assets at onceasset_add_tagsasset_idDuplicated tagasset_gettags对于可复用模板或参考内容,请遵循共享资产生命周期:先解析现有资产,暂存新版本,仅通过受支持的操作发布,并在记录公共 ID 前验证公共访问。仅上传和归档不算发布。
Errors and recovery
错误与恢复
| Error | Recovery |
|---|---|
| Nothing resolved: |
| Several fit: present the options; the user picks (non-interactive: task instructions name the pair, else stop and list) |
| 403 Forbidden | Usually wrong scope, not missing: re-check the id pair |
| 403 naming a plan | Surface the upgrade or switch models; retrying never clears it. |
429 with | Per-team generation concurrency ceiling: keep at most |
| 429 naming a quota, balance, or seat limit | Read the reason and |
| 429 with an explicit retry delay | Respect the returned delay before retrying; this is not evidence that the user needs an upgrade |
Other 429, including an unfamiliar | Do not classify every other action as a count quota, or infer a training quota's behavior from its name. Report the error and run |
| Not an error: re-call with the returned |
Transport error on | The request may still have landed: |
400 | A launched job is committed spend: |
400 | |
| Read the byte count from disk and send it as |
| The uploaded image could not be decoded: check the source file, content type, byte count, and part transfers before a fresh upload; re-completing does not repair corrupt bytes |
404 on | The id does not exist and no retry makes it appear: re-read |
400 | |
| It ranks on live data and commonly runs 30 seconds, sometimes over a minute: wait or re-call it; do not fall back to |
| 错误 | 恢复 |
|---|---|
| 未解析任何内容: |
| 多个匹配:展示选项;由用户选择(非交互:任务指令指定这一对,否则停止并列出) |
| 403 Forbidden | 通常是 scope 错误而非缺失:重新检查 id 对 |
| 403 提及 plan | 提示升级或切换模型;重试永远无法清除。 |
429 且 | 每个团队的生成并发上限:保持在飞任务数不超过 |
| 429 提及配额、余额或席位限制 | 一起阅读 reason 和 |
| 429 且带有明确的重试延迟 | 重试前遵守返回的延迟;这不是用户需要升级的证据 |
其他 429,包括不熟悉的 | 不要将每个其他操作都归类为计数配额,也不要以名称推断训练配额的行为。报告错误,并在选择恢复方案前在同一 scope 内运行 |
| 不是错误:用返回的 |
| 请求可能已经到达:任何重跑前先 |
400 | 已启动的任务是承诺支出: |
400 | |
| 从磁盘读取字节数并作为 |
| 上传的图像无法解码:在重新上传前检查源文件、内容类型、字节数和分片传输;重新 complete 无法修复损坏的字节 |
| 该 id 不存在,重试也不会使其出现:重新读取 |
400 | |
| 它基于实时数据排序,通常需要 30 秒,有时超过一分钟:等待或重新调用;不要因为能力需求就回退到 |
Common mistakes
常见错误
- A bare value where the schema says : silently dropped, the run ignoring your reference or LoRA.
array: trueon the output echoes what the run consumed (asset_get,metadata.referenceImages), the cheapest proof it was not.parentId - Taking 's
recommendblindly: readranked[0]first. Onnext_step.type, present the options; the user's pick wins (non-interactive: task instructions, elseask_user). Onproceed, preferproceed, else the firstspecialty.model_identry its own text does not mark deprecated, readingrankedandtradeoffas well asexplanation, since the flag lands in any of them: the ranking is by measured performance, not by lifecycle, so a deprecated member can top it.caveats - Debugging blind: the MCP prompt (or
diagnosewith the scope pair the failure happened under and anydiagnostics_runids seen asmcpt_) returns trace ids;observed_trace_idsanswers credit questions.usage - Guessing a file field's name: 400 (or
Input image is required,images,referenceImages,startImage,frontImage,video, each a different model's name for the same idea) means the payload never carried the field the schema'smodellist names, so copy that name verbatim; a URL in a file field reads as missing too, since file fields take asset ids only.required - Feeding an image field a video, audio, or 3D asset: 400 lists the image types it accepts.
Unhandled image formatreports the asset'sasset_get; pull a still with the clip'smimeTypewhen the model wants an image.firstFrame - on
filters.kindwithsearch: a 400target="models", since"kind" is not a filterable fielddescribes assets. Narrow models withkind(the architecture) orfilters.type, or go throughtagsfor a capability.recommend - Filtering by
models_listwithouttype: a 400 says so. A private listing narrows byprivacy: "public"orstatus, or goes throughmodality(private by default).search
- schema 声明 时传入了裸值:会被静默丢弃,运行会忽略你的参考图或 LoRA。对输出调用
array: true会回显运行实际消费的内容(asset_get、metadata.referenceImages),这是证明未生效的最便宜方式。parentId - 盲目采用 的
recommend:先读ranked[0]。若是next_step.type,展示选项;以用户选择为准(非交互:按任务指令,否则ask_user)。若是proceed,优先使用proceed,否则使用第一个specialty.model_id条目中其自身文本未标记为 deprecated 的项,并阅读ranked、tradeoff和explanation,因为该标志可能出现在其中任何一处:排序依据是实测性能而非生命周期,因此已弃用成员也可能排在最前。caveats - 盲目调试:MCP 提示(或使用失败发生时的 scope 对和任何观察到的
diagnoseid 作为mcpt_调用observed_trace_ids)会返回 trace id;diagnostics_run回答积分问题。usage - 猜测文件字段名:400 (或
Input image is required、images、referenceImages、startImage、frontImage、video——同一个概念在不同模型中名称不同)表示 payload 从未携带 schema 的model列表中指定的字段,因此要逐字复制该名称;文件字段中的 URL 也会被视为缺失,因为文件字段只接受 asset id。required - 给图像字段喂视频、音频或 3D 资产:400 会列出其接受的图像类型。
Unhandled image format报告资产的asset_get;当模型需要图像时,用剪辑的mimeType提取静帧。firstFrame - 在 的
target="models"上使用search:会返回 400filters.kind,因为"kind" is not a filterable field描述资产。用kind(架构)或filters.type缩小模型范围,或通过tags按能力查找。recommend - 在缺少 的情况下按
privacy: "public"过滤type:会返回 400。私有列表按models_list或status缩小范围,或通过modality(默认私有)。search