Skip to main content
Glama

Server Details

Generate 3D models from images or text with AI, then retexture or convert them to STL, 3MF or OBJ.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 18 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.9/5.0

Scored across 14 tools

Disambiguation4/5

Most tools have clearly distinct purposes (generate_3d vs start_batch vs convert_model vs estimate_cost are well separated). Two mild overlaps exist: `generate` can also start 3D jobs while `generate_3d` is 'preferred', and `get_job` already returns result files that `list_job_files` separately lists by format. Descriptions mostly resolve these, and viewer_job_state explicitly disclaims direct use.

Naming Consistency4/5

Almost everything follows a verb_noun pattern: convert_model, estimate_cost, get_job, list_models, start_batch, retry_batch, search_library. Minor deviations are the bare verb `generate` and the noun-style `viewer_job_state`, but the set is otherwise highly predictable.

Tool Count4/5

14 tools is well within the healthy 3-15 range and each maps to a real workflow step (choose model, price, generate, poll, batch, convert, search). Slightly padded by `viewer_job_state`, which is explicitly not for agent use.

Completeness4/5

The surface covers the full generation lifecycle: model discovery, pricing, job creation, polling, file listing, library search, batch start/get/list/retry, conversion, and balance. Gaps are minor — no cancel_job or cancel_batch, and no delete for library items — but agents can work around them.

Available Tools

14 tools
convert_modelConvert, compress or repair a Library modelA
Idempotent
Inspect

Convert one of the account’s Library 3D models (a GLB) to GLB, STL, 3MF, OBJ or PLY on the server, optionally simplifying it, compressing its geometry, scaling it to a real-world size, moving its origin or repairing it for printing (holes, flipped faces, debris; STL, 3MF, OBJ or PLY), and file the result in the Library as a new creation made from it. Free (no credits) and answered at once. STL and 3MF are millimetres and Z-up for slicers; OBJ and PLY are geometry only, in metres; GLB keeps materials and textures and can be meshopt-compressed. Take asset_id from get_job or search_library (a file of a finished 3D job). Models over 50 MB or 2,000,000 triangles, and Draco-compressed GLBs, are refused. The same conversion run twice returns the same creation.

NameRequiredDescriptionDefault
nameNo
formatNoThe file to make; glb when omitted.
originNoMove the origin to the bottom centre (default when resizing) or the centre.
repairNoRepair for printing first: weld, drop broken and duplicate faces and loose debris, fix flipped faces, fill holes. stl, 3mf, obj, ply only; up to 200,000 triangles (simplify first for more).
asset_idYesA GLB file of one of your Library models.
simplifyNoShare of triangles to keep: 1 (default), 0.75, 0.5 or 0.25.
project_idNo
compressionNoGLB only: meshopt (default, smallest) or none.
resize_heightNoScale the model to this height, in metres.
resize_longest_sideNoScale the model so its longest side is this long, in metres. Not with resize_height.

Output Schema

NameRequiredDescription
urlYesPublic https download URL of the file.
formatYes
job_idYesThe new Library creation: pass to get_job like any job.
repairNoWhat repair found and fixed, when repair was asked for.
createdYesFalse when the same conversion was already in the Library: that creation is returned.
asset_idYesIts file, for another convert_model.
size_bytesYes
content_typeYes
triangles_afterYes
triangles_beforeYes

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: states it is free/creditless, answered synchronously, non-destructive (files the result as a NEW creation made from the source), and reinforces idempotency with 'the same conversion run twice returns the same creation'. Format-specific behaviors (units, axis orientation, material retention) and the 200k-triangle repair ceiling are disclosed.

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

Conciseness4/5

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

Front-loads the core capability and keeps every clause informative (formats, limits, idempotency, unit conventions). It is a dense single block rather than scannable structure, which slightly hurts readability but nothing is filler.

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

Completeness5/5

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

For a 10-parameter conversion tool with an output schema present, the description covers inputs sources, format semantics, constraints, cost, idempotency, and destructive-vs-additive behavior. Nothing an agent needs to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 80%, so the baseline is 3, but the description adds real semantics beyond the schema: STL/3MF are millimetres and Z-up for slicers, OBJ/PLY are geometry-only in metres, GLB keeps materials/textures and supports meshopt. It also clarifies repair applicability and the simplify-before-repair interaction.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (convert/compress/repair) and resource (Library 3D model GLB) with the full set of output formats, and names sibling routes (get_job, search_library) for the input asset. An agent can distinguish this from generate_3d or list_models without opening schemas.

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

Usage Guidelines4/5

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

Explicitly tells the agent where to obtain asset_id (get_job or search_library, a finished 3D job file) and lists refusal conditions (>50 MB, >2,000,000 triangles, Draco GLBs). It does not explicitly contrast itself against siblings like generate_3d beyond naming input sources, so it falls short of full when/when-not routing.

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

estimate_costEstimate credit costA
Read-onlyIdempotent
Inspect

Price a generation before starting it: the credits this model would charge for these options, and whether the current balance covers it. Uses the same validation and price calculation as generate_3d and generate, so for a valid request the figure is exactly what is charged. Omit scene to price every scene of the model. Nothing is charged and nothing is started.

NameRequiredDescriptionDefault
modelYesA model id from list_models.
sceneNoA scene id from list_models, e.g. 'image-to-3d'.
promptNo
optionsNoThe options you intend to pass; they change the price.

Output Schema

NameRequiredDescription
modelYes
quotesYes
balanceYesCredits the account holds now.
availableYes
media_typeYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, and the description usefully reinforces this with "Nothing is charged and nothing is started." More valuable is the disclosure that it runs the same validation as the real generation calls, so invalid requests fail rather than return a partial estimate, and that a valid request's figure is exactly what gets charged. It doesn't cover error shapes or whether pricing can drift between estimate and execution.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what the tool returns, followed by accuracy guarantees and the no-side-effects statement. Every sentence adds a distinct fact with no repetition of the schema or annotations.

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

Completeness5/5

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

An output schema exists, so return shape needn't be spelled out, and the description still summarizes the two fields an agent cares about. For a read-only, four-parameter tool with a nested options object, the description covers purpose, accuracy semantics, side-effect status and the scene-omission behavior without leaving anything an agent needs unresolved.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 75%, so the baseline is 3, but the description adds genuine meaning: omitting scene prices every scene of the model, a multi-value behavior the schema does not convey. It also frames options explicitly as the options the caller intends to pass and notes they change the price. The prompt parameter is undocumented in both the schema and the description, which is the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-and-resource pair ("Price a generation") and immediately defines the two return values: the credit charge for these options and whether the balance covers it. It also distinguishes itself from the siblings generate_3d and generate by explaining that it shares their validation and price calculation but does not start anything.

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

Usage Guidelines4/5

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

It clearly states the pre-flight context ("before starting it") and points to the sibling tools whose pricing it mirrors, so an agent knows to call this before generate/generate_3d. It also gives a usage rule for an optional parameter ("Omit scene to price every scene of the model"). It stops short of explicit when-not-to-use guidance, for example telling the agent to call get_balance instead for a pure balance check.

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

generateStart a generationAInspect

Start an async AI generation of any media type and return its job id. The input shape depends on the model (see list_models); for 3D prefer generate_3d. To run an image preset (list_models returns them: figurine, style, pose, convert), send mediaType "image", scene "image-to-image", options.image (the picture, or the subject then a reference), options.preset (its id) and optionally options.preset_addons and options.preset_background; the server composes the prompt, and prompt is then only your extra instructions. Bills credits: check the price with estimate_cost first. Pass a stable idempotencyKey when retrying — a retry with the same key replays the original job instead of billing twice. Then call get_job.

NameRequiredDescriptionDefault
modelYes
sceneNo
promptNoThe prompt; with options.preset, only your additional instructions.
optionsNoModel-specific options; derive from list_models (include_inputs). For an image preset: preset (its id), preset_addons, preset_background.
mediaTypeYesGeneration family, e.g. 'image' | 'video' | '3d' | 'music' — see list_models.
workflowTypeNo
idempotencyKeyNo
expectedCreditsNoThe credits estimate_cost answered for this request. If the price has moved since, nothing is started or charged and the error (price_changed) gives the new price.

Output Schema

NameRequiredDescription
modelYes
sceneYes
job_idYesPass to get_job to follow progress.
statusYespending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded.
dedupedYesTrue when an earlier call with the same idempotency key already started this job: nothing was charged again.
outputsYesHow many results this job makes.
media_typeYes
credits_chargedYesCredits taken from the balance.

TDQS

A4.4/5.0
Behavior3/5

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

The description adds real behavioral context beyond the annotations: it bills credits, the call is async and returns a job id, retries with the same idempotencyKey replay the original job instead of double-billing, and a price_changed error starts nothing. Note that idempotentHint=false is not contradicted — the description explains that idempotency is opt-in via idempotencyKey, which reconciles with the annotation. What remains unstated is what a started-but-failed job means for credits and what the response envelope contains.

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

Conciseness4/5

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

The core purpose, the sibling routing, and the billing/idempotency warnings are front-loaded, and the preset paragraph is genuinely necessary detail. The preset clause is a dense, comma-chained run-on that costs some readability, but no sentence is filler.

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

Completeness5/5

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

For a mutating, credit-billing, async tool with 8 parameters and a nested options object, the description covers routing, required call shape, cost safety, retry safety, and the next step. An output schema exists, so the absence of return-value detail is not a gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 50% schema description coverage, the description carries real weight: it defines mediaType values ('image'), scene ('image-to-image'), the options.image ordering (picture, or subject then reference), options.preset/preset_addons/preset_background, and the narrowed meaning of prompt when a preset is used. It also explains idempotencyKey and the price_changed behavior of expectedCredits. model and workflowType are left implicit, which is the main gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Start an async AI generation of any media type') plus the concrete return ('return its job id'), and explicitly differentiates from the sibling generate_3d for 3D work. An agent can distinguish it from generate_3d, estimate_cost, and start_batch without opening any schema.

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

Usage Guidelines5/5

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

Gives explicit routing: consult list_models for the input shape, prefer generate_3d for 3D, call estimate_cost before this to check price, and call get_job afterwards. It also spells out the exact call shape for the image-preset case, so when-to-use is fully resolved rather than implied.

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

generate_3dGenerate a 3D modelAInspect

Start a 3D generation and return its job id at once. mode picks the input: text (prompt), image (options with the image URL), multiview (several view images), sketch, or model (edit an existing 3D model). Take the model id and its option names from list_models, and check the price with estimate_cost first: this spends credits. Pass a stable idempotency_key when retrying so a retry replays the same job instead of billing twice. Then call get_job to follow it.

NameRequiredDescriptionDefault
modeYesWhich input the model is given.
modelYesA 3D model id from list_models.
promptNo
optionsNoModel-specific options; take the field names from list_models with include_inputs, and price them with estimate_cost first.
idempotency_keyNoReuse the same value when retrying this exact request.
expected_creditsNoThe credits estimate_cost answered for this request. If the price has moved since, nothing is started or charged and the error (price_changed) gives the new price.

Output Schema

NameRequiredDescription
modelYes
sceneYes
job_idYesPass to get_job to follow progress.
statusYespending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded.
dedupedYesTrue when an earlier call with the same idempotency key already started this job: nothing was charged again.
outputsYesHow many results this job makes.
media_typeYes
credits_chargedYesCredits taken from the balance.

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations, it discloses that the call spends credits, that credits are only committed after a successful start, that a stale price aborts with a price_changed error and nothing is charged, and that idempotency_key prevents double billing. That is exactly the cost/irreversibility context an agent needs before firing a mutating, credit-consuming request. The lack of inherent idempotency (idempotentHint=false) is consistent with the guidance to supply a key rather than a contradiction.

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

Conciseness5/5

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

Purpose and immediate return value are front-loaded, followed by mode semantics, then prerequisites, then the safety rule and the follow-up call. Every sentence carries operational information and none is redundant.

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

Completeness5/5

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

For a credit-spending, asynchronous, nested-options tool with 6 parameters, the description covers input interpretation, cost verification, retry safety, error behavior, and the polling hand-off to get_job. With an output schema present, it does not need to describe the returned job id further.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 83%, so the baseline is 3; the description earns above that by explaining the semantic of each mode value and by tying expected_credits to the estimate_cost/price_changed flow. It still leaves the shape of `options` to list_models rather than describing any common fields, so it does not fully compensate for the remaining gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource plus the async contract: 'Start a 3D generation and return its job id at once.' It also enumerates what each mode consumes (text prompt, image URL, view images, sketch, existing model), so an agent knows exactly what the tool produces. It does not differentiate itself from the sibling `generate` tool, which prevents a clean 5.

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

Usage Guidelines5/5

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

Gives an explicit sequence: pick a model id and option names from list_models, price it with estimate_cost, then call get_job to follow progress. It also states a conditional rule for retries (pass a stable idempotency_key) and warns that this call spends credits, so prerequisites and hand-offs are all spelled out.

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

get_balanceCheck credit balanceA
Read-onlyIdempotent
Inspect

Get the credits this account can spend now (and how many of them come from the subscription or are permanent), the plan name when there is one, and — when you are connected with an API key that has a monthly credit limit — that limit, what the key has used this month, and when it resets. Read-only.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
planYesThe active subscription plan; null on pay-as-you-go.
accountYes
creditsYes
api_key_limitYesOnly for an API key with a monthly credit limit.

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, and the description's closing 'Read-only' merely restates that. The only added behavioral nuance is that the monthly-limit fields appear conditionally when connected via a rate-limited API key, which is helpful but largely a return-value detail the output schema already covers.

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

Conciseness4/5

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

A single front-loaded sentence leads with the primary value (spendable credits) before the optional details. It is dense with parenthetical asides but every clause describes a real returned field, so little is wasted.

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

Completeness4/5

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

With no parameters, a full output schema, and complete annotations, the description needs only to frame what the call answers, which it does, including the conditional API-key branch. Slightly more guidance on when an agent should reach for it would make it fully sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. It correctly signals a no-argument call by not introducing any input concepts.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and a well-defined resource (spendable credits, their subscription/permanent split, plan name, and API-key monthly limit with usage and reset). This clearly separates it from cost-forecasting siblings like estimate_cost, though no sibling is named explicitly.

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

Usage Guidelines3/5

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

Usage is only implied: an agent can infer this is a pre-flight check for available credits, but the description never says when to call it versus estimate_cost or what happens if the balance is zero. No exclusions or alternatives are stated.

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

get_batchGet a batch’s progressA
Read-onlyIdempotent
Inspect

The state of a batch and of each picture in it: queued, running, done, failed or cancelled, the job_id of its run once started (get_job gives the files), credits charged, and whether retry_batch can run it again.

NameRequiredDescriptionDefault
batch_idYesThe batch id start_batch returned.

Output Schema

NameRequiredDescription
itemsYes
modelYes
sceneYes
countsYes
statusYes
batch_idYes
created_atYes
item_countYes
settled_atYes
quoted_creditsYesWhat the batch costs if every picture runs.
charged_creditsYesWhat its runs were charged so far.
per_item_creditsYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior, and the description builds on that by disclosing content an agent would otherwise have to discover: per-picture statuses, the job_id linkage once a run starts, credits charged, and whether a retry is possible. No auth, rate-limit, or error behavior is described, which keeps it from a 5.

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

Conciseness4/5

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

A single dense sentence, front-loaded with the resource state and then the useful extras. The enumerated status list is long but earns its space by telling the agent exactly what values to expect.

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

Completeness4/5

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

With an output schema present, the description does not need to enumerate return values, yet it does so usefully and ties them to sibling tools. It omits only edge behavior such as what happens for an unknown or not-yet-started batch.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter with 100% schema description coverage, and the schema already explains that batch_id is the value start_batch returned. The description adds nothing beyond that, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (a batch) and precisely scopes what is returned: batch state plus per-picture state, with the full status vocabulary spelled out. It also distinguishes itself from get_job by noting that get_job is where the files live, so an agent can separate the two without opening schemas.

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

Usage Guidelines4/5

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

Placement in the workflow is clear from the mentions of start_batch's id, get_job for files, and retry_batch for re-runs, which implicitly define this as the polling/progress-inspection step. There is no explicit when-not or prerequisite statement, but the routing hints are strong.

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

get_jobGet job status and resultsA
Read-onlyIdempotent
Inspect

Get a job started by generate_3d or generate: its status, progress, credits charged and refunded, and — when it has finished — the result files with their public download URLs, including other formats where the model returned them. Poll about every 5–10 seconds while status is pending or processing; stop when is_terminal is true.

NameRequiredDescriptionDefault
job_idYesThe job id returned by generate_3d or generate.

Output Schema

NameRequiredDescription
errorYes
filesYesResult files with public download URLs; empty until ready.
modelYes
sceneYes
job_idYes
statusYespending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded.
creditsYes
outputsYes
progressYes0 to 1: finished outputs over expected outputs.
created_atYes
media_typeYes
is_terminalYesTrue once the job is final and will not change again.
completed_atYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds real behavioral detail beyond that: the polling cadence, the terminal-state stop condition, and the fact that credits can be refunded and that alternate format files may be included. Since an output schema exists, the return-value enumeration is partly redundant, keeping this at a 4 rather than 5.

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

Conciseness5/5

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

Two sentences, both front-loaded: the first says what comes back, the second says how to poll and when to stop. No filler, and the operational instruction is placed where an agent driving the call will read it.

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

Completeness5/5

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

With a single required param and a full output schema, the remaining agent-facing unknowns are polling behavior and termination, and the description covers both explicitly along with the credits/refund nuance. Nothing needed to call this correctly is left unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With one parameter at 100% schema coverage, the baseline is 4. The description adds a small amount of provenance ('started by generate_3d or generate'), which matches the schema's own wording, so it neither compensates for a gap nor adds much new syntax detail.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('Get a job') and immediately ties it to the producing siblings (generate_3d, generate), then enumerates what comes back: status, progress, credits charged/refunded, and result file URLs. That is enough for an agent to distinguish get_job from list_job_files or get_batch without reading the schema.

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

Usage Guidelines4/5

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

It gives concrete operational guidance — poll every 5–10 seconds while status is pending/processing, and stop when is_terminal is true — which is exactly the when-to-use context an agent needs. It does not explicitly name alternatives (e.g. list_job_files for just file listing), so it falls short of a 5.

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

list_batchesList recent batchesB
Read-onlyIdempotent
Inspect

The account’s batches of one scene from the last 24 hours, newest first, with each picture’s progress — and how many pictures its plan lets one batch hold (allowance; 0 means the plan includes no batches).

NameRequiredDescriptionDefault
limitNo
sceneYes

Output Schema

NameRequiredDescription
batchesYes
allowanceYes

TDQS

B3.2/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, idempotent, openWorld=false, non-destructive), and the description adds real behavioral facts beyond them: results are limited to the last 24 hours, sorted newest first, and include per-picture progress plus a plan allowance where 0 means batches are unavailable. Those are non-obvious traits an agent would otherwise only discover at runtime.

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

Conciseness4/5

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

One sentence, front-loaded with the resource and scope, with no wasted wording. The trailing parenthetical about allowance is slightly crammed but carries genuinely useful semantics rather than filler.

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

Completeness3/5

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

An output schema exists, so return-shape explanation is optional, and the description still usefully flags progress and allowance fields plus the allowance=0 edge case. What's missing is an explanation of how the two input parameters behave (especially limit's cap of 10) in this lightly annotated-by-schema definition.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate and does not fully. It implies the 'scene' parameter through 'batches of one scene' but never explains what a scene identifier is or its format, and the 'limit' parameter (max 10) is not mentioned at all despite governing the 24-hour result set.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the resource (batches), the scope (one scene, last 24 hours) and the ordering (newest first), which is enough for an agent to know exactly what it returns. It never names a sibling like get_batch (single batch) or list_job_files, so differentiation is implicit rather than stated.

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

Usage Guidelines2/5

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

There is no guidance on when to call this versus get_batch, start_batch or list_job_files, and no exclusions. The 24-hour/one-scene scope hints at applicability but the agent must infer it from a description of return content, not from explicit usage instructions.

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

list_job_filesList job download formatsA
Read-onlyIdempotent
Inspect

List the files a finished job already has, one per format: the main result plus any alternate formats the model returned (for 3D models, for example glb with fbx or usdz), each with a public download URL. Pass format to find one format. This does not convert: if the format asked for is not there, available_formats says what is, and a model can be exported to other formats from the web app model viewer.

NameRequiredDescriptionDefault
formatNoA file format to look for, e.g. 'glb' or 'stl'.
job_idYesThe job id returned by generate_3d or generate.

Output Schema

NameRequiredDescription
noteYes
filesYes
job_idYes
statusYespending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded.
requested_formatYes
available_formatsYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent, non-destructive behavior; the description adds meaningful context beyond that by noting the job must be finished, that each format has a public download URL, and that the tool does not perform conversion. Those are behavioral constraints an agent needs before calling it.

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

Conciseness5/5

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

The description is front-loaded with the core purpose, then adds the format filter behavior and the non-conversion caveat. The sentences are dense but purposeful, with no filler.

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

Completeness5/5

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

Given the rich annotations, the output schema, and full input schema coverage, the description provides everything an agent needs: what the tool returns conceptually, how format is used, and where to go for conversion. No material gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds operational meaning to format: it is a lookup filter rather than a conversion request, and if it is unavailable the response's available_formats field explains what exists. That goes beyond the schema's short format example.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it lists files a finished job already has, one per format, with public download URLs. It also distinguishes the tool from conversion by explicitly saying it does not convert, which separates it from convert_model.

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

Usage Guidelines5/5

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

It explains when to use the format parameter to target one format, what happens when the requested format is absent via available_formats, and redirects conversion/export needs to the web app model viewer. This gives clear usage boundaries and alternatives.

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

list_modelsList models and pricesA
Read-onlyIdempotent
Inspect

List the models this account can generate with, grouped by what they make (3D, image, …): each with its id, the scenes (input modes such as text-to-3d or image-to-3d) it supports, and the credits it costs at default options. Call this first to choose a model id, then estimate_cost for an exact price. Set include_inputs to also get the option fields of each scene (names, allowed values, ranges). An account whose app has Image Maker also gets presets: ready-made picture conversions (figurine, style, pose, …) to run with generate by passing options.preset. batches lists the scenes start_batch can run over several Library pictures at once, with the models each may use.

NameRequiredDescriptionDefault
media_typeNoOnly models of this kind, e.g. '3d' or 'image'.
available_onlyNoLeave out models that are listed but cannot be started.
include_inputsNoInclude the option fields of every scene (larger result).

Output Schema

NameRequiredDescription
countYes
app_idYes
modelsYes
batchesYesScenes start_batch can run over several pictures; empty when the app offers none.
presetsYesImage presets this app offers; empty when it has none or media_type is not image.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, non-destructive and closed-world, so safety is covered. The description adds genuinely behavioral context beyond that: results are grouped by media type, credits shown are at default options (so not an exact price), and an account with Image Maker gets extra presets. It stops short of covering the available_only filtering behavior or pagination/size limits beyond the include_inputs cost warning.

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

Conciseness4/5

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

Front-loaded with the core action and the follow-up call, and every sentence carries distinct information. It is dense with parentheticals and run-on clauses ('presets: ready-made picture conversions (figurine, style, pose, …)'), which costs some readability but no sentence is filler.

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

Completeness5/5

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

Given an output schema and full annotation coverage, the description supplies exactly the missing operational context: when to call it relative to estimate_cost, what conditional sections (presets, batches) may appear, and the size tradeoff of include_inputs. Nothing needed to invoke it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description does add real meaning for include_inputs ('the option fields of each scene (names, allowed values, ranges)') beyond the schema's terse 'larger result', but it says nothing about media_type or available_only semantics, leaving those to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('List the models this account can generate with') plus the grouping and per-item payload (id, scenes, credits). It is clearly distinguishable from siblings like estimate_cost, get_balance, or list_batches, and even explains what the extra 'batches' and 'presets' sections mean.

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

Usage Guidelines5/5

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

Explicit sequencing: 'Call this first to choose a model id, then estimate_cost for an exact price.' It also names the downstream consumers — generate with options.preset, and start_batch via the batches section — so the agent knows both when to call this and what to do with the result.

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

retry_batchRetry a batch’s failed picturesAInspect

Queue the batch’s failed pictures (and any stopped for want of credits) again as new runs, or only the item_ids given. Charged as each starts, like a new batch of that many pictures: the balance must cover them and they count against a monthly limit.

NameRequiredDescriptionDefault
batch_idYesThe batch id start_batch returned.
item_idsNo

Output Schema

NameRequiredDescription
itemsYes
modelYes
sceneYes
countsYes
statusYes
batch_idYes
requeuedYesPictures queued again.
created_atYes
item_countYes
settled_atYes
quoted_creditsYesWhat the batch costs if every picture runs.
charged_creditsYesWhat its runs were charged so far.
per_item_creditsYes

TDQS

A4/5.0
Behavior4/5

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

Adds important side-effect context beyond annotations: retries are charged as they start, the balance must cover them, and they count against a monthly limit. With annotations already covering mutability and idempotency, this is strong transparency, though it does not discuss permission or error behavior.

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

Conciseness5/5

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

Front-loads the action, then adds the critical billing and quota constraints. Two sentences with no wasted text; both earn their place.

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

Completeness4/5

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

Given an output schema, annotations, and only two parameters, the description is mostly complete: it explains scope, optional filtering, cost, and quota impact. Minor gaps remain around item-level edge cases, but nothing essential to invoking it is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 50%; batch_id is documented in the schema and item_ids is not. The description clarifies that item_ids limits the retry to specific items, which compensates somewhat, but it does not add details such as the 100-item cap or item validity requirements.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: queue the batch’s failed pictures again as new runs, with an optional item_ids filter. It is clear what the tool does, though it does not explicitly name start_batch or contrast itself with creating a fresh batch.

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

Usage Guidelines4/5

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

The description gives a clear usage context: retry failed pictures or items stopped for lack of credits. It does not provide explicit exclusions or name alternatives, but the intended situation is evident.

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

search_librarySearch my libraryA
Read-onlyIdempotent
Inspect

Search the Library of past generations kept by this account, newest first: filter by words in the prompt or title and by kind (3d, image, …). Returns the job id, model, status and result file URLs of each run. Use next_cursor to page. Only runs of this account are ever searched. For the full detail of one run call get_job.

NameRequiredDescriptionDefault
limitNoHow many to return, 1 to 50.
queryNoWords to look for in the prompt or title.
cursorNoThe next_cursor of the previous result.
media_typeNoOnly runs of this kind, e.g. '3d' or 'image'.

Output Schema

NameRequiredDescription
itemsYes
totalYesHow many runs match in all.
next_cursorYesPass as cursor for the next page; null at the end.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description adds genuine value beyond that: result ordering (newest first), account scoping, the returned fields (job id, model, status, result file URLs), and cursor-based paging via next_cursor.

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

Conciseness5/5

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

Four compact sentences, front-loaded with what is searched and in what order, then return shape, paging and the sibling hand-off. No filler.

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

Completeness5/5

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

Read-only search with a full output schema and complete annotation coverage; the description supplies scope, ordering, paging and the escalation path to get_job. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description still adds useful framing by saying the query matches words in the prompt or title and that media_type selects a kind of run. Note a small naming drift: the prose says next_cursor while the parameter is cursor.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb (search) plus a precisely scoped resource (the Library of past generations kept by this account), with ordering stated (newest first). It is clearly separable from get_job, which is named as the per-run detail tool.

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

Usage Guidelines4/5

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

Explicitly names get_job as the alternative for full detail of a single run, and clarifies the scoping constraint that only this account's runs are searched. Lacks an explicit 'when not to use' clause (e.g. browse without query vs. query), but the routing context is clear.

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

start_batchStart a batch over Library picturesAInspect

Run the same model, scene and options once for each of several pictures in the account’s Library — for example image to 3D for twelve product photos. Take the scenes and models from list_models (batches), and each picture’s asset_id from get_job or search_library on a finished image job. Nothing is charged now: each run is charged as it starts and refunded if it fails, but the balance must cover the whole quote, and for a key or connection with a monthly limit the whole quote is held against it until each picture runs (then its real cost counts) or is cancelled, refused or refunded (then nothing does). Returns a batch id at once; follow it with get_batch. Pass idempotency_key on retries so a repeat returns the same batch instead of queueing another.

NameRequiredDescriptionDefault
itemsYesOne entry per picture: a Library image’s asset_id.
modelYes
sceneYes
promptNo
optionsNoOptions every run shares, as for generate; the picture field is filled per item.
project_idNo
idempotency_keyNo
notify_by_emailNo
expected_creditsNoThe quote you showed the person; a different price queues nothing.

Output Schema

NameRequiredDescription
itemsYes
modelYes
sceneYes
countsYes
reusedYesAn earlier call with this idempotency_key started it.
statusYes
balanceYesCredits available when it was accepted.
batch_idYes
created_atYes
item_countYes
settled_atYes
quoted_creditsYesWhat the batch costs if every picture runs.
charged_creditsYesWhat its runs were charged so far.
per_item_creditsYes

TDQS

A4.5/5.0
Behavior5/5

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

Goes far beyond the annotations with a detailed charge model: nothing charged at creation, each run charged as it starts and refunded on failure, the full quote must be covered by balance, and monthly-limit keys hold the whole quote until each item runs or is cancelled/refused. Also discloses that a batch id is returned immediately and that idempotency_key makes retries safe, which is exactly the kind of context idempotentHint=false cannot convey.

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

Conciseness4/5

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

Front-loaded with the action and an example, then prerequisites, then cost behavior, then follow-up — a sensible ordering. The charging sentence is long and clause-heavy, and a bulleted cost/idempotency split would read faster, but nothing is wasted.

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

Completeness4/5

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

For a nested-array, 9-param, mutating tool this covers the hard parts: item limits, value sourcing, async follow-up, billing holds and retry safety, and an output schema means return shape needn't be spelled out. The unmentioned prompt and project_id leave a small but real hole.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With only 33% schema coverage across 9 params, the description compensates well: it explains where model/scene values come from, that items are per-picture asset_ids, that options are shared across runs with the picture field filled per item, and what idempotency_key and the quoted price do. Gaps remain for prompt, project_id and notify_by_email, which are undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Run the same model, scene and options once for each of several pictures') and grounds it with a concrete example ('image to 3D for twelve product photos'). This makes the fan-out semantics immediately distinguishable from the single-run 'generate'/'generate_3d' siblings without opening any schema.

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

Usage Guidelines4/5

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

Gives explicit prerequisite routing: scenes and models come from list_models (`batches`), asset_ids from get_job or search_library on a finished image job, and the result is followed with get_batch. It never names 'generate' as the single-picture alternative, so the when-not-to-use case is implied rather than stated.

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

viewer_job_stateViewer job stateA
Read-onlyIdempotent
Inspect

Used by the interactive 3D viewer shown next to a generation result, not for direct use: the state of one job and, once it has finished, the URL of the model file the viewer can draw plus the download links. Read-only; the conversation never needs to call it, get_job gives the same facts as text.

NameRequiredDescriptionDefault
job_idYesThe job id returned by generate_3d.

Output Schema

NameRequiredDescription
errorYes
modelYesNull until the job has produced a file in a viewable format.
job_idYes
statusYespending and processing are running; success, partial, failed and canceled are final. 'partial' means some outputs finished and the rest were refunded.
outputsYes
downloadsYes
media_typeYes
is_terminalYes
library_urlYesWhere the job is kept in the web app.

TDQS

A4.4/5.0
Behavior4/5

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

Adds behavioral context beyond the annotations: the result is only complete after the job finishes, and the payload includes a viewer-usable model URL and download links. 'Read-only' largely restates readOnlyHint=true, but the lifecycle timing ('once it has finished') is genuinely useful and not in the annotations.

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

Conciseness4/5

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

Front-loads the ownership constraint and the return contents in one tight sentence, then closes with the routing note. Dense but every clause carries information; only the 'Read-only' clause is slightly redundant with the annotations.

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

Completeness5/5

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

For a single-parameter read tool with a full output schema and complete annotations, the description covers who calls it, when it is meaningful, what it returns at a high level, and the preferred alternative. Nothing an agent needs in order to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is a single parameter and schema coverage is 100%, with the schema already explaining that job_id comes from generate_3d. The description adds no further semantics about the id, so this sits at the baseline where the schema does the work.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States precisely what the tool yields: the state of a single job and, once finished, the model file URL the viewer draws plus download links. It also names its consumer (the interactive 3D viewer) and explicitly distinguishes itself from get_job, so an agent can tell the two apart without opening either schema.

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

Usage Guidelines5/5

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

Gives an explicit when-not-to-use ('not for direct use', 'the conversation never needs to call it') and names the alternative that supplies the same facts ('get_job gives the same facts as text'). No inference is required about whether the agent should select this tool.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 13 tool updates
    • Changedestimate_cost2 fields changed
      • removedOutput schema / properties / quotes / items / properties / input_issue / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / quotes / items / properties / input_issue / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedgenerate2 fields changed
      • removedOutput schema / properties / scene / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scene / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedgenerate_3d2 fields changed
      • removedOutput schema / properties / scene / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scene / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_balance6 fields changed
      • removedOutput schema / properties / credits / properties / permanent_expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / credits / properties / permanent_expires_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / credits / properties / subscription_expires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / credits / properties / subscription_expires_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / plan / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / plan / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_batch6 fields changed
      • removedOutput schema / properties / items / items / properties / error_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / error_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / job_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / job_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settled_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedget_job25 fields changed
      • removedOutput schema / properties / completed_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / completed_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / error / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "code": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "message": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "message"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "code": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "message"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / files / items / properties / alternates / items / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / alternates / items / properties / source / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / content_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / content_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / duration_seconds / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / duration_seconds / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / format / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / format / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / height / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / height / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / role / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / role / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / size_bytes / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / size_bytes / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / thumbnail_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / thumbnail_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / width / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / width / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / scene / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / scene / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_batches6 fields changed
      • removedOutput schema / properties / batches / items / properties / items / items / properties / error_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / batches / items / properties / items / items / properties / error_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / batches / items / properties / items / items / properties / job_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / batches / items / properties / items / items / properties / job_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / batches / items / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / batches / items / properties / settled_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_job_files12 fields changed
      • removedOutput schema / properties / files / items / properties / content_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / content_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / format / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / format / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / size_bytes / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / size_bytes / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / files / items / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / files / items / properties / source / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / note / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / note / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / requested_format / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / requested_format / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedlist_models13 fields changed
      • removedOutput schema / properties / models / items / properties / family / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / models / items / properties / family / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / models / items / properties / inputs / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "controls": {
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "default": {
        -                "anyOf": [
        -                  {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "boolean"
        -                      },
        -                      {
        -                        "items": {
        -                          "anyOf": [
        -                            {
        -                              "type": "string"
        -                            },
        -                            {
        -                              "type": "number"
        -                            },
        -                            {
        -                              "type": "boolean"
        -                            }
        -                          ]
        -                        },
        -                        "type": "array"
        -                      }
        -                    ]
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "help": {
        -                "anyOf": [
        -                  {
        -                    "type": "string"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "id": {
        -                "description": "The key to use in options; the scene's prompt field goes in prompt.",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "description": "text, long-text, choice, number, toggle, count, seed, media (upload URLs), song, library, timeline, elements or hidden.",
        -                "type": "string"
        -              },
        -              "label": {
        -                "type": "string"
        -              },
        -              "max": {
        -                "anyOf": [
        -                  {
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "max_length": {
        -                "anyOf": [
        -                  {
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "min": {
        -                "anyOf": [
        -                  {
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "options": {
        -                "anyOf": [
        -                  {
        -                    "items": {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "label": {
        -                          "type": "string"
        -                        },
        -                        "value": {
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "value",
        -                        "label"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "type": "array"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The allowed values of a choice; null for other kinds."
        -              },
        -              "required": {
        -                "type": "boolean"
        -              },
        -              "value_type": {
        -                "description": "The JSON shape to send: string, number, boolean, string[], object or object[].",
        -                "type": "string"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "kind",
        -              "value_type",
        -              "label",
        -              "help",
        -              "required",
        -              "default",
        -              "options",
        -              "min",
        -              "max",
        -              "max_length"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "scene": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "scene",
        -        "controls"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "controls": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "default": {
        +                "anyOf": [
        +                  {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "boolean"
        +                      },
        +                      {
        +                        "items": {
        +                          "type": [
        +                            "string",
        +                            "number",
        +                            "boolean"
        +                          ]
        +                        },
        +                        "type": "array"
        +                      }
        +                    ]
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "help": {
        +                "type": [
        +                  "string",
        +                  "null"
        +                ]
        +              },
        +              "id": {
        +                "description": "The key to use in options; the scene's prompt field goes in prompt.",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "description": "text, long-text, choice, number, toggle, count, seed, media (upload URLs), song, library, timeline, elements or hidden.",
        +                "type": "string"
        +              },
        +              "label": {
        +                "type": "string"
        +              },
        +              "max": {
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "max_length": {
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "min": {
        +                "type": [
        +                  "number",
        +                  "null"
        +                ]
        +              },
        +              "options": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "label": {
        +                          "type": "string"
        +                        },
        +                        "value": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "value",
        +                        "label"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The allowed values of a choice; null for other kinds."
        +              },
        +              "required": {
        +                "type": "boolean"
        +              },
        +              "value_type": {
        +                "description": "The JSON shape to send: string, number, boolean, string[], object or object[].",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "kind",
        +              "value_type",
        +              "label",
        +              "help",
        +              "required",
        +              "default",
        +              "options",
        +              "min",
        +              "max",
        +              "max_length"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "scene": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "scene",
        +        "controls"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / models / items / properties / required_right / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / models / items / properties / required_right / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / models / items / properties / retires_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / models / items / properties / retires_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / models / items / properties / version / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / models / items / properties / version / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / presets / items / properties / aspect_ratio / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / presets / items / properties / aspect_ratio / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / presets / items / properties / group / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / presets / items / properties / group / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedretry_batch6 fields changed
      • removedOutput schema / properties / items / items / properties / error_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / error_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / job_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / job_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settled_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedsearch_library28 fields changed
      • removedOutput schema / properties / items / items / properties / created_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / created_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / alternates / items / properties / source / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / alternates / items / properties / source / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / content_type / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / content_type / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / duration_seconds / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / duration_seconds / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / format / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / format / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / height / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / height / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / role / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / role / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / size_bytes / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / size_bytes / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / thumbnail_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / thumbnail_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / files / items / properties / width / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / files / items / properties / width / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / prompt / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / prompt / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / scene / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / scene / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / title / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / title / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / next_cursor / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / next_cursor / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedstart_batch6 fields changed
      • removedOutput schema / properties / items / items / properties / error_code / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / error_code / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / items / items / properties / job_id / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / items / items / properties / job_id / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • removedOutput schema / properties / settled_at / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / settled_at / type
        Added value: +[
        +  "string",
        +  "null"
        +]
    • Changedviewer_job_state6 fields changed
      • removedOutput schema / properties / downloads / items / properties / size_bytes / anyOf
        Removed value: -[
        -  {
        -    "type": "number"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / downloads / items / properties / size_bytes / type
        Added value: +[
        +  "number",
        +  "null"
        +]
      • changedOutput schema / properties / error / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "code": {
        -        "anyOf": [
        -          {
        -            "type": "string"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "message": {
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "code",
        -      "message"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "code": {
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      },
        +      "message": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "code",
        +      "message"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / properties / library_url / anyOf
        Removed value: -[
        -  {
        -    "type": "string"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]
      • addedOutput schema / properties / library_url / type
        Added value: +[
        +  "string",
        +  "null"
        +]
      • changedOutput schema / properties / model / anyOf
        Previous value: -[
        -  {
        -    "additionalProperties": false,
        -    "properties": {
        -      "format": {
        -        "enum": [
        -          "glb"
        -        ],
        -        "type": "string"
        -      },
        -      "size_bytes": {
        -        "anyOf": [
        -          {
        -            "type": "number"
        -          },
        -          {
        -            "type": "null"
        -          }
        -        ]
        -      },
        -      "url": {
        -        "description": "Public https URL of a file the viewer can draw.",
        -        "type": "string"
        -      }
        -    },
        -    "required": [
        -      "url",
        -      "format",
        -      "size_bytes"
        -    ],
        -    "type": "object"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "additionalProperties": false,
        +    "properties": {
        +      "format": {
        +        "enum": [
        +          "glb"
        +        ],
        +        "type": "string"
        +      },
        +      "size_bytes": {
        +        "type": [
        +          "number",
        +          "null"
        +        ]
        +      },
        +      "url": {
        +        "description": "Public https URL of a file the viewer can draw.",
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "url",
        +      "format",
        +      "size_bytes"
        +    ],
        +    "type": "object"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  2. 2 tool updates
    • Changedgenerate1 field changed
      • addedInput schema / properties / expectedCredits
        Added value: +{
        +  "description": "The credits estimate_cost answered for this request. If the price has moved since, nothing is started or charged and the error (price_changed) gives the new price.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
    • Changedgenerate_3d1 field changed
      • addedInput schema / properties / expected_credits
        Added value: +{
        +  "description": "The credits estimate_cost answered for this request. If the price has moved since, nothing is started or charged and the error (price_changed) gives the new price.",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
  3. 2 tool updates
    • Removedcancel_batch
    • Removedcancel_job
  4. 1 tool update
    • Changedlist_models1 field changed
      • changedOutput schema / properties / models / items / properties / inputs / anyOf
        Previous value: -[
        -  {
        -    "items": {
        -      "additionalProperties": false,
        -      "properties": {
        -        "controls": {
        -          "items": {
        -            "additionalProperties": false,
        -            "properties": {
        -              "default": {
        -                "anyOf": [
        -                  {
        -                    "anyOf": [
        -                      {
        -                        "type": "string"
        -                      },
        -                      {
        -                        "type": "number"
        -                      },
        -                      {
        -                        "type": "boolean"
        -                      }
        -                    ]
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "id": {
        -                "description": "The key to use in options.",
        -                "type": "string"
        -              },
        -              "kind": {
        -                "description": "text, multiline-text, select, number or boolean.",
        -                "type": "string"
        -              },
        -              "label": {
        -                "type": "string"
        -              },
        -              "max": {
        -                "anyOf": [
        -                  {
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "max_length": {
        -                "anyOf": [
        -                  {
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "min": {
        -                "anyOf": [
        -                  {
        -                    "type": "number"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ]
        -              },
        -              "options": {
        -                "anyOf": [
        -                  {
        -                    "items": {
        -                      "additionalProperties": false,
        -                      "properties": {
        -                        "label": {
        -                          "type": "string"
        -                        },
        -                        "value": {
        -                          "type": "string"
        -                        }
        -                      },
        -                      "required": [
        -                        "value",
        -                        "label"
        -                      ],
        -                      "type": "object"
        -                    },
        -                    "type": "array"
        -                  },
        -                  {
        -                    "type": "null"
        -                  }
        -                ],
        -                "description": "The allowed values of a select; null for other kinds."
        -              },
        -              "required": {
        -                "type": "boolean"
        -              }
        -            },
        -            "required": [
        -              "id",
        -              "kind",
        -              "label",
        -              "required",
        -              "default",
        -              "options",
        -              "min",
        -              "max",
        -              "max_length"
        -            ],
        -            "type": "object"
        -          },
        -          "type": "array"
        -        },
        -        "scene": {
        -          "type": "string"
        -        }
        -      },
        -      "required": [
        -        "scene",
        -        "controls"
        -      ],
        -      "type": "object"
        -    },
        -    "type": "array"
        -  },
        -  {
        -    "type": "null"
        -  }
        -]New value: +[
        +  {
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "controls": {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "default": {
        +                "anyOf": [
        +                  {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "number"
        +                      },
        +                      {
        +                        "type": "boolean"
        +                      },
        +                      {
        +                        "items": {
        +                          "anyOf": [
        +                            {
        +                              "type": "string"
        +                            },
        +                            {
        +                              "type": "number"
        +                            },
        +                            {
        +                              "type": "boolean"
        +                            }
        +                          ]
        +                        },
        +                        "type": "array"
        +                      }
        +                    ]
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "help": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "id": {
        +                "description": "The key to use in options; the scene's prompt field goes in prompt.",
        +                "type": "string"
        +              },
        +              "kind": {
        +                "description": "text, long-text, choice, number, toggle, count, seed, media (upload URLs), song, library, timeline, elements or hidden.",
        +                "type": "string"
        +              },
        +              "label": {
        +                "type": "string"
        +              },
        +              "max": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "max_length": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "min": {
        +                "anyOf": [
        +                  {
        +                    "type": "number"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ]
        +              },
        +              "options": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "label": {
        +                          "type": "string"
        +                        },
        +                        "value": {
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "value",
        +                        "label"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "The allowed values of a choice; null for other kinds."
        +              },
        +              "required": {
        +                "type": "boolean"
        +              },
        +              "value_type": {
        +                "description": "The JSON shape to send: string, number, boolean, string[], object or object[].",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "kind",
        +              "value_type",
        +              "label",
        +              "help",
        +              "required",
        +              "default",
        +              "options",
        +              "min",
        +              "max",
        +              "max_length"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        "scene": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "scene",
        +        "controls"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
  5. 16 tool updates
    • First observedcancel_batch
    • First observedcancel_job
    • First observedconvert_model
    • First observedestimate_cost
    • First observedgenerate
    • First observedgenerate_3d
    • First observedget_balance
    • First observedget_batch
    • First observedget_job
    • First observedlist_batches
    • First observedlist_job_files
    • First observedlist_models
    • First observedretry_batch
    • First observedsearch_library
    • First observedstart_batch
    • First observedviewer_job_state

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources