Skip to main content
Glama

Server Details

Reproducible, IP-clean assets for agents: seven engines, from print designs to voice and video.

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
78.6% over 23 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.5/5.0

Scored across 57 tools

Disambiguation4/5

Most tools are cleanly separated by domain prefix and action, e.g. art_render vs raster_render vs video_still have distinct resource/scope. A few pairs could still confuse an agent without careful reading: terrain_heightmap vs world_heightmap, pull_analyse vs pull_twin vs pull_lab, and job vs jobs vs cancel_job.

Naming Consistency4/5

The dominant pattern is consistent domain_action or domain_noun snake_case: art_, form_, material_, pull_, raster_, sound_, terrain_, video_, voice_, world_. Minor deviations are the unprefixed account tools (owner, subscription, usage) and singular/plural job/jobs, but the set is mostly predictable.

Tool Count1/5

57 tools is an extreme count for any single MCP server, even one spanning many engine domains. While the domains are broad, the surface is far beyond the recommended 3-15 range and will burden tool selection and context.

Completeness4/5

Coverage is unusually broad: most domains include schema/check/render/apply/starter/list and account/job management. There are still minor asymmetries, such as art having no apply/edit tool while material, form and world do, and some overlapping heightmap tools rather than one unified surface.

Available Tools

57 tools
art_checkCheck a print designA
Read-onlyIdempotent
Inspect

Checks a design without rendering it: ok, or one sentence naming the first problem and where it is. Costs no units.

NameRequiredDescriptionDefault
designYesThe print design document, written inline as JSON. art_schema lists every key.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover read-only/idempotent/non-destructive/closed-world, and the description adds genuinely new behavior: no rendering occurs, it returns 'ok' or exactly one sentence naming the first problem and its location, and it consumes no units. That cost/side-effect disclosure is exactly the kind of context annotations cannot express.

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

Conciseness5/5

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

A single sentence with a colon-delimited result spec; the most decision-relevant fact (no rendering, no cost) is front-loaded and every clause earns its place.

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

Completeness4/5

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

With a rich output schema and fully documented annotations, the description only needs to add cost and validation semantics, which it does. It could be slightly stronger by noting where a valid design document comes from (e.g. art_starter/art_schema), but nothing needed to invoke 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 one parameter and schema coverage is 100%, with the schema itself pointing to art_schema for the document keys. The description adds nothing about the 'design' argument, so the baseline 3 for high schema coverage 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?

States a specific verb (checks) and resource (a design), and immediately delimits scope with 'without rendering it', which cleanly separates it from art_render and the other *render siblings. An agent can tell what this does and what it does not do without opening 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?

'Costs no units' gives a clear economic reason to call this before art_render, which is an implied when-to-use cue. It stops short of naming art_render explicitly or stating exclusions, so it is clear context rather than a full routing rule.

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

art_materialsMaterial libraryA
Read-onlyIdempotent
Inspect

The shipped material library: each id, a line on its look, and whether it is a metal. Any id here can fill a layer or be baked. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior. The description adds that this is the shipped library, that it is free ('Costs no units'), and that returned ids are usable for layer fill or baking, which is useful context beyond the structured fields.

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 short sentences front-load what the resource is, then add usage and cost details without repetition. No sentence is wasted.

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

Completeness5/5

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

For a no-parameter listing tool with an output schema and full read-only annotations, the description supplies the essential framing—what the library contains and that it is free. 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?

With zero input parameters, the baseline is 4; there is no parameter information to add beyond the empty schema.

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

Purpose4/5

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

Names the resource (the shipped material library) and its per-entry contents (id, look line, metal flag), so an agent knows it is a listing tool. It does not explicitly name a sibling alternative, but the content framing differentiates it from mutation tools like material_apply or material_bake.

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?

Says any id can fill a layer or be baked and that it costs no units, which tells the agent when to use it (to obtain material ids) and a cost constraint. It stops short of naming alternatives such as material_check or material_cost and gives no explicit when-not guidance.

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

art_presetsPrint canvas presetsA
Read-onlyIdempotent
Inspect

The canvas presets: shirt-front 4500x5400, shirt-pocket 1200x1200, sticker 2400x2400, poster 5400x7200, all at 300 DPI. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/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 behavior, so the safety profile is covered. The description adds genuinely new context beyond annotations with 'Costs no units', which matters in a toolset that includes multiple *_cost siblings, though it says nothing about caching or output format.

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 sentence, front-loaded with the resource and its enumeration, with the billing note last. It is tight, though the full inline listing of preset values partially duplicates what the output schema already returns.

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 explain return values, and with zero parameters the schema burden is minimal. The description supplies the domain context (presets exist for shirts, stickers, posters) that makes the tool selectable, leaving only explicit sibling routing as 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?

The tool takes zero parameters, so per the rubric the baseline is 4. There is no parameter surface for the description to clarify, and the enumerated preset names serve as the implicit enumeration of valid future inputs.

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 a concrete resource (canvas presets) and enumerates exactly which presets exist with their pixel dimensions and DPI, so an agent immediately knows what it will get back. It does not explicitly differentiate itself from siblings such as art_schema or art_materials, which is the only thing keeping it from a 5.

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 implied rather than stated: an agent can infer this is the lookup to call before choosing a canvas size for rendering. There is no explicit when-to-use, no when-not-to-use, and no named alternative among the art_* siblings.

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

art_renderRender a print designAInspect

Renders a design to a PNG with its DPI written in. Without width it renders the canvas at full print size (a shirt-front is 4500 x 5400). width renders a draft that many pixels wide. A render 1200 pixels wide or less costs 1 unit; anything wider costs 5. preview_width adds a small preview, and preview_on sets the shirt colour behind it. Returns print.png (and print.preview.png) as signed URLs.

NameRequiredDescriptionDefault
widthNoOutput width in pixels. Omit it to render the canvas at full print size; a width above the draft limit is a full-size print and costs more.
designYesThe print design document, written inline as JSON. Start from art_starter and check it with art_check.
preview_onNoBackground colour for the preview as #rrggbb, so a design with transparency can be judged on a shirt colour.
preview_widthNoWidth in pixels of the small preview image written beside the print.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare the safety profile (not read-only, not idempotent, non-destructive), so the description earns credit for disclosing the cost model (1 unit at <=1200px, 5 units wider), the default canvas size (4500x5400 shirt front), and the returned signed URLs. It does not say whether rendering is synchronous or job-backed, which would matter given the sibling job/cancel_job tools.

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?

Four dense sentences, front-loaded with the core action and the default-size behavior, with no filler. The closing sentence about return artifacts is slightly redundant given an output schema exists, which keeps it from a perfect score.

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 4-parameter tool with a nested design document and an output schema, the description covers sizing, cost, preview behaviour, and output artifacts. The remaining gap is the rendering lifecycle (sync vs async, how it relates to the job tools) and any prerequisite that the design be validated first.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, and the description adds meaning beyond the schema: the concrete 4500x5400 full-print canvas, the 1200-pixel cost boundary, and the fact that preview_on paints the shirt colour behind a transparent design. This is genuine added value rather than restatement.

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 ('Renders a design to a PNG') and adds the distinguishing detail that DPI is written in. It is immediately clear what artifact comes out, though it never contrasts itself with near-name siblings like raster_render or video_render, so an agent must infer which renderer applies.

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

Usage Guidelines3/5

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

The description explains the width-omitted vs width-supplied behavior, which is useful operational guidance, but that guidance is really about a parameter rather than about when to choose this tool over alternatives. No when-not conditions or named alternative tools appear.

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

art_schemaPrint design schemaA
Read-onlyIdempotent
Inspect

Every key, range and word a print design may use. Call this first when designing a print. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.1/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, non-destructive, closed-world), so the bar is lower. The description adds a genuinely non-obvious behavioral fact — "Costs no units" — which is billing/quota context an agent cannot get from the annotations or schema. It does not describe response shape, but an output schema exists to carry that.

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 short sentences, front-loaded with what the tool is, then when to call it, then the cost note. No filler and nothing buried.

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 zero-parameter schema-discovery tool with an output schema and full annotation coverage, the description supplies everything an agent needs: what it returns conceptually, when to call it, and that it is free. Only the absence of sibling routing keeps it from a 5.

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 per the baseline there is nothing for the description to disambiguate. No parameter guidance is needed and none is missing.

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

Purpose4/5

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

The description states a specific resource — the complete vocabulary (keys, ranges, words) a print design may use — which is a real capability statement rather than a restatement of the title. It is distinguishable from the sibling *_schema tools by domain (print vs raster/video/world) and from art_render/art_check by being a reference lookup, though it never explicitly names those siblings.

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?

"Call this first when designing a print" gives explicit ordering guidance relative to the rest of the art_* workflow. It does not name an alternative or state when not to call it, 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.

art_starterStarter print designA
Read-onlyIdempotent
Inspect

A valid starting design for a canvas preset, ready to edit. Costs no units.

NameRequiredDescriptionDefault
presetYesThe canvas preset to start from: shirt-front, shirt-pocket, sticker or poster.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, non-destructive behavior. The description adds the cost-free behavior ('Costs no units'), which is valuable and not in annotations. It does not mention auth or rate limits.

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 short sentences, front-loaded with the resource and the cost caveat, with no filler.

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

Completeness4/5

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

For a simple read-only starter with an output schema and rich annotations, the description covers purpose and cost. The only gap is sibling routing, but overall it is complete enough.

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

Parameters3/5

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

Schema coverage is 100% and the enum fully describes the single preset parameter. The description adds no parameter detail beyond what the schema provides, so baseline 3 applies.

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

Purpose4/5

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

States it provides a valid starting design for a canvas preset and that it is ready to edit. It is a specific resource but does not name a sibling to distinguish from art_presets or art_schema.

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?

Implies use when starting a design and wanting no cost, but no explicit when-to-use versus art_presets or art_schema, and no exclusions or prerequisites.

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

art_swatchRender a material swatchAInspect

Renders one material (a shipped id, or a whole material document) as a lit square swatch PNG. size is 64 to 1024 (default 512); 512 or less costs 1 unit, larger costs 2.

NameRequiredDescriptionDefault
sizeNoSwatch side in pixels, 64 to 1024 (default 512). Above 512 costs more.
materialYesA shipped material id (art_materials lists them) or a whole material document written inline.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false), the description discloses a real side effect the annotations only imply: a credit cost that scales with size (1 unit at <=512, 2 units above). It also states the output format. No annotation contradiction — a unit-consuming render is consistent with readOnlyHint=false.

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 dense sentences: the first defines the operation and output, the second states the size range, default, and cost tiers. Nothing is redundant and the core identity is front-loaded.

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

Completeness4/5

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

An output schema exists, so return-value details are unnecessary. Inputs, cost model, and artifact type are covered. The main remaining gap is that nothing explains the readOnlyHint=false beyond cost — e.g., whether a job is queued or credits are only reserved on failure.

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 3 baseline applies. The description still adds quantitative meaning the schema only gestures at ('Above 512 costs more') by giving the exact tier split (1 unit vs. 2 units), and restates the size bounds/default alongside that consequence.

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 ('Renders one material ... as a lit square swatch PNG'), and the output artifact type (square swatch PNG) implicitly separates it from raster_render, art_render, and material_bake. It does not explicitly name which sibling to use instead, so it stops short of full sibling differentiation.

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

Usage Guidelines3/5

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

It clarifies the two accepted forms of the material argument (shipped id vs. inline material document) and routes discovery to art_materials for ids, which is useful context. However, it gives no when-to-use/when-not guidance relative to the other rendering tools in the family, leaving selection largely to inference.

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

cancel_jobCancel a queued jobA
DestructiveIdempotent
Inspect

Cancel a queued job (video_still, video_render, raster_render, and a large pull_analyse, pull_twin or pull_lab). One still waiting is cancelled at no charge; one running is stopped and charged for the CPU it had used, one unit for each 10 CPU-seconds rounded up, never more than its price. Answers with the job and the units charged. Costs nothing itself.

NameRequiredDescriptionDefault
jobYesThe job id from the call that queued it, such as job_ followed by 24 hex digits.

Output Schema

NameRequiredDescription
jobYesThe job id.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits charged.
statusYesqueued, running, ok, refused, failed, cancelled or expired.

TDQS

A4.5/5.0
Behavior5/5

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

Goes well beyond the annotations: annotations only say mutation/destructive/idempotent, while the description explains the billing model (free if still waiting, charged for CPU used if running, one unit per 10 CPU-seconds rounded up, capped at the job's price), states the tool itself costs nothing, and states what the response contains. This is exactly the extra context annotations cannot carry.

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-loaded with the action and its scope, then immediately the state-dependent cost rules in parallel clauses, then the response. Three sentences, no filler, each carrying distinct information.

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 and annotations cover the safety profile, so the remaining burden is applicability and cost behavior — both fully addressed. An agent can call this correctly and predict the charge from the description alone.

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% for the single required `job` parameter, including the job_ + 24-hex-digits format, so the schema already does the work. The description adds no syntax or sourcing detail beyond what the schema provides, making the baseline 3 appropriate.

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

Purpose5/5

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

States a specific verb (cancel) and resource (queued job), then bounds the scope by enumerating the job types it applies to (video_still, video_render, raster_render, large pull_analyse/pull_twin/pull_lab). That enumeration separates it from sibling inspection/mutation tools like job, jobs, and pull_close without opening a schema.

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

Usage Guidelines4/5

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

Makes applicability explicit by naming job types, and distinguishes the two runtime states (waiting vs running) with the consequence of each. It does not name an alternative tool or an explicit 'do not use this when...' exclusion, so it stops just short of a 5.

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

character_generateGenerate a characterAInspect

Generates a character from a seed. A person is one of the game's townspeople: sex, age, complexion, hair, build and working clothes are drawn from the seed, and the body is sculpted as one surface with a face, hair and cloth. as makes the seed a foe, a machine, an android or a child, and presents chooses a woman or a man; age young, adult or old takes the first seed from seed on whose person the town rolls at that age, and the answer names that seed (with the age, the frame and the height in metres), so the same request returns the same person; body loft returns the older lofted figure instead. kind may also be dog, cat, rat or sheep. The glTF 2.0 file holds the body in its bind pose, skinned to the 62-joint skeleton, with the skeleton standing at the gait and phase asked for (the rest pose when neither gait nor speed is given). A gait or speed also comes as one looping animation clip named for it: a rotation and a translation for every joint across thirty phases of its cycle, lasting the seconds that stride takes at that speed and ending on the pose it began with, so it loops without a jump. The clip walks on the spot; travel true also carries the root forward across the ground, a cycle's distance at the gait's speed. clips asks instead for a set of named looping clips in the one file, over the rest pose, for a character controller: idle (a breath and a weight shift, sixty seconds before it repeats), walk (1.4 m a second), run (5 m a second), sit (on the ground), chair (on a chair's seat) and the gestures wave (the right hand raised and waving), point (the right arm held out ahead) and nod (two dips of the head), each a short loop, for a person; idle, walk, run, sit and lie for an animal, or any gait character_list names; the walk's stance foot stays on the floor. Each garment has a material cut from the engine's own cloth: base colour, roughness and normal maps, its colours carried as vertex colours (COLOR_0) under a base colour factor, so the file passes the Khronos glTF validator. A garment of many colours comes in parts of one brightness (coat, coat 2 and so on), each under its own factor, so a viewer that leaves vertex colours out still draws a navy coat navy. formats glb returns the same file as a binary GLB (the buffer as its binary chunk, a fifth to a quarter smaller), in place of the .gltf when both are asked. The Wavefront OBJ is the posed mesh, a group for each garment. Costs 3 units for a person at near detail, 1 unit at mid or far, for the lofted figure and for an animal.

NameRequiredDescriptionDefault
asNoWhat the person is: townsperson, foe, machine, android or child.
ageNoAge band for a person: young, adult or old, or leave it to the seed.
bodyNosculpt (the default) is the game's sculpted body; loft is the older lofted figure.
gaitNoA gait name from character_list to pose the skeleton at and to return as a looping clip.
kindNoThe body kind: person (the default), dog, cat, rat or sheep. character_list shows each kind's gaits.
seedNoA whole number that picks the character; the same seed and options return the same one.
clipsNoNamed looping clips to put in the one file for a character controller, such as idle, walk, run, sit, wave, point, nod.
phaseNoWhere in the gait cycle to pose the skeleton, 0 to 1.
speedNoTravel speed in metres a second for the gait and its clip.
detailNoLevel of detail: near (the default), mid or far. Near costs the most for a person.
travelNoTrue to let the gait clip carry the root forward across the ground instead of walking on the spot.
formatsNoMesh formats to return: obj, gltf or glb. glb replaces gltf when both are asked.
presentsNoWhether a person presents as a woman or a man, or leaves it to the seed.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so the description carries most of the burden and does well: it discloses cost (3 units near, 1 unit mid/far), determinism ("the same seed and options return the same one"), glb buffer savings, and loop behavior of animation clips. It does not disclose whether a job is queued asynchronously or how the result is delivered.

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

Conciseness2/5

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

A ~500-word run-on block with comma-spliced clauses ("as makes the seed a foe, a machine...", "age young, adult or old takes the first seed from seed on whose person the town rolls...") that is very hard to scan. The purpose statement is front-loaded, but the useful option guidance is buried mid-paragraph rather than organized by parameter.

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 13-parameter, no-required-param generator, the description is substantively complete: outputs, formats, clip sets, costs and determinism are all covered, and an output schema exists so return values need not be restated. The main gap is process-level behavior (sync vs job-based execution), which is not addressed.

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

Parameters4/5

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

Schema description coverage is 100%, so the baseline is 3, but the prose adds real meaning the schema lacks: which clip names exist and their loop lengths/speeds, that glb replaces gltf when both are requested, that clip travel distance equals a cycle at the gait's speed, and that travel clips walk on the spot by default. Some of this duplicates the schema, but the net addition is above baseline.

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?

Opens with a specific verb+resource ("Generates a character from a seed") and the rest of the text makes the scope concrete: procedural townspeople/animals, posed meshes plus looping gait clips. It distinguishes itself indirectly by pointing at character_list as the source of gait names, but it never plainly states what character_generate does that nearby tools (character_list, art_presets) do not.

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 implied by scattered conditionals ("clips asks instead for a set of named looping clips... for a character controller", "travel true also carries the root forward"), which tell an agent which options to reach for. There is no explicit when-to-use-this-tool vs alternative, no prerequisites, and no statement about when not to call it.

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

character_listCharacter kinds and gaitsB
Read-onlyIdempotent
Inspect

The body kinds (person, dog, cat, rat, sheep), the levels of detail and each kind's gaits. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

B3.4/5.0
Behavior3/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 the safety profile is fully covered. The description adds one genuinely new behavioral fact not present in annotations — 'Costs no units' — which is useful for a units-metered system. It does not, however, discuss caching, output shape, or rate behavior.

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?

Two compact sentences with the payload enumerated up front and the cost caveat appended. Every clause carries information; only the fragmentary, verb-less phrasing slightly weakens the structure.

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?

An output schema exists, so return-value documentation is unnecessary, and the description still previews the returned data (kinds, detail levels, gaits). Given a parameterless read-only tool, this is close to sufficient; only a pointer to how the result relates to character_generate 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?

The tool takes zero parameters, so there is nothing to document and the baseline is 4. No parameter confusion is possible.

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 enumerates exactly what the tool surfaces — body kinds (person, dog, cat, rat, sheep), levels of detail, and each kind's gaits — so the resource and payload are unambiguous. It lacks an explicit verb ('list'), but the noun enumeration makes the read intent clear enough to distinguish it from the sibling character_generate.

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 character_generate or any other sibling. The only hint is the incidental 'Costs no units,' which is a cost note rather than a selection rationale.

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

city_planPlan a cityAInspect

Makes a city from a seed number and a size (the side of a square, 300 to 2000 metres, 800 by default): streets at varied spacing, closer together toward the centre, some of them curving, some ending at a cross street so blocks vary in size, an avenue every few, one or two diagonal avenues and usually a ring road. The town does not fill the square: it thins toward an outline of its own (answered as outline), lots grow and houses scatter toward the edge, most streets stop short of it and a few avenues run on out of the square, and the ground beyond the town holds fields, pastures and copses (answered as fields, each clear of every road, hedged by trees). Between the dense core and the outskirts lies a suburban ring: residential streets that curve and branch (crescents that leave a street and return to it, cul-de-sacs ending in turning circles), small lots marked suburban, each with a house of one or two floors turned to its street and set back from it (a building's kind says house, semi for a pair, shop on a corner or school on a large lot, and the view, the obj and the glb roof them with pitched roofs), the houses lining both sides of narrow residential streets (about seven metres wide, with lanes running into deep blocks) and a garden with trees round every house, and a few local parks. The blocks the streets leave, with a plaza near the centre and parks; the lots each block divides into; and the buildings, each a footprint with a height and a floor count, rising toward the centre. Footprints are cut along the roads' own lines (a building beside a diagonal avenue is a trapezoid or a wedge, never a staircase), a block the buildings would leave mostly empty becomes a park, a lot left unbuilt is a yard with trees (a paddock, hedged, in the outskirts), and every park carries footpaths from street to street, benches beside them and trees kept clear of them. formats picks the files (json, png, obj, glb; json, png and glb by default): city.json is the plan, every street as a polyline with its kind and width and every block, park (with its trees), lot and building footprint as an outline, in metres with x east and z south from the middle of the square; city.png is the plan seen from above, north up, px pixels a side (256 to 2048, 1024 by default), buildings shaded by height; city.obj and city.glb are the massing model, the ground, streets, parks and every building extruded to its height, in metres with y up. terrain (a seed word, as terrain_heightmap takes) stands the city on that country's ground instead of a plane, centred at origin {x, z} in metres (0, 0 by default) with relief 0 to 40 as terrainAmp: every lot is levelled to a terrace and its buildings stand on it, every road point carries a height (y, held to a 12 percent grade by cutting and filling), a building whose corners would be more than 2.5 metres off its terrace stands in steps (its footprint is cut across the fall into pieces, each on its own base, and the answer counts those buildings as stepped) and is left out only where even that cannot hold the ground (counted as tooSteep, with the ground's low and high), two roads that meet carry one height at the junction, the terraces fade into the country over a fifty metre apron whose edge heights are listed under terrain.apron, the picture is shaded by the relief, and the obj and glb carry the terraced ground, apron included, with the streets lying on it. view (a list of cameras from aerial, a high oblique over the whole square, corner, a low oblique from the south-east, and skyline, a low view from the south across the roofs) also draws the massing model lit, with an afternoon sun, shadows and sky, as city-view-.png at viewPx pixels wide (320 to 1600, 960 by default, two thirds as tall), country shown round the square: it is the picture of what the other files hold, for when there is no model viewer to open them in. Where a stepped building's pieces meet on a slope, each uphill piece lists its seam (the shared edge and the drop) and the obj and glb carry a retaining wall there; a park on the edge of a hill follows the ground instead of a terrace (graded), the city's surface at its edge is held within three metres of the country's, and the picture shows the apron's fifty metres past the square. The answer carries the counts, the tallest building, the mean heights of the core and of the edge and the plan's sha256. The same seed and size give the same city. Costs 1 unit; views add to it (three wide views of the largest city cost 2).

NameRequiredDescriptionDefault
pxNoWidth in pixels of the plan picture, 256 to 2048.
seedYesA whole number that makes the city; the same seed and options give the same plan.
sizeNoThe side of the city square in metres, 300 to 2000 (default 800).
viewNoCamera views of the massing to render: aerial, corner or skyline. Each adds to the cost.
originNoWhere on that terrain the city sits, as {x, z} in metres.
reliefNoHow far the ground may rise and fall under the city, in metres, 0 to 40.
viewPxNoWidth in pixels of each view, 320 to 1600 (the height is two thirds).
formatsNoFiles to return: json, png, obj or glb.
terrainNoA terrain seed word to build the city on, so it sits on that country.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only give a generic safety profile (readOnlyHint=false, destructiveHint=false), yet the description discloses determinism ('The same seed and size give the same city'), the cost model ('Costs 1 unit; views add to it'), what each output file contains, and how terrain/relief alters geometry (terracing, stepped buildings, retaining walls, apron). This is far beyond what the annotations convey.

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

Conciseness2/5

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

The content is dense but delivered as one enormous run-on block riddled with nested parentheticals, so it is neither front-loaded beyond the first clause nor scannable. Much of the detail (every park/bench/hedge rule) is over-specified for a tool-selection decision and would be better in documentation.

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

Completeness4/5

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

For a complex 9-parameter procedural generator with an output schema, the description is thorough enough that an agent could invoke it correctly, including cost and determinism caveats. It is slightly redundant in re-describing return values already covered by the output schema.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning the schema lacks: default formats ('json, png and glb by default'), the content of each file type, what terrain/relief/origin do geometrically, and the camera meanings behind view. It stops short of explaining every parameter interaction, so not a 5.

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 opening clause states a specific verb and resource — 'Makes a city from a seed number and a size' — and then enumerates exactly what the output contains (streets, blocks, lots, buildings, terrain). An agent can tell this is a procedural city generator distinct from terrain_heightmap, raster_render or world_apply without opening 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 Guidelines3/5

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

Usage is only implied. The description explains what view is 'for when there is no model viewer to open them in' and cross-references terrain_heightmap for terrain seed words, but never states when to choose city_plan over a sibling generator or what the prerequisites are. No explicit when/when-not guidance.

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

form_applyEdit a formAInspect

Applies a batch of ops (set_form, set_generator, set_range, reset_range, clear_params) to a form document, whole or not at all. Costs 1 unit.

NameRequiredDescriptionDefault
opsYesThe edits to apply in order, each an object with an op name (set_form, set_generator, set_range, reset_range, clear_params). The batch applies whole or not at all.
formYesThe form document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly=false, destructive=false, idempotent=false), so the bar is lower, and the description still adds two genuinely non-redundant facts: the batch is atomic (all-or-nothing) and the call costs 1 unit. It stops short of mentioning permissions or failure/rollback 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?

One tight sentence that front-loads the action, then the op vocabulary, then the atomicity guarantee and cost. Nothing is wasted and no sentence is padding.

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 values need not be explained, and atomicity plus cost are disclosed. However, the description never says where the inline 'form' document comes from (form_build/form_starter or a fetch), which is the main practical uncertainty for invoking a mutation tool that takes the whole document inline.

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

Parameters3/5

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

Schema description coverage is 100%, so both 'ops' and 'form' are already documented in the schema, including the same op-name list and the whole-or-not-at-all note. The description adds no syntax, format, or constraint detail (e.g. the 200-item cap) beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description gives a specific verb (applies a batch of ops) and resource (a form document), and enumerates the exact op names, so the agent knows this is the mutation entry point for forms. It does not explicitly distinguish itself from siblings such as form_build or form_check, leaving that differentiation to the tool name alone.

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 when-to-use versus when-not-to-use guidance and no alternative tool is named, even though form_build, form_check, and form_starter sit right next to it. The 'whole or not at all' clause describes atomicity, not when this tool should be selected.

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

form_buildBuild a form meshAInspect

Builds a form (a shipped id such as scots-pine, oak or boulder, or a whole form document) at one variant and reports what the sculptor drew: the knob values for that variant and each level of detail's vertex and triangle counts. lod is near, mid, far or horizon. Costs 1 unit.

NameRequiredDescriptionDefault
lodNoThe level of detail to build at: near, mid, far or horizon.
formYesA shipped form id (scots-pine, oak, boulder and the rest) or a whole form document written inline.
variantNoWhich variant of the form to build, 0 to 255; the same variant always builds the same shape.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnly=false, destructive=false, openWorld=false, idempotent=false), so the bar is lower. The description adds genuinely non-structured context: a per-call cost of 1 unit and the determinism guarantee that the same variant always builds the same shape, which reconciles with the non-idempotent hint by implying repeated calls re-spend units. It stops short of stating permissions or failure modes.

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

Conciseness4/5

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

Dense and front-loaded: the verb, accepted form kinds, and reported output come first, with the lod vocabulary and cost tacked on as short clauses. No filler sentences, though the return-value sentence is somewhat heavy given an output schema exists.

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 need not explain return values, yet it does anyway; that redundancy is harmless. It covers cost, accepted form inputs and lod values, leaving only sibling differentiation and auth/prerequisite behavior unaddressed.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents form, variant and lod. The description's additions (example ids 'scots-pine, oak, boulder', the lod enumeration, the determinism note) largely duplicate schema text already present, so this stays at the baseline 3.

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 ('Builds a form ... at one variant') and describes the observable result (knob values, vertex/triangle counts per LOD). It does not, however, differentiate itself from nearby siblings such as form_apply, form_check or form_starter, so an agent must infer the boundary from names alone.

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: you call it to build/realize a form and inspect its geometry. There is no explicit when-to-use, when-not-to-use, or named alternative despite three form_* siblings existing. The 'Costs 1 unit' note is a useful decision input but not routing guidance.

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

form_checkCheck a formA
Read-onlyIdempotent
Inspect

Checks a form document against the sculptor's strict reader. Costs no units.

NameRequiredDescriptionDefault
formYesThe form document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint=false, and destructiveHint=false, so safety is covered. The description adds a behavioral detail not present in the annotations – that the operation 'Costs no units' – plus the fact that validation runs against a 'strict reader'. It doesn't say what happens on failure, but an output schema exists to carry results.

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 short sentences, front-loaded with the action, with no redundant or filler text. Every clause carries information.

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 one-parameter validator with a present output schema and full annotation coverage, the description supplies the essentials (what is checked, what it is checked against, and that it is free). The only gap is that 'the sculptor's strict reader' is left undefined, so the agent does not know what rules are enforced.

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?

With a single parameter and 100% schema description coverage, the schema already documents the 'form' object including that it is written inline as JSON. The description adds no format, size, or content constraints 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.

Purpose4/5

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

States a specific verb+resource ('Checks a form document') and names the validation target ('the sculptor's strict reader'), which distinguishes it from the sibling form_build/form_apply mutation tools. However, it never explicitly contrasts itself with the other *_check siblings (art_check, video_check, etc.) or with form_apply, so sibling differentiation is only implied.

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 implied by the check/apply naming pattern, and 'Costs no units' is a useful hint that it is a free operation. But the description gives no explicit when-to-use guidance, no statement of what the strict reader rejects, and no pointer to form_apply for the mutation path.

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

form_starterStarter formB
Read-onlyIdempotent
Inspect

A blank form document for a generator kind (growth, rock, face, blades, canopy, masonry, lathe, sweep, truss, frond), named by id. Costs no units.

NameRequiredDescriptionDefault
idYesThe id to give the new form: lower-case letters, digits and hyphens.
kindYesThe generator kind to start from: growth, rock, face, blades, canopy, masonry, lathe, sweep, truss or frond.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

B3.2/5.0
Behavior3/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 the safety profile is covered. The description adds one real behavioral fact not present in structured data, that the call costs no units, but says nothing about whether the named form persists or what the returned document 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?

Two compact sentences with no filler; the artifact and its enumeration come first and the cost note is appended. Nothing is padded, though the kind list duplicates data the schema already holds.

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?

An output schema exists, so return-value explanation is not needed, and the annotations plus 100%-covered schema carry the safety and parameter burden for a low-complexity two-parameter tool. The only shortfall is the missing placement guidance relative to the other form_* tools.

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

Parameters3/5

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

Schema description coverage is 100%, and both parameters carry clear descriptions including the id pattern and the kind list, so the baseline of 3 applies. The description restates the kind enumeration already in the schema and adds no new syntax or constraint details.

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 concrete artifact produced (a blank form document), scopes it to a generator kind, and enumerates every valid kind, so the resource is unambiguous. It omits the verb (returns? creates?) and does not distinguish itself from siblings like form_build, form_apply or form_check, which is exactly the gap between a 4 and a 5.

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 statement of when to reach for this tool versus form_build, form_apply or form_check, nor any prerequisite such as a required prior step in a flow. The only contextual hint, 'costs no units', is a cost note rather than usage guidance.

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

jobRead a jobA
Read-onlyIdempotent
Inspect

A job's status and, once it is ok, its files as signed URLs (and small PNGs inline). For a queued job (video_still, video_render, raster_render, and a large pull_analyse, pull_twin or pull_lab) the status is queued, running, ok, refused, failed, cancelled or expired; wait_s (at most 25) holds the answer until the job ends. A queued pull job's result is its verdict, and its whole report is the file report.json. Costs nothing.

NameRequiredDescriptionDefault
jobYesThe job id from the call that queued it, such as job_ followed by 24 hex digits.
wait_sNoSeconds to hold the answer until the job ends; 0 answers at once.

Output Schema

NameRequiredDescription
jobYesThe job id.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits charged.
statusYesqueued, running, ok, refused, failed, cancelled or expired.

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world, so the safety profile is covered. The description adds real value beyond that: the full status lifecycle (queued/running/ok/refused/failed/cancelled/expired), that wait_s blocks until completion, that a completed pull job's report is report.json, and that it is free.

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 what the tool returns, then the status/wait semantics, then cost. It is dense but every sentence carries information; the parenthetical lists of job types and statuses are the only slight bulk.

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 an output schema present, return values need not be enumerated, yet the description still explains status values, wait semantics, and the key file (report.json). For a 2-parameter read tool with full annotation coverage, 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.

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented in the schema, establishing a baseline of 3. The description only restates wait_s's blocking behavior and max of 25, which the schema already says ('Seconds to hold the answer until the job ends'), so it adds little beyond the structured fields.

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

Purpose4/5

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

The description states a specific verb (read) and resource (a job's status) plus the payload it returns (files as signed URLs, small PNGs inline). It clearly scopes to a single job, distinguishing it in effect from the list-style sibling 'jobs' and the mutation sibling 'cancel_job', though it never names those alternatives explicitly.

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 the operating context for a queued job, explains the polling pattern via wait_s (at most 25, holds until the job ends), and notes 'Costs nothing'. It does not explicitly route to alternatives (jobs for listing, cancel_job for cancellation), so it stops just short of full when/when-not guidance.

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

jobsList recent jobsA
Read-onlyIdempotent
Inspect

This account's newest queued jobs (at most 50), ids and states only, newest first. The job tool reads one in full. Costs nothing.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
jobsYesJob ids and states, newest first.
limitYesThe most jobs listed.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely new behavioral facts beyond them: a hard cap of 50 results, that only ids and states are returned (not full payloads), newest-first ordering, and that the call costs nothing. It does not define what the state values are, which would have made it 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.

Conciseness5/5

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

Three short sentences, each earning its place: scope and ordering first, the sibling pointer second, the cost note last. No repetition of the title and no filler.

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

Completeness4/5

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

With an output schema present, return-field documentation is not required, and annotations carry the safety profile, so the description only needs to add cap, ordering, subset, cost and the sibling relationship — all of which it does. The one gap is that 'queued' states are not enumerated, leaving the agent to infer what state values it will see.

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 the baseline of 4 applies. The description correctly adds no parameter detail and instead spends its words on result shape and cost, which is the right allocation.

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 (list) plus resource (jobs) with precise scope: this account's newest queued jobs, at most 50, ids and states only, newest first. It also explicitly separates itself from the sibling 'job' tool, which reads one in full, so an agent can route 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 Guidelines4/5

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

Names the alternative ('The job tool reads one in full'), which strongly implies the workflow: use jobs to discover ids, then job to read details. It stops short of an explicit when-not or a statement that non-queued/historical jobs are excluded, so it is clear context but not a full routing rule.

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

material_applyEdit a materialAInspect

Applies a batch of ops (set_material, add_node, remove_node, set_node_param, connect, disconnect, set_out, add_ramp_stop, remove_ramp_stop, set_ramp_stop, add_curve_point, remove_curve_point, set_curve_point, clear_nodes) to a material document, whole or not at all. Returns the edited document or the refusal. Costs 1 unit.

NameRequiredDescriptionDefault
opsYesThe edits to apply in order, each an object with an op name (set_material, add_node, remove_node, set_node_param, connect and the rest). The batch applies whole or not at all.
materialYesThe material document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/5.0
Behavior4/5

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

The annotations only declare the safety profile (readOnly=false, destructive=false, idempotent=false, openWorld=false), so the description carries the extra burden well: it states the atomic all-or-nothing batch semantics, that it returns either the edited document or the refusal, and that it costs 1 unit. It does not describe what triggers a refusal or how large batches are limited (500 ops), 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?

It is a single dense sentence, and the ordering is good: verb, target, op vocabulary, atomicity contract, return value, then cost. The 14-item op enumeration is long but each name is genuinely useful to a calling agent, so it earns its length.

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

Completeness4/5

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

With an output schema present, return structure need not be restated, and the annotations cover safety; the description still adds the atomicity contract and cost. The main residual gap is failure semantics — what a 'refusal' looks like and why one occurs — which matters for a mutating tool with a 500-op ceiling.

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

Parameters4/5

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

Schema description coverage is already 100%, so the baseline is 3; the description adds value by listing all fourteen op names (the schema only lists a representative subset plus 'and the rest') and by stressing that ops apply in order within the atomic batch. The inline-JSON nature of the material document parameter is left to the schema.

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

Purpose4/5

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

The title-plus-description names a specific verb ('applies a batch of ops') and resource ('a material document') and enumerates the exact operation set, so the agent knows precisely what capability this exposes. It never names a sibling (e.g. material_check or material_bake) to distinguish itself, so it stops short of a 5.

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 infers it should call this when it needs to mutate a material, and the 'Costs 1 unit' note is a useful budgeting hint. There is no explicit when-to-use vs. material_check/material_cost guidance and no stated prerequisites, so it is minimum-viable rather than strong.

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

material_bakeBake a materialAInspect

Bakes a material (a shipped id, or a whole material document) to its seven channels (albedo, normal, roughness, metallic, height, emissive, ambient occlusion) as PNGs at res pixels square: 64, 128, 256, 512 or 1024 (default 256). 512 or less costs 1 unit; 1024 costs 2.

NameRequiredDescriptionDefault
resNoBake resolution in pixels square: 64, 128, 256, 512 or 1024 (default 256). 1024 costs more.
materialYesA shipped material id (art_materials lists them) or a whole material document written inline.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations only declare the generic profile (not read-only, not idempotent, not destructive), so the description carries the real burden and does disclose meaningful behavior: the produced artifacts, the fixed set of channels, and a cost model (1 unit at 512 or below, 2 units at 1024). What is still missing is where the PNGs land and whether rebaking overwrites prior output.

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

Conciseness5/5

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

Two tightly packed sentences with zero filler: the operation and its outputs come first, then the resolution/cost tradeoff. Every clause earns its place.

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

Completeness4/5

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

With an output schema present, return values need no explanation, and the description covers the operation, output channels, resolution range, and cost. It leaves minor gaps around output destination and interaction with existing baked assets, but nothing that would block a correct call.

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

Parameters3/5

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

Schema description coverage is 100%, so both parameters are already documented structurally. The description restates the resolution options and cost and clarifies that 'material' can be a shipped id or an inline document, but adds no syntax or constraints beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb and resource ('Bakes a material') and enumerates the exact output artifacts (seven named channels as PNGs). It is easy to tell apart from material_apply or material_check in practice, but it never explicitly contrasts itself with those siblings, so it stops short of a 5.

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 statement of when to use this tool versus alternatives such as material_apply, material_cost, or material_check, nor any prerequisites (e.g., must the material already exist or be validated). The cost-per-resolution note is useful for choosing an argument, but it is not usage guidance.

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

material_checkCheck a materialA
Read-onlyIdempotent
Inspect

Checks a material document against the engine's strict reader: admissible, or the refusal. Costs no units.

NameRequiredDescriptionDefault
materialYesThe material document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/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 genuinely new behavior: it is free ('costs no units') and returns a binary admissible/refusal verdict against a strict reader, which is not captured in the structured fields.

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 tight clauses with the verb front-loaded and zero filler; the cost note follows the outcome statement and earns its place by informing invocation decisions.

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?

An output schema exists so the verdict format need not be explained, and annotations carry the safety profile. Combined with the cost and strictness notes, an agent has enough to invoke it correctly, though the meaning of 'strict reader' remains slightly opaque.

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?

With a single parameter at 100% schema coverage, the schema already documents that the material is an inline JSON object. The description adds nothing about the expected document shape or constraints, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb (checks) plus resource (material document) and the outcome form ('admissible, or the refusal'). It is clearly distinguishable from write siblings like material_apply or material_bake, though it never names them explicitly. The 'engine's strict reader' phrasing is somewhat internal jargon.

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?

'Costs no units' implicitly signals this is a free pre-flight validation you can call before material_apply, which is useful implied guidance. However, it never states when-not to use it or explicitly contrasts it with material_cost or material_apply.

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

material_costPrice a material bakeA
Read-onlyIdempotent
Inspect

What baking a material document costs at res pixels square (default 256): operations and bytes. Costs no units.

NameRequiredDescriptionDefault
resNoBake resolution in pixels square to price (default 256).
materialYesThe material document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive. The description adds information the annotations do not carry: that the call consumes no credits ('Costs no units'), which is a genuine billing/side-effect clarification beyond the structured safety hints.

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 compact sentence front-loads the cost question and then the return units. The trailing 'Costs no units.' is terse but earns its place by clarifying billing, so the structure is efficient without waste.

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

Completeness4/5

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

An output schema exists, so the description need not document the returned operations/bytes structure. Combined with 100% schema coverage for inputs, the only real gap is the absence of an explicit pointer to material_bake as the follow-up action.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are already documented there, including the res default of 256. The description repeats the res default but adds no syntax, format, or constraint detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

The description names a specific verb+resource ('what baking a material document costs') and states the return shape ('operations and bytes'). It distinguishes itself implicitly from the sibling material_bake by being a pricing query rather than the bake itself, though it never names that sibling 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 estimate for material_bake, but the description never says when to call it instead of material_bake or material_check. No prerequisites or exclusions are given.

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

ownerRead or name the ownerA
Idempotent
Inspect

The account's owner: the person or business responsible for the agent, by email. Called with no arguments it reads the owner's state (confirmed, unconfirmed, missing or removed, the address hidden in the middle). With owner_email it names the owner, changes it, or sends the confirmation again. The free plan starts when the owner confirms; a pass never waits for it. Costs nothing.

NameRequiredDescriptionDefault
owner_emailNoThe email of the person or business responsible for this agent. Omit it to read the owner's state.

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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

Annotations declare readOnlyHint=false and idempotentHint=true, and the description substantiates this by spelling out that the write path is 'name, change, or resend' rather than destruction. It goes well beyond the structured fields by disclosing the email-masking behavior ('address hidden in the middle'), the full set of read states, the confirmation/plan lifecycle, and that the call costs nothing.

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?

Four compact sentences, front-loaded with what the resource is before splitting into read/write modes. Every clause carries information (states, masking, plan trigger). Minor debt: 'a pass never waits for it' and 'Costs nothing' are terser than they are clarifying, but nothing is filler.

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

Completeness4/5

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

An output schema exists, so return shape need not be explained, yet the description still summarizes the possible read states. For a single-optional-parameter tool with annotations covering the safety profile, an agent has all it needs to invoke correctly. Only the jargon-y confirmation/pass interaction leaves a small interpretive gap.

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

Parameters4/5

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

Schema coverage is 100% and the single parameter is already documented, so the baseline is 3. The description adds semantics the schema does not: the same parameter can name the owner, change an existing value, or merely re-send a confirmation, and that omitting it is a read. That is real meaning beyond the schema's terse 'omit it to read'.

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?

Names a specific resource (the account owner) and precisely describes its dual behavior: a no-argument read versus an owner_email write/resend. It even enumerates the states the read returns (confirmed, unconfirmed, missing, removed), which most definitions omit. It is clear enough to distinguish from any sibling, though the phrasing 'by email' and the opening fragment make the first sentence slightly oblique.

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 states the selection condition between the two modes: no arguments reads state, owner_email names/changes/resends. No alternative tools are named, but none of the siblings overlap with owner management, so there is nothing to route away from. Prerequisite context (free plan starts on confirmation) is also given.

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

pull_alignAlign two clocksBInspect

Aligns two stations' clocks from repeated pings, each [sent_ns, remote_ns, received_ns] (sent and received on this station's clock, remote on the other's): the offset and its uncertainty by the fastest round trip, and the stations record a two-station session carries. Costs 1 unit.

NameRequiredDescriptionDefault
pingsYesRepeated pings, each [sent_ns, remote_ns, received_ns]: sent and received on one station's clock, remote on the other's.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

B3.4/5.0
Behavior4/5

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

Annotations give readOnlyHint=false, idempotentHint=false, destructiveHint=false, openWorldHint=false, but the description adds real value: it explains the algorithmic basis (offset and uncertainty from the fastest round trip), discloses the side effect that a two-station session is recorded (which is why readOnlyHint is false), and states the cost ('Costs 1 unit'). That is meaningfully more than the annotations provide.

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

Conciseness3/5

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

A single dense sentence with the action front-loaded, which is good, but the trailing clause 'and the stations record a two-station session carries' is awkward to the point of ambiguity about what is actually recorded. The core content earns its place; the phrasing does not.

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 one-parameter tool with a full schema and an output schema, most needs are covered: the description supplies the algorithm, the clock-domain semantics of the ping triple, the session side effect, and cost. Given annotations and schema carry the rest, little is missing beyond sibling routing.

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

Parameters3/5

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

Schema description coverage is 100% and there is a single parameter, so the schema already documents the [sent_ns, remote_ns, received_ns] triple. The description restates the same semantics, adding only the parenthetical that sent/received use this station's clock and remote the other's — marginal beyond the schema. Baseline 3 applies.

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

Purpose4/5

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

Names a specific verb+resource ('Aligns two stations' clocks') and goes on to describe the ping input and the estimated offset, making the action identifiable. However, it never distinguishes itself from any of the many pull_* siblings (pull_analyse, pull_twin, pull_replay), so an agent has no anchor for when this is the right pull tool. The final clause about the session is garbled and blurs the purpose somewhat.

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

Usage Guidelines2/5

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

The description gives the required input shape but no when-to-use guidance, no prerequisites, and no comparison to the sibling pull_* tools that likely overlap. An agent must infer usage entirely from the mechanics. Only the implicit framing ('from repeated pings') hints at context.

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

pull_analyseAnalyse pull sessionsAInspect

Analyses the sessions of one condition (one session, a list, or {"sessions": [...]}) together, and each alone, and returns the report: its label (significant; null, with the smallest effect these sessions could have found; unlabelled, with what is missing; or not testable) and the sentence behind it, the mean signed shift against three surrogate families, the placebos, the four cells (deliberate, programmed, luck and sync), intended against unintended changes, recovery, locking, and the report's hash. prereg registers the run; replication analyses a second set under it, beside the first; measure is phase (timing, the default) or state (the stance along the leader's declared direction, for two agents); surrogates (19 to 9,999, default 199) sets an unregistered run's draws a family, a registered run taking its pre-registration's; seed fixes them; a session of three or more generators is tested pair by pair, every ordered pair with its own ledger and the correction for their number, unless pairs is false; detail adds every pull record. It costs one unit for each 40,000 session-draws over a thousand events (a session's own reading counts as 200 draws), at least 1. A group costs its ordered pairs' worth. A call priced at more than 2 units is queued: the answer is 202 with a job id and its price, GET /api/agents/jobs/ (or the MCP tool job) says when it is done, and the whole report comes back as report.json beside a short verdict. A queued call is refused on the free plan with 402: its units buy only calls that answer at once, and queued jobs need a paid plan (a pass or the card plan). Sessions are not kept.

NameRequiredDescriptionDefault
seedNoA whole number that makes the run reproducible: the same seed and inputs give the same answer.
pairsNoTrue to analyse performer pairs as well.
detailNoTrue to return the fuller per-session detail.
preregNoThe pre-registration the sessions were run under, to check the analysis against it.
measureNoThe measure to analyse, by name.
sessionsYesOne session, a list of sessions, or {"sessions": [...]} of one condition, as JSON documents.
surrogatesNoHow many surrogate runs to draw for the null, 19 to 9999.
replicationNoSessions of a replication, analysed against the first set.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.5/5.0
Behavior4/5

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

Annotations mark it as non-read-only, non-idempotent, non-destructive, open-world false. The description adds substantial behavioral detail: cost model (40000 draws per unit), queuing threshold>2 units, 202/402 plan limits, and that sessions are not kept. This goes well beyond annotations. However, it doesn't clarify auth requirements or rate limits beyond the cost model.

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

Conciseness2/5

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

The description is a single, extremely long and dense paragraph with minimal structure. It is not front-loaded; key information about cost and queuing is buried in the middle. While concise in word count, it is hard to parse due to lack of organization.

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

Completeness4/5

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

Given the complexity (8 parameters, output schema exists, nested logic), the description covers most behavioral aspects: cost, queuing, plan limits, and data retention. It might miss some edge cases but is fairly complete for an advanced tool.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all parameters. The description adds some context about parameter behavior (e.g., surrogates range, measure default), but baselines at 3 when schema does the heavy lifting.

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

Purpose4/5

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

The description states a specific verb and resource: it analyses sessions of one condition and returns a detailed report. It is clear what the tool does, but it does not explicitly differentiate itself from siblings like pull_replay or pull_prereg, which likely also deal with session analysis.

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

Usage Guidelines3/5

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

The description mentions related tools (prereg registers, replication analyses a second set), implying usage contexts, but it does not give explicit when-to-use vs. when-not-to-use guidance or name alternatives for this specific analysis task.

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

pull_callCall a pull verb by nameAInspect

Runs an ae_pull verb this list does not name yet, by its name, over one document when it reads one: the way to reach what the engine adds before this service lists it. No flags pass through, and the verbs above (schema, analyse, twin, schedule, seal, open, prereg, replay, close, align, lab, cost, practice) are refused here: each has its own call. Answers at once, within 30 seconds. Costs 1 unit.

NameRequiredDescriptionDefault
verbYesThe ae_pull verb name to run, lower-case with underscores.
documentNoThe one JSON document the verb reads, when it reads one.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare the non-destructive/non-idempotent profile, and the description usefully adds latency ('Answers at once, within 30 seconds'), cost ('Costs 1 unit'), and the constraint that no flags pass through. However, for a generic verb dispatcher whose read/write behavior depends on the named verb, the description never addresses whether the invoked verb can mutate state, leaving the biggest behavioral unknown uncovered.

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?

Purpose is front-loaded and the exclusion list plus latency/cost details are packed in efficiently. The phrasing is slightly ornate ('the way to reach what the engine adds before this service lists it'), which costs a little clarity but not much space.

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, return values need no explaining, and the description covers routing, exclusions, latency, and cost. The only real gap is the unstated mutation semantics of the underlying verb, which matters for a generic dispatcher.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters, including the verb name pattern and the optional 'document'. The description reinforces that only one document is passed and that no flags are accepted, but adds little syntactic meaning beyond the structured fields. Baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('Runs an ae_pull verb ... by its name, over one document') and explicitly differentiates itself from the sibling pull_* tools by listing the verbs it refuses. An agent can tell immediately what this does and when it differs from pull_schema, pull_cost, etc.

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 both sides of the routing rule: use this for verbs 'this list does not name yet', and do NOT use it for schema, analyse, twin, schedule, seal, open, prereg, replay, close, align, lab, cost, or practice, each of which has its own call. Explicit when/when-not with named alternatives.

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

pull_closeClose a sessionAInspect

Closes a session's files at at_ns, at or after its end_ns: the session back with its closed record hash and its hashes recomputed. Costs 1 unit.

NameRequiredDescriptionDefault
at_nsYesThe closing time in integer nanoseconds, at or after the session's end.
sessionYesThe session document to close, as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations cover the safety profile (non-read-only, non-idempotent, non-destructive), and the description adds genuinely new context: the session is returned with a closed record hash and recomputed hashes, and the call 'Costs 1 unit'. That mutation/cost detail goes beyond the annotations, though it omits reversibility.

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?

Two compact clauses that front-load the action and its effect. The phrasing ('the session back with its closed record hash') is slightly awkward but wastes little space.

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

Completeness3/5

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

With an output schema present, return values need not be re-explained, and annotations carry the safety profile, so the description is largely sufficient. Its gap is sibling differentiation: nothing tells an agent how this differs from pull_seal or pull_open, which matters in a family this crowded.

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 both parameters are already documented, including the exact 'at or after the session's end' constraint that the description repeats. The description adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose4/5

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

States a specific verb and resource ('Closes a session's files') with a clear scoping constraint. However, it does not distinguish this from the many related session tools (pull_open, pull_seal, pull_replay), so an agent cannot tell from the description alone when closing beats sealing.

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

Usage Guidelines3/5

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

The description gives a precondition ('at or after its end_ns') that implicitly bounds valid usage, but it names no alternatives and gives no explicit when-to-use/when-not guidance against sibling tools like pull_seal or pull_open.

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

pull_costPrice a pull callA
Read-onlyIdempotent
Inspect

Prices a call without making it: give the arguments of pull_twin (a twin document, or condition, coupling, planted, field, sessions as a number and seed; nothing at all is the default twin), of pull_analyse (a sessions document, with prereg, replication, surrogates and pairs) or of pull_lab (a theory, one-dimensional or with a model, or reference skyrme or hopfion). The engine counts the document without running it: a twin's or an analysis's sessions, events, draws, work and an estimate of CPU-seconds (cpu_pairs and cpu_note say which part of a group's estimate repeats for each pair), a lab theory's lattice, the steps priced and its CPU-seconds. The answer adds what this service makes of the count: for, the call it priced; units, what that call would be charged, null when it would be refused (a queued call's price is the engine's count, so a lattice or a system generator, which the formula that routes a call cannot see, is priced as it will be); queued, whether it would be queued (202) rather than answer at once; within_limits, and when it is false the limit it breaks. A one-dimensional theory is counted too and is queued like any theory (an ordinary one at 1 unit), and the one-dimensional references, which are not counted, are refused here by name. Runs and renders nothing. Costs no units.

NameRequiredDescriptionDefault
seedNoA whole number that makes the run reproducible: the same seed and inputs give the same answer.
twinNoA twin document written inline, as for pull_twin.
fieldNoThe field to price in, by name.
pairsNoTrue to price the pair analysis as well.
preregNoA pre-registration, to price an analysis under it.
theoryNoA theory document, to price a lab run.
plantedNoThe planted effect as a pair of numbers between -2 and 2.
couplingNoCoupling to price at, 0 to 1.
sessionsNoA session count for a twin run, or the sessions of an analysis to price.
conditionNoThe condition to price: P or R followed by 1 to 4.
referenceNoTrue, or a reference name, to price the lab's reference run.
surrogatesNoSurrogate runs to price, 19 to 9999.
replicationNoReplication sessions, to price an analysis with them.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.7/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, non-destructive), and the description adds real behavioral context beyond them: 'Runs and renders nothing. Costs no units.' plus the refusal semantics and the note that a queued call's price is the engine count. This is genuine added value that the annotations cannot express.

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

Conciseness3/5

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

The first clause is well front-loaded, but the body is a dense run-on with nested parentheticals and repetitive 'price/priced' wording that is hard to parse. The length is partly justified by 13 parameters and three input modes, yet the structure could be much cleaner.

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 13-parameter, multi-mode tool with nested objects, the description covers the key facts an agent needs: what is and isn't run, that it costs no units, and the meaning of the answer (for/units/queued/within_limits) even though an output schema exists. It falls just short of complete because mode-selection and refusal conditions are stated obliquely.

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 a semantic grouping the flat schema lacks: it explains which parameter clusters belong to the twin mode (twin, condition, coupling, planted, field, sessions, seed) versus the analysis mode (prereg, replication, surrogates, pairs) versus the lab mode (theory, reference). That mode-mapping meaningfully helps an agent pick the right arguments.

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 opening clause 'Prices a call without making it' gives a specific verb and resource and states the key scope (a dry-run cost estimate). It goes on to name the sibling tools whose arguments it accepts (pull_twin, pull_analyse, pull_lab), which helps distinguish it. However the phrasing is so convoluted that the crisp differentiator against pull_call is buried rather than front-and-center.

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 implied rather than stated: you feed it the arguments of pull_twin/pull_analyse/pull_lab to learn what a call would cost, and 'nothing at all is the default twin' gives a fallback. It also names an exclusion (the one-dimensional references 'are refused here by name'). But there is no explicit when-to-use-this-instead-of-calling guidance.

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

pull_labRun the field-theory labAInspect

Runs the pull engine's field-theory lab on a theory document (its fields, Lagrangian, which quantity is the mass, what fixes the sector and the value expected; pull_schema lists the keys): the equations derived, a static solution found and weighed, a check that the solver finds no lump where there is none, its small oscillations and a collision, in a fixed layout with an honesty box saying what is exact and what is remembered rather than sourced. reference (true, or a reference theory's name) runs the reference suite instead, each known number naming its source. reference true (the one-dimensional suite) answers within 30 seconds for 1 unit. A one-dimensional theory is counted first, by the engine, in its sites and its relaxation and collision steps: one that comes to 1 unit (a second or so, on the lattice the lab picks for most theories) answers at once for that unit, and a larger one is queued and priced like a theory with a model, at least 1 unit. The lab picks a spacing of 0.05 over the heavier meson and a box of 16 over the lighter, so a theory whose vacua differ a hundredfold in mass counts 64,001 sites and some 3,200 CPU-seconds, and a lattice the theory sets itself (lattice.dx as fine as 1e-4, lattice.half_length as wide as 1000) grows as the square of one over the spacing. A theory with a model (the Skyrme model's baryon, the Faddeev-Skyrme model's knot), and reference skyrme or hopfion, relaxes a lattice in three dimensions, which takes minutes of CPU: it is queued, on 4 threads, and priced by the engine's count of its lattice and steps, a unit for each 5 CPU-seconds of one thread it estimates, at least 1 and at most 300 (the reference Skyrmion costs 38; a hopfion relaxes four times, and the reference one, on 128 sites a side, comes to far over the most a job may cost and is refused with its price, while one relaxed on 64 sites a side, 217 units, is accepted; pull_cost says the price first). The steps priced are the steps asked for or, for each site of the relaxed lattice's side less one, 60 (a Skyrmion) or 75 (a hopfion), whichever is fewer, which is more than a relaxation took in a box that holds the soliton (a Skyrmion's 25 to 43 for each side less one at 25 to 161 sites a side, a hopfion's 28 to 56 at 32 to 128); a box narrower than the soliton (a Skyrmion's lattice.half_length must be 2 or more, a hopfion's relax.half_length 4 or more), where a relaxation took several times as long or never settled, is refused, and a relaxation that has not settled by then is stopped at three times its estimate and costs its price. A call priced at more than 2 units is queued: the answer is 202 with a job id and its price, GET /api/agents/jobs/ (or the MCP tool job) says when it is done, and the whole report comes back as report.json beside a short verdict. A queued call is refused on the free plan with 402: its units buy only calls that answer at once, and queued jobs need a paid plan (a pass or the card plan).

NameRequiredDescriptionDefault
theoryNoThe theory document written inline: its fields, Lagrangian and the quantity to match.
referenceNoTrue, or a reference name, to compare against a reference run.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.8/5.0
Behavior5/5

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

Annotations only assert readOnlyHint=false, idempotentHint=false, openWorldHint=false, destructiveHint=false; the description adds substantial disclosure beyond that: async 202 responses with a job id, the GET /api/agents/jobs/<job> (or 'job' tool) completion path, 402 refusal on the free plan, paid-plan requirement for queued jobs, thread counts, CPU-time estimation rules, and explicit refusal conditions (lattice narrower than the soliton, unsettled relaxations stopped at 3x estimate). This is exactly the operational context an agent needs before invoking.

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

Conciseness2/5

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

The body is a single enormous run-on paragraph that buries the selection-relevant facts under extreme numeric minutiae (64,001 sites, ~3,200 CPU-seconds, 0.05 spacing, 16 box, 25-to-43 step counts). Only the first clause is front-loaded; the rest is unordered and hard to scan, and much of the cost arithmetic is not actionable at call time.

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

Completeness4/5

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

For a complex, nested-parameter tool with an output schema present, the description covers the essentials an agent needs: queuing threshold, plan gating, refusal modes, timeouts, and the failure/pricing contract. Return-value detail is legitimately offloaded to the output schema, though the density makes it hard to confirm coverage at a glance.

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

Parameters4/5

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

Schema coverage is 100% and both parameters are documented in-schema, so the baseline is 3. The description goes further by characterizing the inline theory document (fields, Lagrangian, which quantity is the mass, what fixes the sector and the expected value) and by spelling out reference semantics (true = the one-dimensional suite; reference skyrme/hopfion select model-based runs), which the schema's const/pattern does not convey.

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 concrete verb+resource: "Runs the pull engine's field-theory lab on a theory document", and the opening clause enumerates what the lab produces (equations derived, static solution weighed, oscillation and collision). That is well beyond a tautology of the title. It does not, however, explicitly distinguish itself from close siblings such as pull_call, pull_analyse or pull_practice, so an agent must infer the boundary.

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

Usage Guidelines3/5

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

The description gives conditional routing details (reference=true runs the reference suite, >2-unit calls are queued, free-plan queued calls return 402) and defers key discovery to pull_schema and pricing to pull_cost. But it never says when to reach for pull_lab rather than pull_call/pull_analyse; usage is implied by the cost/queue mechanics rather than stated as a selection rule.

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

pull_openOpen a sealed recordAInspect

Opens a sealed record (the public half, or {"sealed": ...}) with its secret (key, iv, nonce): the content, and whether the seal is intact. A seal that does not open is a finding, not a refused input: it answers 200 with ok false, intact false and why. Nothing is kept. Costs 1 unit, a broken seal included.

NameRequiredDescriptionDefault
sealedYesThe sealed record (its public half), as JSON.
secretYesThe secret half (key, iv, nonce) that opens it, as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.9/5.0
Behavior5/5

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

Beyond the annotations, the description discloses substantial behavior: the failure path returns 200 with ok false, intact false and a reason (rather than erroring), nothing is persisted ('Nothing is kept'), and the call costs 1 unit even for a broken seal. Cost and statelessness are exactly the kind of context annotations do not convey. The one soft tension is 'Nothing is kept' against readOnlyHint=false, but the 'Costs 1 unit' billing mutation reconciles it.

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 action is front-loaded and the three sentences are information-dense with little waste. The first sentence is heavy with nested parentheticals and a JSON fragment, which slightly hurts readability, but nothing is redundant.

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, return values need no explanation, and annotations cover the safety profile; the description still goes further by documenting the failure response, cost, and statelessness. The only omission is any reference to the pull_seal/pull_close relationship, which would help an agent place it among siblings.

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

Parameters3/5

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

Schema description coverage is 100%, and the schema already states 'The sealed record (its public half)' and 'The secret half (key, iv, nonce)'. The description largely restates this, adding only the loose `{"sealed": ...}` wrapper hint, so it sits at the baseline where the schema does the heavy lifting.

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 a specific verb (opens) and resource (a sealed record) and even clarifies the two inputs (public half plus secret) and the two things returned (content and seal integrity). It is unmistakably a decrypt/verify operation. It stops short of naming the inverse sibling pull_seal, so there is no explicit sibling differentiation.

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

Usage Guidelines3/5

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

Usage is implied rather than stated: the agent learns this is the tool for a sealed record you hold the secret for, and the note that a non-opening seal is 'a finding, not a refused input' sets expectations for the call. However, no alternative (e.g. pull_seal, the inverse) is named and there is no explicit when-not guidance.

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

pull_practiceGrade a practiceAInspect

Grades a practice of five drills: match (the spread of the taps against the click), hold (the click falls silent and the person keeps the beat), follow (the click moves its tempo once, at a beat nobody is told), lead (the click follows the person) and duet (the click meets the person a quarter of the way). Each drill is rounds of taps against a click, graded on one number in milliseconds against its level's tolerance, and printed beside the input's own jitter (practice.input: the clock that stamps the taps and its stated jitter), with a sentence saying so when the input cannot tell the person's spread from its own. The staircase is pinned: two passes in a row move a drill up one level and a miss moves it down one, 20 levels at most. The answer's session (each drill's next level and score) goes back in as the next practice's history, oldest first, and a drill the history holds gets a trend over the sessions. A drill's recorded rounds ([{clicks_ms, taps_ms}], a client's own click and tap times) are graded as played; without them a simulated person (a timekeeper and a motor, correcting toward the click) plays the drill, and practice.person sets it. The engine plays no click and hears no input: the client does both. Give a practice document (pull_schema lists its keys under practice), or nothing, or seed alone, for the default practice of all five drills. Every sentence is checked for wellness language and the answer carries the not-a-medical-device sentence; a drill name the check refuses refuses the whole answer. Answers at once, within 30 seconds. Costs 1 unit.

NameRequiredDescriptionDefault
seedNoA whole number that makes the run reproducible: the same seed and inputs give the same answer.
practiceNoThe practice document: the five drills and the taps recorded for each, as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations it discloses cost ('costs 1 unit'), latency ('within 30 seconds'), determinism under seed, the engine/client split ('the engine plays no click and hears no input'), and partial-failure semantics (a refused drill name refuses the whole answer). These are real behaviours an agent could not infer from readOnlyHint/destructiveHint alone. It stops short of describing failure modes for the simulation path.

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

Conciseness3/5

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

The content largely earns its place, but it is delivered as a single dense run-on block with nested parentheticals, so the essential 'what it grades' and 'how to call it' points are not front-loaded or scannable. Size is defensible for the complexity; structure is not.

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?

An output schema exists, so return values need not be restated, yet the description still explains the answer's shape (each drill's next level and score, trends over history). Combined with input-mode coverage, cost, latency and refusal rules, an agent has enough to call the tool correctly.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine meaning: it explains that practice keys live in pull_schema, that practice.person configures the simulated player, and the format and effect of recorded rounds ('[{clicks_ms, taps_ms}] ... graded as played'). It goes beyond restating the schema.

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

Purpose4/5

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

It states a specific verb and resource ('Grades a practice of five drills') and enumerates the five drills, so an agent knows exactly what the tool computes. It does not, however, contrast itself against neighbouring pull_* tools such as pull_analyse or pull_replay, so sibling routing is left to the name alone.

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 spells out the input permutations clearly ('give a practice document ... or nothing, or seed alone, for the default practice of all five drills') and describes the iterative workflow where the returned session is fed back as the next practice's history. It gives context but no explicit when-not or alternative-tool guidance.

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

pull_preregRead a pre-registrationA
Read-onlyIdempotent
Inspect

Reads a pre-registration (what is measured, the conditions, trials per session, sessions, alpha, power, the number of comparisons and the correction) and returns its hash, to record in each session's prereg.hash before the run starts. Costs no units.

NameRequiredDescriptionDefault
preregYesThe pre-registration document, written inline as JSON; pull_schema lists its keys.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.2/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 behavior. The description adds useful behavioral context beyond those: it explicitly states the operation costs no units and returns a hash.

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

Conciseness5/5

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

A single, front-loaded sentence with an informative parenthetical. Every clause earns its place, and nothing is wasted.

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

Completeness5/5

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

Output schema exists so return-value details are not required, yet the description still names the returned hash. With annotations covering safety and the input schema covering structure, the definition is complete for correct invocation.

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

Parameters4/5

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

Schema coverage is 100% and the schema defers key listing to pull_schema. The description adds meaning by enumerating what the prereg object contains (measures, conditions, trials, sessions, alpha, power, comparisons, correction), which helps an agent understand the parameter without a separate schema call.

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 (reads) and resource (pre-registration) and clarifies the return value (its hash). It does not explicitly differentiate itself from sibling pull_* tools, so it falls short of a 5.

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 a clear usage context: record the returned hash in each session's prereg.hash before the run starts. No alternatives or when-not conditions are named, which keeps it from a 5.

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

pull_replayReplay a sessionAInspect

Recomputes a session's hashes against those recorded with it and, for a twin session, runs the twin again from what it records: replays is true when everything matches. A session that does not replay is a finding, not a refused input: it answers 200 with ok false, replays false and which of the hashes did not match. Costs 1 unit, a session that does not replay included.

NameRequiredDescriptionDefault
sessionYesThe session document to recompute, as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4/5.0
Behavior5/5

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

With annotations only covering the safety flags (readOnly=false, idempotent=false), the description carries substantial extra context: it re-runs a twin (explaining the non-read-only, non-idempotent hints), reports which hashes failed, answers 200 with ok=false instead of erroring, and discloses a cost of 1 unit even on failure. Cost and failure-mode disclosure go well beyond what the schema and annotations provide.

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

Conciseness4/5

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

Two dense sentences with no filler: the mechanical behavior comes first, then the outcome and cost semantics. The phrasing is slightly convoluted ('runs the twin again from what it records'), but nothing is padding and the key facts are front-loaded.

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

Completeness5/5

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

An output schema exists, so return-value documentation is not required, yet the description still explains the ok/replays outcomes and the partial-match reporting. Combined with the cost notice and the twin re-run behavior, an agent has everything needed to call this correctly and interpret the result.

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 ('session') whose schema description coverage is 100%, so the schema already documents it as the session document to recompute. The description adds no format, size, or sourcing detail beyond that. Baseline 3 applies when the schema does the heavy lifting.

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

Purpose4/5

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

The description states a concrete verb and resource: recompute a session's recorded hashes and replay a twin session. An agent can tell this apart from most pull_* siblings (align, analyse, seal, close). It stops short of naming the sibling that creates the twin (pull_twin) or otherwise routing between them, so sibling differentiation is implicit rather than explicit.

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 implied rather than stated: it clarifies that a non-replaying session is a legitimate 'finding' rather than a rejected input, which shapes expectations. But there is no explicit when-to-use guidance, no prerequisites for having a session document or a twin, and no direction to alternatives among the many pull_* tools.

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

pull_scheduleDraw a perturbation scheduleAInspect

Draws a schedule of perturbations (tempo up or down, phase advance or delay, and catch trials where nothing changes) placed with a lead-in and random gaps; spec sets its trials, gaps and beat (pull_schema lists the keys). By default the randomness is 32 bytes of this server's operating-system randomness, graded hardware_seeded; seed draws from software instead (graded software, which a research run refuses); entropy_hex with grade brings your own bytes and says where they came from. research refuses software randomness. Returns the schedule and its text, which pull_seal seals. Nothing is kept here. Costs 1 unit.

NameRequiredDescriptionDefault
seedNoA whole number that makes the run reproducible: the same seed and inputs give the same answer.
specNoThe schedule specification written inline as JSON; pull_schema lists its keys.
gradeNoHow the entropy you brought was produced, recorded with the schedule.
entropyNoThe entropy source: os, the server's own.
researchNoTrue to draw the schedule for a research run.
entropy_hexNoYour own entropy as hex, in place of the server's, when you must bring the bytes yourself; grade then says where they came from.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, but the description adds real operational context beyond them: it costs 1 unit, persists nothing ("Nothing is kept here"), returns both schedule and text, and grades randomness sources. These additions are consistent with the annotations, not contradictory.

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

Conciseness4/5

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

Purpose is front-loaded and the trailing short sentences ("Returns the schedule and its text... Nothing is kept here. Costs 1 unit.") are crisp and high-value. The middle entropy sentence is long and slightly overloaded, and "research refuses software randomness" is stated twice, costing a little efficiency.

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 6-param, nested-spec tool with an output schema, the description covers everything an agent needs: what the spec controls, where its keys live, how entropy/grade/seed interact, persistence, cost, and the research restriction. Nothing material is left to guesswork.

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 cross-parameter meaning the schema cannot: the mutual relationship between entropy (default os + hardware_seeded grade), seed (software grade), and entropy_hex + grade, plus the research interaction that rejects software randomness. This is genuine semantic value over the field-level docs.

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+resource ("Draws a schedule of perturbations") and enumerates the perturbation types, so the agent knows exactly what is produced. It also references siblings pull_schema (key list) and pull_seal (sealing), giving partial differentiation, though it never states how it differs from other pull_* generation tools.

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 clear conditional guidance for choosing the entropy path (default OS randomness, seed, or entropy_hex with a grade) and an explicit exclusion (research refuses software randomness). It lacks any tool-level routing such as when to pick this over pull_lab, pull_practice, or pull_replay.

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

pull_schemaPull document schemaA
Read-onlyIdempotent
Inspect

Every document the pull engine reads, with its keys: a session (its generators, their onsets on one integer-nanosecond clock, states, declared intentions, the follower's report and the sealed schedule), a schedule, a pre-registration, a twin, a performer and a device. Call this first. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4/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 behavior, so the safety profile is covered. The description adds genuinely new context beyond them: the tool consumes no units/quota, and it previews the shape of the returned document tree, which is useful for an agent deciding whether to call it.

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?

Compact overall: one dense sentence defining scope followed by two short imperatives. The enumeration of session internals (onsets, states, intentions, follower's report, sealed schedule) is detailed but each item informs what the schema contains; the only mild weakness is that the actionable 'Call this first' directive sits at the end.

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?

An output schema exists, so return values need no further explanation, and with zero parameters and full annotation coverage the remaining burden is low. The description supplies the domain vocabulary an agent needs to interpret the schema, leaving little missing for a call-first introspection tool.

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 the baseline is 4 – there is nothing for the description to disambiguate beyond what an empty schema already conveys.

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+resource (pull the schema of every document the pull engine reads) and enumerates the document types it covers, so an agent knows exactly what comes back. It does not explicitly differentiate itself from schema siblings in other domains (art_schema, video_schema), but the 'pull engine' scoping is clear.

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

Usage Guidelines4/5

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

'Call this first' is an explicit sequencing directive that tells the agent when in the workflow to use it, and 'Costs no units' removes cost as a reason to hesitate. It stops short of naming alternatives or when-not-to-use conditions, so it is clear context rather than full routing guidance.

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

pull_sealSeal a scheduleAInspect

Seals a schedule's text before the run: commits to it (SHA-256 of the text and a nonce) and encrypts it (ChaCha20) under a fresh key. Answers with sealed (the public half, for the session's schedule.sealed) and secret (the key, IV and nonce), to this call alone: this service does not store, log or show again either the text or the secret, so keep the secret, release each cue at its moment, and publish the secret into the session's schedule.opened after the close. held_by names the leader station's generator (default L); at_ns is when it was sealed, before start_ns. By default the randomness is 32 bytes of this server's operating-system randomness, graded hardware_seeded; seed draws from software instead (graded software, which a research run refuses); entropy_hex with grade brings your own bytes and says where they came from. Costs 1 unit.

NameRequiredDescriptionDefault
seedNoA whole number that makes the run reproducible: the same seed and inputs give the same answer.
at_nsNoThe sealing time in integer nanoseconds.
gradeNoHow the entropy you brought was produced, recorded with the schedule.
contentYesThe schedule text to seal, as drawn by pull_schedule.
entropyNoThe entropy source: os, the server's own.
held_byNoWho holds the secret half, recorded with the seal.
entropy_hexNoYour own entropy as hex, in place of the server's, when you must bring the bytes yourself; grade then says where they came from.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only cover safety flags; the description supplies the behavior that actually matters here: the service does not store, log or show the text or secret again, the key is fresh (implying non-idempotence), and the call costs 1 unit. This is exactly the kind of context annotations 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 core operation and dense with relevant detail; nearly every clause earns its place. The trailing entropy-grade sentences are packed and run-on, making them harder to parse than the rest.

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 7-parameter cryptographic tool with an output schema already present, the description covers purpose, lifecycle, cost, and secret-handling obligations. The seed-vs-entropy_hex-vs-grade interaction is the one area left slightly ambiguous.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: held_by defaults to L for the leader station, at_ns is the sealing time before start_ns, and the entropy/seed/entropy_hex/grade interaction determines the entropy grade that a research run accepts or refuses. It goes beyond the schema's per-field text.

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 ('Seals') plus resource ('a schedule's text') plus mechanism (SHA-256 commitment and ChaCha20 encryption under a fresh key) in the first sentence. It also situates the tool in the pull workflow by naming where content comes from (pull_schedule) and where results go (schedule.sealed, schedule.opened), letting an agent distinguish it from pull_open/pull_close/pull_schedule.

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?

Clear context: seal before the run, keep the secret, release cues at their moment, publish the secret into schedule.opened after the close. It also states a conditional constraint ('a research run refuses' software-graded seed). No explicit 'do not use this when...' or named alternative tool, so it stops short of a 5.

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

pull_twinRun twin sessionsAInspect

Runs twin sessions (scripted performers and the machine follower, each session drawn, sealed, released, closed and opened like a real one) and analyses them under the twin's own pre-registration: how many sessions were labelled significant, that rate with its 95% interval, and the pooled report with its hash. Give a twin document (pull_schema lists its keys: others for a group, a room of beings, the system generator, a field lattice), or condition (P1 to P4, R1 to R4), coupling (0 to 1) and planted ([intended, unintended] gains, each -2 to 2) for the engine's default pair; field (toda) strings a lattice between leader and follower. Uncoupled twins measure the false-positive rate; coupled ones should come out significant. The same document and seed give the same report hash as ae_pull itself. sessions is 1 to 1,000 (default 20, or the document's own); a schedule runs to at most 5,000 beats a session. It costs one unit for each 40,000 session-draws over a thousand events (a session's own reading counts as 200 draws), at least 1. A plain pair of up to 20 sessions and 2 units answers at once. Anything more, and any field, group, room or system generator, is queued and priced by the engine's own count of the twin (events a session at the schedule's widest gaps, its draws and its pairs, and the CPU-seconds a lattice or a spiking network takes), at least a unit for each 5 CPU-seconds it estimates, times the sessions. A queued call is refused on the free plan with 402: its units buy only calls that answer at once, and queued jobs need a paid plan (a pass or the card plan).

NameRequiredDescriptionDefault
seedNoA whole number that makes the run reproducible: the same seed and inputs give the same answer.
twinNoA twin document written inline; or use condition, coupling, planted and field instead.
fieldNoThe field to run the twins in, by name.
detailNoTrue to return the fuller per-session detail.
plantedNoThe planted effect as a pair of numbers between -2 and 2.
couplingNoHow strongly the follower is coupled to the performer, 0 to 1.
sessionsNoHow many sessions to run, 1 to 1000.
conditionNoThe condition to run: P or R followed by 1 to 4.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.7/5.0
Behavior5/5

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

Annotations declare non-read-only, non-idempotent, non-destructive, and closed-world, but the description adds rich behavioral context: deterministic reproducibility (same seed/document gives same hash), cost model in units, queuing rules, session limits, schedule bounds, and free-plan refusal. This is well beyond what annotations provide.

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

Conciseness3/5

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

The description is a single dense paragraph of ~250 words, front-loaded with purpose but lacking structural breaks (e.g., bullets for cost/queueing). While much content is necessary, some sentences (e.g., parsing the cost formula) could be condensed, making it harder to scan quickly.

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 complexity, output schema presence, and 8 parameters, the description covers all critical aspects: input modes, defaults, cost, queuing, plan restrictions, and reproducibility. An agent has everything needed to decide when and how to call it.

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

Parameters4/5

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

Schema description coverage is 100%, so baseline is 3. The description adds meaningful details beyond schema: default session count (20 or document's own), field semantics as a lattice between leader and follower, and clarifies planted gains range. It doesn't fully re-explain every parameter but compensates well for the high coverage.

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

Purpose5/5

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

States a specific verb (runs) and resource (twin sessions) plus the analysis output: significance count, rate with 95% interval, and pooled report hash. Distinguishes from siblings by naming ae_pull for hash compatibility and pull_schema for document keys.

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

Usage Guidelines5/5

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

Explicitly describes when to use a twin document versus condition/coupling/planted versus field, and explains the default pair behavior. Also covers cost, queuing, and free-plan refusal (402), leaving no ambiguity about invocation context.

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

raster_checkCheck a shotA
Read-onlyIdempotent
Inspect

Checks a shot document with the renderer's strict reader: its name, size, subject count and length, or the key that is wrong and why. Forms and materials are named by shipped id or written inline. Costs no units.

NameRequiredDescriptionDefault
shotYesA shot document written inline: a camera, the sun and air, and subjects. raster_schema lists every key.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the safe read-only, idempotent, non-destructive, closed-world profile, so the bar is lower. The description still adds real value beyond that: it flags the 'strict reader' behavior, notes the operation costs no units, and characterizes the verdict (valid fields vs. the offending key and reason).

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?

Three tight sentences, front-loaded with the verb and resource, with no filler. Slightly dense but every clause carries information; 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?

An output schema exists, so return values need not be re-explained, and the description still summarizes the verdict shape. For a single-param validation tool it covers what is checked, the reference conventions, and the cost, leaving little an agent needs 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?

With 100% schema coverage the baseline is 3, but the description goes further by clarifying that forms and materials may be referenced either by shipped id or written inline, which is not stated in the schema. The nested shot object is also routed to raster_schema for every key.

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 ('Checks') and resource ('a shot document') and enumerates what is validated (name, size, subject count, length) plus the failure mode ('the key that is wrong and why'). This clearly separates it from raster_render (which renders) and raster_schema (which lists keys).

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 implied – validate a shot document via the strict reader, and it 'costs no units' – but the description never names alternatives like raster_render or raster_schema or states when-not to use it. An agent must infer the validate-before-render workflow.

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

raster_renderRender a shotAInspect

Renders a shot (a camera through the engine's world: forms from the sculptor, people and animals from the rig, open country, primitives, under the game's own sky, sun, shadow and haze) at t seconds as shot.png. width and height (both or neither) set the size, else the shot's own; at most 1920 by 1080 either way up. Costs 3 units plus 1 for each 1.6 megapixels: 4 at 1280x720, 5 at 1920x1080. A shot can draw a world of ours, named by id and never by a path (copperside and low-quarter): a zone subject {"kind": "zone", "world": "copperside", "zone": "city", "cut": [x, z, radius], "crowd": false} draws a street (copperside's start zone is city), and a terrain subject with the same world key draws its country. A street draws its crowd by default, which is most of its price: a still in a world costs 5 units more, one that draws the crowd 26.2 more again. It runs as a queued job: the answer is 202 with a job id at once, and GET /api/agents/jobs/ (or the MCP tool job) says when it is done and signs its files. A queued call is refused on the free plan with 402: its units buy only calls that answer at once, and queued jobs need a paid plan (a pass or the card plan).

NameRequiredDescriptionDefault
tNoThe moment to draw, in seconds from the shot's start, for a shot with motion.
shotYesA shot document written inline: a camera, the sun and air, and subjects. raster_schema lists every key.
widthNoOutput width in pixels, 16 to 1920; overrides the shot's own.
heightNoOutput height in pixels, 16 to 1920; overrides the shot's own.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare write/openWorld/idempotent=false; the description adds substantial behavior beyond them — exact cost model (3 units + 1 per 1.6MP; 5 more for a still, 26.2 more for a crowd), asynchronous queued-job semantics (202 + job id, poll via GET /api/agents/jobs/<job>), and plan-gating with 402.

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

Conciseness3/5

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

Front-loaded with the core action, but the body is a dense, single-paragraph wall of text mixing cost, subjects, and job semantics. Every fact is relevant yet the packing hurts scannability; some pricing restatement could be tightened.

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?

An output schema exists, so return-format explanation is unnecessary, and the description still covers cost, async job polling, and plan gating. For a complex nested-subject tool it is nearly complete, though linking raster_schema for the shot document is only referenced from the schema rather than the description.

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% (baseline 3), but the description meaningfully enriches the otherwise opaque 'shot' object with concrete subject examples (zone vs terrain, world key, cut, crowd) and clarifies the width/height pairing rule and the effective 1920x1080 cap beyond the schema's per-field maxima.

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: 'Renders a shot ... as shot.png', and enumerates what the shot draws (forms, rig, country, sky/sun/shadow/haze). This clearly distinguishes it from siblings like raster_check, raster_schema, and the video_* render tools.

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 strong context for use: it explains the world/zone subject forms, the default crowd, and the paid-plan requirement with 402 on the free plan. It stops short of naming alternatives (e.g. when to prefer raster_check first), so it is clear context without explicit exclusions.

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

raster_schemaShot schemaB
Read-onlyIdempotent
Inspect

Every key and range a shot document may use: the camera (keys or an orbit), the sun, the air and fog, and the subjects (forms, characters, animals, open country and primitives) placed by position or by time keys. The same keys go in a video shot clip's extra. A zone subject and a terrain subject name a shipped world by id in their world key (see raster_render). Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, non-destructive and not-open-world, so the safety profile is covered. The description adds one useful behavioral fact, 'Costs no units,' which is not in the structured data. Beyond that it does not describe caching, latency, or scope limits, so it is adequate but not rich.

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

Conciseness4/5

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

Front-loaded with the core claim ('Every key and range a shot document may use'), followed by an enumeration and two short supporting notes. It is dense but every sentence contributes; the enumeration is long but purposeful for a schema reference.

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 need not explain return values, and for a zero-parameter reference tool it adequately summarizes the content's scope and the world-key cross-reference. It is complete enough to use, though it could name related schema tools more explicitly.

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 the baseline is 4. The description correctly implies no input is required, and nothing about parameters is left ambiguous.

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 concrete resource and scope: the set of keys and ranges a shot document may use, broken into camera, sun, air/fog, and subjects. This lets an agent recognize it as a schema/reference tool rather than an action tool. It does not explicitly contrast itself with sibling schema tools like video_schema or raster_check, so it falls short of full sibling differentiation.

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance. The mention that the same keys go in a video clip's extra and the pointer to raster_render are cross-references, not routing instructions. An agent must infer that this is the reference to consult before authoring a shot.

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

sound_effectRender a soundAInspect

Renders one sound from the engine's own synth as a stereo WAV, or an ambience of the beds mixed together. Give sound (a name from sound_list) with a, b and c as sound_list says, or give ambience: any of engine, air, surf, rain, drum, gull and creak, each 0 to 1, with seconds (1 to 30, default 10; loop true makes it seamless, its end crossfaded into its start, for a game that plays it on repeat; an ambience otherwise fades out). seed varies a one-shot, rate is 44100 or 48000, and peak_db (-30 to 0, default -3) is where the loudest sample sits, so a footstep and a thunder come back at one level; raw true keeps the synth's own. Nothing is sampled from a recording. Costs 1 unit.

NameRequiredDescriptionDefault
aNoThe sound's first parameter, as sound_list says what it does for this sound.
bNoThe sound's second parameter, 0 to 1, as sound_list says.
cNoThe sound's third parameter, -1 to 1, as sound_list says.
rawNoTrue to keep the synth's own level instead of normalising to peak_db.
loopNoTrue to make an ambience seamless, its end crossfaded into its start.
rateNoSample rate in hertz: 44100 or 48000.
seedNoA whole number that varies a one-shot sound.
soundNoA sound name from sound_list. Give this, or ambience.
peak_dbNoWhere the loudest sample sits in dBFS, -30 to 0 (default -3).
secondsNoLength of an ambience in seconds, 1 to 30 (default 10).
ambienceNoInstead of sound: a mix of beds (engine, air, surf, rain, drum, gull, creak), each a level from 0 to 1.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.6/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: cost of 1 unit, stereo WAV output, loop behavior (end crossfaded into start for repeat playback) versus the otherwise fading-out ambience, seed-driven variation of one-shots, and the explicitness that nothing is sampled from a recording. IdempotentHint=false is consistent with the seed discussion.

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?

Purpose and mode selection are front-loaded, and every clause carries information despite the density. The long semicolon-chained sentences mixing mode selection, loop semantics and level semantics make it harder to scan than a bulleted breakdown would be.

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 format need not be described, and the description covers everything else an agent needs: mode choice, ranges and defaults, cost, determinism, and the no-sampling constraint. Nothing material is missing for an 11-parameter render tool.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: peak_db is framed functionally ('so a footstep and a thunder come back at one level'), raw as keeping the synth's own level, and a/b/c as per-sound parameters read from sound_list. The loop crossfade and default values are also clarified in prose.

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 ('Renders one sound from the engine's own synth as a stereo WAV, or an ambience of the beds mixed together') and immediately names the two mutually exclusive modes. An agent can distinguish this from sound_list (catalog lookup) and voice_speak (speech synthesis) 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?

Explicitly routes between the two modes ('Give sound ... or give ambience: ...') and points to sound_list as the authority for the a/b/c meanings. It gives clear selection context but states no exclusions or prerequisites (e.g., what happens if both sound and ambience are supplied).

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

sound_listSound listB
Read-onlyIdempotent
Inspect

The twenty-one sounds (steps on twelve surfaces, doors and stairs, blows, thunder, splashes, a siren, animal calls, notes and the rest) with what each of a, b and c does, and the seven beds an ambience is mixed from. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

B3.3/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, and an output schema covers the return payload, so the burden is low. Within that, 'Costs no units' is a genuinely additive cost/resource trait not present in the structured fields.

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

Conciseness3/5

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

A single sentence front-loads the counts of sounds and beds, which is reasonable, but the long parenthetical inventory ('steps on twelve surfaces, doors and stairs, blows, thunder, splashes, a siren, animal calls, notes and the rest') is verbose and trails off with filler like 'and the rest'.

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 parameterless catalogue tool with an output schema describing return values and annotations covering the safety profile, the description is nearly sufficient. The main gap is the missing pointer to sound_effect for consumption and the unexplained a/b/c reference.

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 per the baseline no parameter explanation is required. The stray mention of 'what each of a, b and c does' refers to something outside this schema and adds confusion rather than clarity, but does not penalize an empty parameter set.

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

Purpose3/5

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

The description names the resource (twenty-one sounds plus seven beds) but is a fragment with no action verb, and the cryptic 'what each of a, b and c does' is never explained. It does not mention or contrast with the obvious sibling sound_effect, so an agent gets the inventory but not a crisp statement of what calling this tool does.

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 when-to-use or when-not-to-use guidance and no reference to alternatives such as sound_effect for actually playing a sound. The only practical cue is 'Costs no units', which implies it is cheap to call but does not route the agent between tools.

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

subscriptionRead the planA
Read-onlyIdempotent
Inspect

The account's plan: a pass (its window of included units, when access ends, and that it never renews) or a person's card plan (its period and renewal), the owner's state, what is paid, and pass_quote: what the next pass costs this account. An agent buys a 30-day pass with a shared payment token: $1.00 the first time (a one-time offer for a new owner), then $20.00, with 1,500 units each. A pass never renews. Buying is a REST call with a payment token, not a tool: POST /api/agents/subscribe for a pass, POST /api/agents/units for a unit pack. Costs nothing.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
pass_quoteNoWhat the next pass costs this account, and why.

TDQS

A3.8/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, non-destructive, not open-world), so the bar is low. The description still adds real context beyond them: the call costs nothing, a pass never renews, pricing tiers ($1.00 one-time, then $20.00 with 1,500 units), and that purchasing requires a shared payment token over REST.

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

Conciseness2/5

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

Roughly 110 words for a zero-parameter read tool. It repeats the same fact twice ('that it never renews' and again 'A pass never renews') and devotes several sentences to pricing and purchase endpoints that this tool does not perform, padding a description whose actual job is one sentence.

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?

An output schema exists, so return-value explanation is not required, yet the description still glosses the field meanings. Five of the six fields plus pricing context are addressed; only the practical read workflow is left implicit.

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 the baseline is 4. The description adds nothing parameter-related, and there is nothing to add.

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

Purpose4/5

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

The description states a specific resource (the account's plan) and enumerates what it returns: a pass with its unit window and end date, a card plan with period and renewal, owner state, amount paid, and pass_quote. It does not differentiate itself from any sibling tool, so it stays at 4 rather than 5.

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

Usage Guidelines4/5

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

It explicitly warns that buying is a REST call with a payment token and not this tool, naming POST /api/agents/subscribe and POST /api/agents/units as the alternatives. That is genuine when-not guidance, though it never states plainly when an agent should call this read tool instead of, say, usage or owner.

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

terrain_heightmapGenerate terrainAInspect

Builds open country from a seed word and writes its ground as a greyscale PNG (row 0 is north; chunk (i, j) is 128 by 128 tiles). By default the picture is one chunk at 8 bits and black is its lowest tile, white its highest; bits 16 writes it at 16 bits (65535 greys, so a 40 unit relief steps by under a thousandth of a unit and a game's terrain built from it shows no stairs), and raw (true) also returns heights.f32, every tile's exact height as little-endian float32, width by height, row 0 north. area {w, h} (each 1 to 8) makes a w by h block of chunks from (i, j) one picture on one grey scale, so a landscape is one call; range [lo, hi] fixes the grey scale in world units so separate calls tile. params sets country knobs by name (terrainAmp 0 to 40, terrainOctaves 1 to 5, slopeLimit, treeDensity, rockDensity, clumping, portWidth, padRadius, padJitter, corridorWidth, meander, palette, waterTable, ridgeHeight 0 to 400 with ridgeX0, ridgeZ0, ridgeX1, ridgeZ1 for a long hill along that line); an unknown or out-of-range knob is refused with the reason. The answer carries the height range, the grey scale used (greyFrom, greyTo, unitsPerGrey, so height is greyFrom plus grey times unitsPerGrey), the bits, wall and scenery counts and the digest. mesh (true, or {step} of 1 to 16 tiles between vertices) also returns the ground as terrain.obj, a Wavefront OBJ in world units (x east, y up, z south) with normals and UVs that runs to the area's far edge so the next area's mesh starts where it ends; by default the step is the smallest that keeps a side to 256 cells. glb (true) returns the same mesh as terrain.glb, a glTF binary with normals and UVs, at mesh's step. features (true) also returns features.json: where each tree and rock stands (x, y, z and half extents) and the scenery (kind, position, turns, scale), each listed once, with the ground's height under it. Costs 1 unit for any area.

NameRequiredDescriptionDefault
iYesThe chunk column (east) to start from; chunks are 128 by 128 tiles.
jYesThe chunk row (south) to start from; chunks are 128 by 128 tiles.
glbNoTrue to also return the mesh as terrain.glb, at the mesh step.
rawNoTrue to also return heights.f32, every tile's exact height as little-endian float32.
areaNoA block of chunks, w by h (each 1 to 8) from (i, j), drawn as one picture on one grey scale.
bitsNoGrey depth of the PNG: 8 (the default) or 16.
meshNoTrue, or {step} of 1 to 16 tiles between vertices, to also return the ground as terrain.obj.
seedYesThe seed word that makes the country; the same word, chunk and knobs give the same ground.
rangeNoOptional [lo, hi] in world units that fixes the grey scale, so separate calls tile on one scale.
paramsNoCountry knobs by name (terrainAmp, terrainOctaves, slopeLimit, treeDensity, rockDensity, clumping, portWidth, padRadius, padJitter, corridorWidth, meander, palette, waterTable, ridgeHeight, ridgeX0, ridgeZ0, ridgeX1, ridgeZ1). An unknown or out-of-range knob is refused with the reason.
featuresNoTrue to also return features.json: where each tree, rock and scenery piece stands.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4/5.0
Behavior5/5

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

Annotations only cover the safety profile (readOnly/destructive/idempotent), and the description adds a great deal beyond them: the cost ('Costs 1 unit for any area'), the error contract ('an unknown or out-of-range knob is refused with the reason'), determinism of seed+chunk+knobs, and the exact modes in which files (PNG, heights.f32, terrain.obj, terrain.glb, features.json) are emitted. The non-determinism implied by idempotentHint=false is consistent with the per-call unit cost, so there is no annotation contradiction.

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

Conciseness3/5

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

The core purpose is front-loaded in the first clause, which is good, but the remainder is one enormous semicolon-and-parenthesis run-on sentence that is hard to parse and forces re-reading. Almost every clause carries information, so length is defensible for an 11-parameter tool, but the lack of sentence breaks or grouping hurts scanability.

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

Completeness5/5

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

For a complex tool with 11 parameters, nested objects, and an output schema, the description covers what an agent still needs: the coordinate conventions (row 0 north, x east/y up/z south), the output modes and their file names, cost, error behavior, and the grey-scale math (height = greyFrom + grey * unitsPerGrey). Return-value detail is partly carried by the output schema, so nothing essential is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description materially enriches it: it supplies real working ranges that differ from the schema's generic ±65536 bounds (terrainAmp 0-40, terrainOctaves 1-5, ridgeHeight 0-400, step 1-16, area w/h 1-8) and explains ridgeX0/Z0/X1/Z1 as a hill along a line and range as the tiling scale. Many knobs (slopeLimit, clumping, palette, waterTable) are still only named, not explained, keeping it short of a 5.

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 opening clause gives a concrete verb and resource: 'Builds open country from a seed word and writes its ground as a greyscale PNG,' and it pins down the chunk/tile coordinate system. That is far more specific than a tautology, but it never names or contrasts a sibling such as world_heightmap or raster_render, so an agent still has to infer which generator is the right one.

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 implied rather than stated: the text explains that 'a landscape is one call' via area and that range 'fixes the grey scale... so separate calls tile,' which tells the agent how to combine calls. There is no explicit when-to-use-this-vs-alternatives guidance, no exclusions, and no prerequisite statements, so it stays at the implied-usage level.

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

usageRead usageB
Read-onlyIdempotent
Inspect

Units used and left (an account with no pass is on the free plan, counted by the calendar month), when they reset, every limit, and the units left in unit packs (under unit_packs). Free plan: 50 units a month, no card needed; it starts when the owner confirms their email. Queued renders need a pass or the card plan. We limit free plans and first-pass offers to prevent abuse. More units: 500 for $10.00 a pack, spent after the included units and kept until used. Costs nothing.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description contributes only 'Costs nothing,' confirming no charge/side effect. It adds little behavioral context beyond what the structured annotations provide.

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

Conciseness2/5

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

The first sentence is a run-on mixing four separate outputs, and the remaining five sentences are pricing and abuse-prevention policy that does not help select or invoke the tool. It is padded and not front-loaded around the tool's actual function.

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

Completeness3/5

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

For a no-param, read-only tool with an output schema that documents return values, the description is functionally adequate. However, it spends its length on pricing policy rather than the usage/reset/limit semantics an agent would want when reading quota state.

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 to document and the baseline is 4. The parenthetical 'under unit_packs' hints at structure but no actual parameter exists to clarify.

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 opening clause specifies the resource precisely: units used and left, when they reset, every limit, and units remaining in unit packs. An agent can tell this reads account usage/limit state. It never explicitly distinguishes itself from the sibling `subscription`, so it stops short of a 5.

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 statement of when to call this versus `subscription` (which likely handles plan management). The mention of 'under unit_packs' reads like policy prose rather than routing guidance. The body is plan/pricing narrative, not usage instruction.

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

video_checkCheck a video sceneA
Read-onlyIdempotent
Inspect

Checks a scene document with the engine's strict reader without rendering it: ok, or one sentence naming the first problem and the key it is at, with every other problem in the scene listed in result.errors (up to fifty), so one call finds them all. A scene with dialogue is spoken while it is read, so a long one takes a few seconds, and a line that overlaps the same character's last, or ends after the scene, is named. Costs no units.

NameRequiredDescriptionDefault
sceneYesA scene document written inline: output (size, frame rate, length), tracks of clips, optional cast and lines, audio and subtitles. Start from video_examples and read video_schema for every key.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the read-only/idempotent/non-destructive annotations, it discloses the exact return contract (ok, or one sentence plus key with up to fifty in result.errors), cost (no units), latency (seconds when dialogue is spoken), and specific error cases (overlapping line, line ending after scene).

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 purpose and tightly packed with useful detail, though the opening sentence is a long multi-clause run-on. Every clause still earns its place (return format, timing, cost).

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?

Annotations cover the safety profile and an output schema exists, so the description needn't explain returns. It is essentially complete, with the only minor gap being the lack of explicit sibling routing.

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

Parameters3/5

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

Schema coverage is 100% and the single 'scene' parameter is fully documented in the schema, so the description adds no parameter syntax or format detail. Baseline 3 is correct when the schema carries the burden.

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 a specific verb (checks) and resource (a scene document), and pins the method ('engine's strict reader without rendering it') so the agent can distinguish it from video_render and video_still without opening a schema.

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

Usage Guidelines4/5

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

Implies the validation-before-rendering workflow ('without rendering it', 'Costs no units'), which contrasts with the render siblings, but it never explicitly names an alternative tool or states an exclusion condition.

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

video_costPrice a video sceneA
Read-onlyIdempotent
Inspect

Reads a scene and reports what rendering it takes (frames, size, design renders, shot frames, audio seconds) and what it costs here: units, and whether it is within this service's limits (60 seconds, 1920 by 1080, 30 frames a second, 600 units a job). Renders nothing. A shot costs most, because every frame of it is drawn from geometry: the nine-second two-person chase in video_examples is 130 units at 1280 by 720, the eleven-second talking card 7, and the two-second street in a world 30; a street with its crowd drawn costs far more (see video_schema). Costs no units.

NameRequiredDescriptionDefault
sceneYesA scene document written inline: output (size, frame rate, length), tracks of clips, optional cast and lines, audio and subtitles. Start from video_examples and read video_schema for every key.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/non-destructive, and the description adds substantial context on top: the exact service limits (60s, 1920x1080, 30fps, 600 units), the cost model (shots drawn from geometry dominate), concrete example costs, and the fact that the call itself consumes no units.

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 what it does and the limits, then layers in examples. Dense and informative, though the three worked cost examples make it longer than strictly necessary for tool selection.

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 values need no explanation, annotations carry the safety profile, and the description supplies limits, cost model, unit budget, and references to companion tools. 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.

Parameters3/5

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

Schema coverage is 100% and there is a single 'scene' object parameter whose structure the schema documents. The description adds only the framing that the scene is read inline and the pointers to video_examples/video_schema for keys, so baseline 3 is appropriate — no syntax or format detail beyond the schema.

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

Purpose5/5

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

States a specific verb and resource: reads a scene and reports render workload and unit cost. It explicitly contrasts with the rendering siblings by saying 'Renders nothing', so an agent can separate it from video_render/video_still 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?

The 'Renders nothing' clause and the pricing examples clearly position this as a pre-render estimate step, and it points to video_examples and video_schema for the input it expects. It stops short of an explicit 'call this before video_render to check limits' instruction, so guidance is strong but not spelled out as a routing rule.

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

video_examplesVideo example scenesA
Read-onlyIdempotent
Inspect

Without a name, lists the example scenes (what each is, what it shows, its length, size and price in units). With a name, returns that scene whole, written inline as video_render wants it: copy the nearest one and change its words, seed and numbers. Each was rendered by this service's own engine and looked at before it was listed. Costs no units.

NameRequiredDescriptionDefault
nameNoAn example scene to return in full: two-voices, meadow-chase, lamplighter or copperside-street. Omit it to list them all with their prices.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already establish read-only, idempotent and non-destructive behavior, and the description adds meaningful context beyond them: zero unit cost, the fact that each scene was rendered by the service's own engine and reviewed before listing, and that the returned scene is written in the exact inline format video_render expects.

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?

Three dense sentences, front-loaded with the two-mode behavior and ending on the cost fact. Nothing is wasted, though the phrasing ('what each is, what it shows') is slightly loose compared with the rest.

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?

Both invocation modes, the shape of the listing, the retrieval format, the downstream compatibility with video_render and the zero-cost property are all covered; with an output schema present, no return-value detail 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% and the enum is fully documented, so the baseline is 3; the description goes slightly further by explaining what the presence or absence of the name changes in the return payload and that a named result is returned 'whole,' which is not stated in 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+resource for both modes: 'lists the example scenes' when unnamed and 'returns that scene whole' when named. It is clearly distinguishable from siblings like video_render, video_presets and video_schema, and it even names the downstream consumer (video_render).

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 conditional usage (omit the name to list; supply a name to retrieve one in full) plus a concrete workflow instruction: 'copy the nearest one and change its words, seed and numbers.' It also flags the cost condition ('Costs no units'), which routes an agent here rather than to a paid render.

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

video_presetsVideo frame presetsA
Read-onlyIdempotent
Inspect

The engine's frame presets (landscape 1920x1080, square 1080x1080, vertical 1080x1920 and their 720 versions) and frame rates. This service renders up to 1920 by 1080 either way up, 30 frames a second and 60 seconds. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds genuinely useful behavioral context beyond that: the rendering constraints (max 1920x1080 either orientation, 30fps, 60s) and that the call consumes no units.

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?

Two sentences, front-loaded with the preset listing and followed by the service constraints. No wasted filler, though 'either way up' is slightly informal phrasing where a clearer constraint statement would read better.

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 zero-parameter lookup with an output schema present, the description need not explain return values and correctly focuses on enumerating presets and stating service limits. The remaining gap is the absence of any when-to-use/routing hint, but nothing an agent needs to invoke 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?

The tool takes zero parameters, so there is nothing for the description to disambiguate. Baseline 4 applies; the enumerated presets serve as content description rather than parameter semantics.

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 a specific resource — the engine's frame presets (listing exact resolutions) and frame rates — so an agent can tell it is a reference/lookup service rather than a renderer like video_render or video_still. It is clear but does not explicitly distinguish itself from the similarly reference-oriented video_schema sibling.

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 statement of when to call this versus alternatives such as video_schema, video_render, or video_cost. The only hint of usage is 'Costs no units,' which implies it is safe/free to call but does not constitute routing guidance.

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

video_renderRender a videoAInspect

Renders a scene to video.webm (VP9 and Opus), video.wav (its sound) and video.vtt (when it has subtitles); with preview (the default) also video.contact.png, twelve moments on one sheet, and video.preview.gif, 480 pixels wide. A scene can hold: drawn pictures with groups (a character's parts move, turn and fade together) and mirror x, y or both on any layer or group, layer and track blends (multiply for a shadow, a vignette or a night grade; screen and add for a glow or a flare, on a layer or a track alike), closed paths filled nonzero (the default) or evenodd (a self-overlapping star leaves its centre bare);characters who talk (cast, timed lines with their own reading, ducked music, subtitles made from the lines, a mouth that moves on the words, or swaps between closed, open, wide and round drawings (with an idle breath and a listening beat, as a moving mouth has), and eyes that blink); shots with people on paths, action beats (guard, strike, hit, fall, get-up) and gestures on cue (a wave, a point, a nod), a directed character (a figure by seed, dressed by its look, standing in a named gait from the schema, speaking through its cast name, set among forms, props and a ground, filmed by a dolly or an orbit), animals and forms, and a camera that follows, orbits or cranes; music cues with a melody, a lead instrument, tempo changes and fades, that duck under lines and under any sound marked ducks_music; and sounds that move across the ears. Its files together are at most 50 MB, so a long, busy scene renders with preview false. At most 60 seconds, 1920 by 1080 either way up and 30 frames a second. The price is read off the engine's own cost report: units = design renders x megapixels / 45 + frames x megapixels / 200 + shot frames x megapixels / 1.6 + 3 a shot clip, rounded up; at most 600 a job, and video_cost says it first. It runs as a queued job: the answer is 202 with a job id at once, and GET /api/agents/jobs/ (or the MCP tool job) says when it is done and signs its files. A queued call is refused on the free plan with 402: its units buy only calls that answer at once, and queued jobs need a paid plan (a pass or the card plan). Each account may have 4 queued jobs waiting or running (1 running at a time), and may submit 20 videos and 10 minutes of video a day (UTC).

NameRequiredDescriptionDefault
sceneYesA scene document written inline: output (size, frame rate, length), tracks of clips, optional cast and lines, audio and subtitles. Start from video_examples and read video_schema for every key.
previewNoAlso write the contact sheet and a small preview GIF (the default); false for a long, busy scene whose files would pass the size cap.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4/5.0
Behavior5/5

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

Annotations only declare the mutation/idempotency profile; the description adds far more: the queued-job 202-then-poll flow, a precise cost formula, a 600-unit job cap, 402 refusal on the free plan, 4-queued/1-running concurrency, daily 20-video/10-minute quotas, and hard 60s/1920x1080/30fps/50MB limits. This is exactly the behavioral context annotations 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.

Conciseness2/5

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

A single run-on block laced with semicolons that dumps the entire scene capability surface (characters, mouth swaps, shots, music, blends) which properly belongs in video_schema. The output/limit/pricing facts are front-loaded, but the middle is undifferentiated enumeration that makes the operative constraints hard to locate.

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

Completeness5/5

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

For a complex, quota-limited, asynchronous render tool this covers the full operational picture: what is produced, size/duration/resolution caps, price, queue semantics, plan gating, and polling route. An output schema exists, so the description is not obligated to explain return shapes and rightly does not.

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

Parameters3/5

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

Schema coverage is 100% and both parameters (scene, preview) are already documented in the schema, including the preview default. The description restates the preview purpose and the file-cap rationale but adds no new syntax or format detail for the scene document beyond pointing at video_schema/video_examples. Baseline 3 applies when the schema does the work.

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 concrete verb and resource ('Renders a scene') and enumerates the exact output artifacts (video.webm, video.wav, video.vtt, contact sheet, preview GIF), so an agent knows precisely what is produced. It does not explicitly contrast with the obvious siblings (video_still, video_check, video_cost), so it falls short of the 5 bar.

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 actionable conditions: 'preview false' for long/busy scenes that would exceed the 50 MB cap, and routes the agent to video_cost for the price and to the job/jobs tools for completion status. It never states when to prefer video_still or video_check instead, so the when-not side is missing.

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

video_schemaVideo scene schemaA
Read-onlyIdempotent
Inspect

Every key, range and word a scene document may use: the output, visual tracks of clips (designs, material fills, colours, gradients, titles and shots), the camera, audio (voices, sounds, music) and subtitles. Call this first when making a video, and video_examples for whole scenes to start from. A scene can hold: drawn pictures with groups (a character's parts move, turn and fade together) and mirror x, y or both on any layer or group, layer and track blends (multiply for a shadow, a vignette or a night grade; screen and add for a glow or a flare, on a layer or a track alike), closed paths filled nonzero (the default) or evenodd (a self-overlapping star leaves its centre bare);characters who talk (cast, timed lines with their own reading, ducked music, subtitles made from the lines, a mouth that moves on the words, or swaps between closed, open, wide and round drawings (with an idle breath and a listening beat, as a moving mouth has), and eyes that blink); shots with people on paths, action beats (guard, strike, hit, fall, get-up) and gestures on cue (a wave, a point, a nod), a directed character (a figure by seed, dressed by its look, standing in a named gait from the schema, speaking through its cast name, set among forms, props and a ground, filmed by a dolly or an orbit), animals and forms, and a camera that follows, orbits or cranes; music cues with a melody, a lead instrument, tempo changes and fades, that duck under lines and under any sound marked ducks_music; and sounds that move across the ears. Designs go inline in a scene; a path to a file is refused. A shot can stand in a world of ours, named by id and never by a path: copperside and low-quarter. In a scene it is a shot subject {"kind": "world", "id": "copperside", "at": [x, 0, z], "radius": metres}; copperside is Brasshollow's Copperside, the streets and buildings of its start zone around that point, and low-quarter a small generated quarter. A street draws its crowd by default, and the crowd is most of its price: set extra.crowd to false (or {"most": 0}) for the plain price, or {"most": 3} for a few people. A clip in a world costs 5 units more than a flat one and 0.2 a frame for a street; one that draws the crowd 25 more and 1.2 a frame. video_examples has copperside-street, 30 units. Costs no units.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already declare read-only, idempotent, non-destructive, and closed-world behavior. The description adds useful operational context beyond those: it costs no units, and designs must be inline because a file path is refused. It does not cover auth or rate limits, but the added constraints are meaningful.

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

Conciseness2/5

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

The first two sentences are front-loaded and efficient, but the rest is a massive run-on enumeration of scene features, world costs, crowd pricing, and special cases. Much of this duplicates what the output schema can carry, and the lack of structure makes it difficult to scan.

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

Completeness5/5

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

Given the tool is a complex scene-schema reference with an output schema already present, the description covers scope, usage, routing to examples, costs, and key constraints. An agent has enough to know what the tool provides and when to call it.

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

Parameters4/5

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

There are zero input parameters and schema description coverage is 100%, so the baseline is 4. The description cannot add parameter semantics beyond what the empty schema already establishes.

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 exactly what the tool contains: every key, range, and word a scene document may use, covering visual tracks, camera, audio, and subtitles. It also names the sibling video_examples as the place to find whole scenes, distinguishing this reference tool from example-based tools.

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

Usage Guidelines5/5

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

It gives an explicit call condition: 'Call this first when making a video.' It also names the alternative for whole scenes ('video_examples for whole scenes to start from'), so the agent knows both when to use it and where to go instead for examples.

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

video_stillRender a video stillAInspect

Renders one frame of a scene at t seconds as a PNG at the scene's size: the way to look at a moment (just after a transition, mid-reveal, the last frame) before rendering the whole video. Costs 1 unit, plus a shot's price when the scene has shots (3 plus 1 for each 1.6 megapixels). It runs as a queued job: the answer is 202 with a job id at once, and GET /api/agents/jobs/ (or the MCP tool job) says when it is done and signs its files. A queued call is refused on the free plan with 402: its units buy only calls that answer at once, and queued jobs need a paid plan (a pass or the card plan). Returns still.png.

NameRequiredDescriptionDefault
tYesThe moment to draw, in seconds from the scene's start.
sceneYesA scene document written inline: output (size, frame rate, length), tracks of clips, optional cast and lines, audio and subtitles. Start from video_examples and read video_schema for every key.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.4/5.0
Behavior5/5

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

Adds substantial context beyond the annotations: exact cost (1 unit plus a shot's price formula), the queued-job contract (202 + job id, poll via GET /api/agents/jobs/<job> or the job tool), and the free-plan 402 refusal with the reason. These are behavioral traits the annotations 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 purpose before cost, async semantics, and plan gating. Dense and mostly waste-free, though the cost and plan passages are packed into a single long run-on sentence.

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

Completeness5/5

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

For a complex, paid, asynchronous tool it covers cost, job lifecycle, polling path, and plan eligibility, and an output schema exists so return-value detail is unnecessary. An agent has everything needed to invoke and follow up correctly.

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

Parameters3/5

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

Schema coverage is 100%, so t and scene are already documented in the schema; the description only restates 't seconds' and 'the scene's size.' Baseline 3 applies when the schema does the heavy lifting.

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

Purpose5/5

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

States a precise verb+resource+output: renders one frame at t seconds as a PNG at the scene's size. It is clearly distinguished from the whole-video sibling by contrasting 'one frame of a scene' with rendering 'the whole video.'

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 concrete moments for which it is the right tool (just after a transition, mid-reveal, the last frame) and positions it as a pre-check before the full render, implicitly pointing at video_render and naming the job tool for polling. No explicit 'when-not' beyond the plan restriction.

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

voice_speakSpeak a lineAInspect

Synthesises a line of English as a 44.1 kHz WAV with the engine's own voice. The voices are synthesised by the engine, never cloned from a recording, and no voice can be uploaded. seed varies the voice; woman, age (0 to 1) and machine shape it; speed (0.5 to 2) sets how fast it speaks (1 is the speaker's own); rate sets the sample rate. Every line comes back at one loudness (level_db, default -16 dBFS of speech, so lines from different voices sit together on a timeline and none clips; level_db false leaves the voice's own level) and with its silence trimmed to a breath either side (trim false keeps the voice's half-second tail). text is at most 1000 characters, and a line that presents itself as spoken by a real, famous person is refused. Costs 1 unit.

NameRequiredDescriptionDefault
ageNoHow old the voice sounds, 0 (young) to 1 (old).
rateNoSample rate in hertz: 16000, 22050, 44100 or 48000.
seedNoA whole number that varies the voice.
textYesThe English line to speak, at most 1000 characters. A line that presents itself as spoken by a real, famous person is refused.
trimNoFalse to keep the voice's half-second silent tail; the default trims silence to a breath either side.
speedNoHow fast it speaks, 0.5 to 2; 1 is the speaker's own pace.
womanNoTrue for a woman's voice, false for a man's.
machineNoTrue to give the voice a machine quality.
level_dbNoLoudness in dBFS of speech, -30 to -6 (default -16); false leaves the voice's own level.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.1/5.0
Behavior5/5

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

With only thin annotations (readOnly=false, idempotent=false), the description carries the burden well: it discloses that voices are engine-synthesised and never cloned or uploadable, that lines are loudness-normalised to a shared -16 dBFS reference so cross-voice timelines sit together, that silence is trimmed to a breath unless trim=false, the 1000-char cap, the famous-person refusal policy, and the cost of 1 unit.

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?

Purpose is front-loaded and every sentence carries substantive information, but the single dense paragraph packs many clauses and some phrasing ('shape it', 'a line that presents itself as spoken by') is more ornate than needed. Still appropriately sized for a nine-parameter tool.

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?

Return values are covered by the output schema, and the description fills in policy, limits, loudness/mixing behaviour and cost. It stops short of stating whether a given seed reproduces the same voice deterministically, which matters for a non-idempotent tool, but otherwise 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all nine parameters; the description largely restates them (speed range, level_db default, trim tail). It adds only minor cross-parameter context such as the loudness reference for timeline mixing, so the baseline 3 is correct.

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

Purpose5/5

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

States a specific verb+resource immediately: 'Synthesises a line of English as a 44.1 kHz WAV with the engine's own voice.' This cleanly distinguishes it from sibling generation tools (sound_effect, art_render, video_render) since it is the speech/voice tool, and an agent can route to it without opening 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 Guidelines3/5

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

Usage context is implied (speech synthesis, refuses impersonations, costs 1 unit), but no sibling is named and there is no explicit 'use this when / not when' framing. An agent must infer when voice_speak is preferred over sound_effect or other media generators.

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

world_applyEdit a worldAInspect

Applies a batch of ops (see world_schema) to a world document, in order. An op that cannot apply is rejected with its reason and changes nothing; if the result as a whole would not be a valid world, the whole batch rolls back and says why. Answers the edited document, what applied, what was rejected and the check of the result. Costs 1 unit.

NameRequiredDescriptionDefault
opsYesThe edits to apply in order, each an object with an op name; world_schema lists them. An op that cannot apply is rejected with the reason and the rest still apply.
worldYesThe world document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only cover the safety profile (not read-only, not destructive, not idempotent). The description goes well beyond that by disclosing per-op rejection semantics, whole-batch rollback when the result would not be a valid world, the specific return contents (edited document, applied ops, rejected ops, result check), and a cost of 1 unit.

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

Conciseness5/5

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

Three sentences, tightly front-loaded with the core action and ordering guarantee, followed by failure semantics and returns. No filler; every clause carries information an agent needs before invoking.

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 batch mutation tool with nested op objects, the description covers atomicity, partial-failure behaviour, return payload and cost. Even though an output schema exists (so return values need not be detailed), restating them costs nothing and completes the picture.

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

Parameters3/5

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

Schema description coverage is 100% and both parameters are documented there, including the 1–200 item bound and the op-object shape. The description adds only the in-order application semantics and the pointer to world_schema, which is roughly baseline value over 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 — 'Applies a batch of ops ... to a world document, in order' — and names the reference doc (world_schema) that enumerates the ops. The transactional framing (applied/rejected/rolled back) also distinguishes it from world_check, which only inspects, without the agent needing to open 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 Guidelines3/5

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

Usage is implied rather than explicit: it points to world_schema for op names and implies this tool also returns a result check (so world_check is redundant). But it never states when to reach for world_apply versus world_check or world_starter, and names no alternative or exclusion condition.

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

world_checkCheck a worldA
Read-onlyIdempotent
Inspect

Checks a world document with the engine's strict reader and its spatial rules (every spawn, passage, item and character stands on open ground reachable from the spawn; no two zones overlap; no door is under water). Answers ok with warnings, or the errors; the doors report says how many exits were examined. Costs no units.

NameRequiredDescriptionDefault
worldYesThe world document, written inline as JSON.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare the read-only, idempotent, non-destructive profile, but the description adds real behavioral context: what spatial invariants are enforced, that results come back as ok-with-warnings or errors, that a doors report counts exits examined, and that it consumes no units. It stops short of describing warning severity or failure modes in depth.

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?

Two sentences, front-loaded with the verb and the validated rules, followed by the return shape and cost. The parenthetical rule list is dense but informative rather than padding, though it could be trimmed slightly.

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 annotations covering safety, an output schema handling return structure, and 100% schema coverage, the description supplies the remaining essentials: the checks run, the warning/error outcome, and zero cost. Only a clearer when-to-use cue 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?

Only one parameter, and schema coverage is 100% — the schema already documents 'world' as an inline JSON document. The description adds nothing about the parameter's shape or format beyond what the schema states, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb (checks) and resource (a world document), and enumerates the exact validations performed — spawn/passage/item/character reachability, zone overlap, doors under water. This cleanly separates it from siblings like world_apply (mutates) and world_schema (schema description), so an agent can pick it without opening a schema.

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

Usage Guidelines3/5

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

The line 'Costs no units' implies this is a cheap pre-flight check worth running freely, which hints at usage. But it never states when to reach for world_check versus world_schema or before world_apply, and gives no exclusions, leaving the workflow to inference.

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

world_heightmapDraw a world's countryAInspect

Draws the open country a world document generates (its worldgen block: seed, knobs, regions with their own relief, a ridge) as one greyscale PNG, row 0 north, so a world built with world_apply can be looked at before anyone walks it. area {w, h} makes a block of chunks from chunk (i, j) (w times h at most 25); range [lo, hi] fixes the grey scale in world units. The answer carries the height range, the grey scale used (greyFrom, greyTo, unitsPerGrey) and the name of the country each chunk sits in. A world with no worldgen block is bounded and is refused by name; set_worldgen opens it onto boundless country. Costs 1 unit.

NameRequiredDescriptionDefault
iYesThe chunk column (east) to start from; chunks are 128 by 128 tiles.
jYesThe chunk row (south) to start from; chunks are 128 by 128 tiles.
areaNoA block of chunks, w by h (each 1 to 25) from (i, j), drawn as one picture.
rangeNoOptional [lo, hi] in world units that fixes the grey scale, so separate calls tile on one scale.
worldYesThe world document, written inline as JSON. It needs a worldgen block to have country to draw.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.9/5.0
Behavior4/5

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

Adds context beyond annotations: it discloses the cost (1 unit), the refusal behavior for worlds lacking a worldgen block, and the response payload (height range, greyFrom/greyTo/unitsPerGrey, chunk country names). Annotations already cover the safety/destructiveness profile, so the remaining gap (e.g. why it is non-idempotent) is minor.

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 action (drawing the country as a PNG) and keeps to a handful of dense sentences with no filler. Slightly prose-heavy, but every sentence conveys actionable detail such as orientation, limits, and cost.

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

Completeness4/5

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

For a tool with a full schema, an output schema, and annotations, the description covers purpose, prerequisites, cost, refusal behavior, and key parameter constraints. The only notable omission is explicit sibling differentiation against terrain_heightmap.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents each parameter. The description's phrasing of area (w by h up to 25) and range ([lo, hi] fixing the grey scale in world units so separate calls tile on one scale) largely restates the schema, adding only the tiling rationale.

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: it draws the open country a world document generates (worldgen block) as one greyscale PNG, and even specifies orientation (row 0 north). An agent can tell this is a worldgen visualization tool, though it does not explicitly distinguish itself from the sibling terrain_heightmap.

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 clear usage context ('so a world built with world_apply can be looked at before anyone walks it') and names the prerequisite/alternative mechanism: a world with no worldgen block is refused by name, and set_worldgen opens it onto boundless country. It stops short of explicitly contrasting with terrain_heightmap, the nearest sibling.

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

world_schemaWorld edit schemaA
Read-onlyIdempotent
Inspect

The ops world_apply accepts (add_zone, add_npc, add_quest, add_link, set_worldgen and the rest), each with its fields as JSON Schema: types, bounds, the closed lists of words and which keys are required. Printed from the same table the engine validates against, so it cannot drift from what is accepted. Pass op to get one op's schema alone. Costs no units.

NameRequiredDescriptionDefault
opNoOne op's name (add_zone, add_npc, add_quest and the rest) to get only that op's schema; omit it for all of them.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), and the description adds two things annotations cannot: it costs no units, and it is generated from the same table the engine validates against so it cannot drift. That trust/currency guarantee is genuinely useful extra context.

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

Conciseness4/5

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

Front-loads what the tool returns, then the authority guarantee, then the narrowing parameter and cost. The second sentence is dense with parenthetical op names, but every clause carries information an agent needs.

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?

A one-parameter, read-only introspection tool with an output schema, so return formatting needn't be explained. Purpose, authoritative scope, narrowing behavior and cost are all covered; nothing needed for correct invocation 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 description coverage is 100% and the single 'op' parameter already documents both the format and the omit-for-all behavior. The description restates the same information rather than adding syntax or example values, so the baseline 3 applies.

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

Purpose5/5

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

Names a specific resource (the schema of ops that world_apply accepts) and enumerates representative ops, so an agent can tell it apart from world_apply, world_check and world_starter at a glance.

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?

Clear context: this is the authoritative reference for what world_apply will accept, and 'Pass op to get one op's schema alone' tells the agent how to narrow the lookup. No explicit when-not or named-alternative routing, but the intended use is unambiguous.

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

world_starterStarter worldA
Read-onlyIdempotent
Inspect

A starter world document (two zones joined by a passage, a spawn, no quests) with the id and title given. The title passes the same scrubber world_apply uses: no markup, braces or web addresses. Costs no units.

NameRequiredDescriptionDefault
idYesThe id to give the world: lower-case letters, digits and hyphens.
nameYesThe world's title, shown to players. Plain text: no markup, braces or web addresses.

Output Schema

NameRequiredDescription
msNoMilliseconds the run took.
jobYesThe job id; the job tool reads it.
verbNoThe tool that made it.
filesNoFiles made, each with a name, type, size and a signed URL.
unitsNoUnits this call cost.
resultNoThe engine's own answer, a JSON document.
statusNoqueued when the job runs in the background.

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint/idempotentHint/destructiveHint=false, so the safety profile is covered. The description adds real behavioral context beyond them: the exact shape of the produced document, the validation rule applied to the title, and that the call 'costs no units' (no billing side effect).

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?

Two tight sentences, front-loaded with what the tool produces and followed by the naming constraint and cost note. No filler, though the trailing 'Costs no units' is a marginally minor add-on rather than essential content.

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

Completeness4/5

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

An output schema exists so return values need no explanation, and annotations carry the safety profile. The description still covers the generated content well; the only soft spot is that the intended workflow (hand the result to world_apply) is implied rather than spelled out.

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

Parameters3/5

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

Schema description coverage is 100% -- both id and name carry patterns and explanatory text, and the description's restatement of the title scrubber rule duplicates the schema's own note. Baseline 3 is correct since the schema does the heavy lifting.

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

Purpose5/5

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

States a specific verb+resource (produce a starter world document) and even enumerates its contents: two zones joined by a passage, a spawn, no quests. This clearly separates it from sibling world_apply (which applies an existing document) and world_schema/world_check.

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 implied rather than stated: the agent can infer you call this to bootstrap a new world with a given id/name. The nod to world_apply ('the same scrubber world_apply uses') hints at the follow-on step, but there is no explicit when-to-use/when-not or named alternative such as world_schema.

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. 57 tool updates
    • Changedart_check2 fields changed
      • addedInput schema / properties / design / description
        Added value: +"The print design document, written inline as JSON. art_schema lists every key."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedart_materials1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedart_presets1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedart_render5 fields changed
      • addedInput schema / properties / design / description
        Added value: +"The print design document, written inline as JSON. Start from art_starter and check it with art_check."
      • addedInput schema / properties / preview_on / description
        Added value: +"Background colour for the preview as #rrggbb, so a design with transparency can be judged on a shirt colour."
      • addedInput schema / properties / preview_width / description
        Added value: +"Width in pixels of the small preview image written beside the print."
      • addedInput schema / properties / width / description
        Added value: +"Output width in pixels. Omit it to render the canvas at full print size; a width above the draft limit is a full-size print and costs more."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedart_schema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedart_starter2 fields changed
      • addedInput schema / properties / preset / description
        Added value: +"The canvas preset to start from: shirt-front, shirt-pocket, sticker or poster."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedart_swatch3 fields changed
      • addedInput schema / properties / material / description
        Added value: +"A shipped material id (art_materials lists them) or a whole material document written inline."
      • addedInput schema / properties / size / description
        Added value: +"Swatch side in pixels, 64 to 1024 (default 512). Above 512 costs more."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedcancel_job2 fields changed
      • addedInput schema / properties / job / description
        Added value: +"The job id from the call that queued it, such as job_ followed by 24 hex digits."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id.",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "queued, running, ok, refused, failed, cancelled or expired.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units charged.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedcharacter_generate14 fields changed
      • addedInput schema / properties / age / description
        Added value: +"Age band for a person: young, adult or old, or leave it to the seed."
      • addedInput schema / properties / as / description
        Added value: +"What the person is: townsperson, foe, machine, android or child."
      • addedInput schema / properties / body / description
        Added value: +"sculpt (the default) is the game's sculpted body; loft is the older lofted figure."
      • addedInput schema / properties / clips / description
        Added value: +"Named looping clips to put in the one file for a character controller, such as idle, walk, run, sit, wave, point, nod."
      • addedInput schema / properties / detail / description
        Added value: +"Level of detail: near (the default), mid or far. Near costs the most for a person."
      • addedInput schema / properties / formats / description
        Added value: +"Mesh formats to return: obj, gltf or glb. glb replaces gltf when both are asked."
      • addedInput schema / properties / gait / description
        Added value: +"A gait name from character_list to pose the skeleton at and to return as a looping clip."
      • addedInput schema / properties / kind / description
        Added value: +"The body kind: person (the default), dog, cat, rat or sheep. character_list shows each kind's gaits."
      • addedInput schema / properties / phase / description
        Added value: +"Where in the gait cycle to pose the skeleton, 0 to 1."
      • addedInput schema / properties / presents / description
        Added value: +"Whether a person presents as a woman or a man, or leaves it to the seed."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that picks the character; the same seed and options return the same one."
      • addedInput schema / properties / speed / description
        Added value: +"Travel speed in metres a second for the gait and its clip."
      • addedInput schema / properties / travel / description
        Added value: +"True to let the gait clip carry the root forward across the ground instead of walking on the spot."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedcharacter_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedcity_plan10 fields changed
      • addedInput schema / properties / formats / description
        Added value: +"Files to return: json, png, obj or glb."
      • addedInput schema / properties / origin / description
        Added value: +"Where on that terrain the city sits, as {x, z} in metres."
      • addedInput schema / properties / px / description
        Added value: +"Width in pixels of the plan picture, 256 to 2048."
      • addedInput schema / properties / relief / description
        Added value: +"How far the ground may rise and fall under the city, in metres, 0 to 40."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the city; the same seed and options give the same plan."
      • addedInput schema / properties / size / description
        Added value: +"The side of the city square in metres, 300 to 2000 (default 800)."
      • addedInput schema / properties / terrain / description
        Added value: +"A terrain seed word to build the city on, so it sits on that country."
      • addedInput schema / properties / view / description
        Added value: +"Camera views of the massing to render: aerial, corner or skyline. Each adds to the cost."
      • addedInput schema / properties / viewPx / description
        Added value: +"Width in pixels of each view, 320 to 1600 (the height is two thirds)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedform_apply3 fields changed
      • addedInput schema / properties / form / description
        Added value: +"The form document, written inline as JSON."
      • addedInput schema / properties / ops / description
        Added value: +"The edits to apply in order, each an object with an op name (set_form, set_generator, set_range, reset_range, clear_params). The batch applies whole or not at all."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedform_build4 fields changed
      • addedInput schema / properties / form / description
        Added value: +"A shipped form id (scots-pine, oak, boulder and the rest) or a whole form document written inline."
      • addedInput schema / properties / lod / description
        Added value: +"The level of detail to build at: near, mid, far or horizon."
      • addedInput schema / properties / variant / description
        Added value: +"Which variant of the form to build, 0 to 255; the same variant always builds the same shape."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedform_check2 fields changed
      • addedInput schema / properties / form / description
        Added value: +"The form document, written inline as JSON."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedform_starter3 fields changed
      • addedInput schema / properties / id / description
        Added value: +"The id to give the new form: lower-case letters, digits and hyphens."
      • addedInput schema / properties / kind / description
        Added value: +"The generator kind to start from: growth, rock, face, blades, canopy, masonry, lathe, sweep, truss or frond."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedjob3 fields changed
      • addedInput schema / properties / job / description
        Added value: +"The job id from the call that queued it, such as job_ followed by 24 hex digits."
      • addedInput schema / properties / wait_s / description
        Added value: +"Seconds to hold the answer until the job ends; 0 answers at once."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id.",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "queued, running, ok, refused, failed, cancelled or expired.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units charged.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedjobs1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "jobs": {
        +      "description": "Job ids and states, newest first.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "limit": {
        +      "description": "The most jobs listed.",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "jobs",
        +    "limit"
        +  ],
        +  "type": "object"
        +}
    • Changedmaterial_apply3 fields changed
      • addedInput schema / properties / material / description
        Added value: +"The material document, written inline as JSON."
      • addedInput schema / properties / ops / description
        Added value: +"The edits to apply in order, each an object with an op name (set_material, add_node, remove_node, set_node_param, connect and the rest). The batch applies whole or not at all."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedmaterial_bake3 fields changed
      • addedInput schema / properties / material / description
        Added value: +"A shipped material id (art_materials lists them) or a whole material document written inline."
      • addedInput schema / properties / res / description
        Added value: +"Bake resolution in pixels square: 64, 128, 256, 512 or 1024 (default 256). 1024 costs more."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedmaterial_check2 fields changed
      • addedInput schema / properties / material / description
        Added value: +"The material document, written inline as JSON."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedmaterial_cost3 fields changed
      • addedInput schema / properties / material / description
        Added value: +"The material document, written inline as JSON."
      • addedInput schema / properties / res / description
        Added value: +"Bake resolution in pixels square to price (default 256)."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedowner2 fields changed
      • addedInput schema / properties / owner_email / description
        Added value: +"The email of the person or business responsible for this agent. Omit it to read the owner's state."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedpull_align2 fields changed
      • addedInput schema / properties / pings / description
        Added value: +"Repeated pings, each [sent_ns, remote_ns, received_ns]: sent and received on one station's clock, remote on the other's."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_analyse11 fields changed
      • addedInput schema / properties / detail / description
        Added value: +"True to return the fuller per-session detail."
      • addedInput schema / properties / measure / description
        Added value: +"The measure to analyse, by name."
      • addedInput schema / properties / pairs / description
        Added value: +"True to analyse performer pairs as well."
      • addedInput schema / properties / prereg / description
        Added value: +"The pre-registration the sessions were run under, to check the analysis against it."
      • removedInput schema / properties / replication / $ref
        Removed value: -"#/properties/sessions"
      • addedInput schema / properties / replication / anyOf
        Added value: +[
        +  {
        +    "$ref": "#/properties/sessions/anyOf/0"
        +  },
        +  {
        +    "$ref": "#/properties/sessions/anyOf/1"
        +  }
        +]
      • addedInput schema / properties / replication / description
        Added value: +"Sessions of a replication, analysed against the first set."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the run reproducible: the same seed and inputs give the same answer."
      • addedInput schema / properties / sessions / description
        Added value: +"One session, a list of sessions, or {\"sessions\": [...]} of one condition, as JSON documents."
      • addedInput schema / properties / surrogates / description
        Added value: +"How many surrogate runs to draw for the null, 19 to 9999."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_call3 fields changed
      • addedInput schema / properties / document / description
        Added value: +"The one JSON document the verb reads, when it reads one."
      • addedInput schema / properties / verb / description
        Added value: +"The ae_pull verb name to run, lower-case with underscores."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_close3 fields changed
      • addedInput schema / properties / at_ns / description
        Added value: +"The closing time in integer nanoseconds, at or after the session's end."
      • addedInput schema / properties / session / description
        Added value: +"The session document to close, as JSON."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_cost14 fields changed
      • addedInput schema / properties / condition / description
        Added value: +"The condition to price: P or R followed by 1 to 4."
      • addedInput schema / properties / coupling / description
        Added value: +"Coupling to price at, 0 to 1."
      • addedInput schema / properties / field / description
        Added value: +"The field to price in, by name."
      • addedInput schema / properties / pairs / description
        Added value: +"True to price the pair analysis as well."
      • addedInput schema / properties / planted / description
        Added value: +"The planted effect as a pair of numbers between -2 and 2."
      • addedInput schema / properties / prereg / description
        Added value: +"A pre-registration, to price an analysis under it."
      • addedInput schema / properties / reference / description
        Added value: +"True, or a reference name, to price the lab's reference run."
      • addedInput schema / properties / replication / description
        Added value: +"Replication sessions, to price an analysis with them."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the run reproducible: the same seed and inputs give the same answer."
      • addedInput schema / properties / sessions / description
        Added value: +"A session count for a twin run, or the sessions of an analysis to price."
      • addedInput schema / properties / surrogates / description
        Added value: +"Surrogate runs to price, 19 to 9999."
      • addedInput schema / properties / theory / description
        Added value: +"A theory document, to price a lab run."
      • addedInput schema / properties / twin / description
        Added value: +"A twin document written inline, as for pull_twin."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_lab3 fields changed
      • addedInput schema / properties / reference / description
        Added value: +"True, or a reference name, to compare against a reference run."
      • addedInput schema / properties / theory / description
        Added value: +"The theory document written inline: its fields, Lagrangian and the quantity to match."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_open6 fields changed
      • addedInput schema / properties / sealed / description
        Added value: +"The sealed record (its public half), as JSON."
      • removedInput schema / properties / secret / $ref
        Removed value: -"#/properties/sealed"
      • addedInput schema / properties / secret / additionalProperties
        Added value: +{
        +  "$ref": "#/properties/sealed/additionalProperties"
        +}
      • addedInput schema / properties / secret / description
        Added value: +"The secret half (key, iv, nonce) that opens it, as JSON."
      • addedInput schema / properties / secret / type
        Added value: +"object"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_practice3 fields changed
      • addedInput schema / properties / practice / description
        Added value: +"The practice document: the five drills and the taps recorded for each, as JSON."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the run reproducible: the same seed and inputs give the same answer."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_prereg2 fields changed
      • addedInput schema / properties / prereg / description
        Added value: +"The pre-registration document, written inline as JSON; pull_schema lists its keys."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_replay2 fields changed
      • addedInput schema / properties / session / description
        Added value: +"The session document to recompute, as JSON."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_schedule7 fields changed
      • addedInput schema / properties / entropy / description
        Added value: +"The entropy source: os, the server's own."
      • addedInput schema / properties / entropy_hex / description
        Added value: +"Your own entropy as hex, in place of the server's, when you must bring the bytes yourself; grade then says where they came from."
      • addedInput schema / properties / grade / description
        Added value: +"How the entropy you brought was produced, recorded with the schedule."
      • addedInput schema / properties / research / description
        Added value: +"True to draw the schedule for a research run."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the run reproducible: the same seed and inputs give the same answer."
      • addedInput schema / properties / spec / description
        Added value: +"The schedule specification written inline as JSON; pull_schema lists its keys."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_schema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_seal8 fields changed
      • addedInput schema / properties / at_ns / description
        Added value: +"The sealing time in integer nanoseconds."
      • addedInput schema / properties / content / description
        Added value: +"The schedule text to seal, as drawn by pull_schedule."
      • addedInput schema / properties / entropy / description
        Added value: +"The entropy source: os, the server's own."
      • addedInput schema / properties / entropy_hex / description
        Added value: +"Your own entropy as hex, in place of the server's, when you must bring the bytes yourself; grade then says where they came from."
      • addedInput schema / properties / grade / description
        Added value: +"How the entropy you brought was produced, recorded with the schedule."
      • addedInput schema / properties / held_by / description
        Added value: +"Who holds the secret half, recorded with the seal."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the run reproducible: the same seed and inputs give the same answer."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedpull_twin9 fields changed
      • addedInput schema / properties / condition / description
        Added value: +"The condition to run: P or R followed by 1 to 4."
      • addedInput schema / properties / coupling / description
        Added value: +"How strongly the follower is coupled to the performer, 0 to 1."
      • addedInput schema / properties / detail / description
        Added value: +"True to return the fuller per-session detail."
      • addedInput schema / properties / field / description
        Added value: +"The field to run the twins in, by name."
      • addedInput schema / properties / planted / description
        Added value: +"The planted effect as a pair of numbers between -2 and 2."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that makes the run reproducible: the same seed and inputs give the same answer."
      • addedInput schema / properties / sessions / description
        Added value: +"How many sessions to run, 1 to 1000."
      • addedInput schema / properties / twin / description
        Added value: +"A twin document written inline; or use condition, coupling, planted and field instead."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedraster_check1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedraster_render4 fields changed
      • addedInput schema / properties / height / description
        Added value: +"Output height in pixels, 16 to 1920; overrides the shot's own."
      • addedInput schema / properties / t / description
        Added value: +"The moment to draw, in seconds from the shot's start, for a shot with motion."
      • addedInput schema / properties / width / description
        Added value: +"Output width in pixels, 16 to 1920; overrides the shot's own."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedraster_schema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedsound_effect12 fields changed
      • addedInput schema / properties / a / description
        Added value: +"The sound's first parameter, as sound_list says what it does for this sound."
      • addedInput schema / properties / ambience / description
        Added value: +"Instead of sound: a mix of beds (engine, air, surf, rain, drum, gull, creak), each a level from 0 to 1."
      • addedInput schema / properties / b / description
        Added value: +"The sound's second parameter, 0 to 1, as sound_list says."
      • addedInput schema / properties / c / description
        Added value: +"The sound's third parameter, -1 to 1, as sound_list says."
      • addedInput schema / properties / loop / description
        Added value: +"True to make an ambience seamless, its end crossfaded into its start."
      • addedInput schema / properties / peak_db / description
        Added value: +"Where the loudest sample sits in dBFS, -30 to 0 (default -3)."
      • addedInput schema / properties / rate / description
        Added value: +"Sample rate in hertz: 44100 or 48000."
      • addedInput schema / properties / raw / description
        Added value: +"True to keep the synth's own level instead of normalising to peak_db."
      • addedInput schema / properties / seconds / description
        Added value: +"Length of an ambience in seconds, 1 to 30 (default 10)."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that varies a one-shot sound."
      • addedInput schema / properties / sound / description
        Added value: +"A sound name from sound_list. Give this, or ambience."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedsound_list1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedsubscription1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "pass_quote": {
        +      "description": "What the next pass costs this account, and why."
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedterrain_heightmap12 fields changed
      • addedInput schema / properties / area / description
        Added value: +"A block of chunks, w by h (each 1 to 8) from (i, j), drawn as one picture on one grey scale."
      • addedInput schema / properties / bits / description
        Added value: +"Grey depth of the PNG: 8 (the default) or 16."
      • addedInput schema / properties / features / description
        Added value: +"True to also return features.json: where each tree, rock and scenery piece stands."
      • addedInput schema / properties / glb / description
        Added value: +"True to also return the mesh as terrain.glb, at the mesh step."
      • addedInput schema / properties / i / description
        Added value: +"The chunk column (east) to start from; chunks are 128 by 128 tiles."
      • addedInput schema / properties / j / description
        Added value: +"The chunk row (south) to start from; chunks are 128 by 128 tiles."
      • addedInput schema / properties / mesh / description
        Added value: +"True, or {step} of 1 to 16 tiles between vertices, to also return the ground as terrain.obj."
      • addedInput schema / properties / params / description
        Added value: +"Country knobs by name (terrainAmp, terrainOctaves, slopeLimit, treeDensity, rockDensity, clumping, portWidth, padRadius, padJitter, corridorWidth, meander, palette, waterTable, ridgeHeight, ridgeX0, ridgeZ0, ridgeX1, ridgeZ1). An unknown or out-of-range knob is refused with the reason."
      • addedInput schema / properties / range / description
        Added value: +"Optional [lo, hi] in world units that fixes the grey scale, so separate calls tile on one scale."
      • addedInput schema / properties / raw / description
        Added value: +"True to also return heights.f32, every tile's exact height as little-endian float32."
      • addedInput schema / properties / seed / description
        Added value: +"The seed word that makes the country; the same word, chunk and knobs give the same ground."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedusage1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {},
        +  "type": "object"
        +}
    • Changedvideo_check1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvideo_cost1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvideo_examples2 fields changed
      • addedInput schema / properties / name / description
        Added value: +"An example scene to return in full: two-voices, meadow-chase, lamplighter or copperside-street. Omit it to list them all with their prices."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvideo_presets1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvideo_render1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvideo_schema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvideo_still1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedvoice_speak10 fields changed
      • addedInput schema / properties / age / description
        Added value: +"How old the voice sounds, 0 (young) to 1 (old)."
      • addedInput schema / properties / level_db / description
        Added value: +"Loudness in dBFS of speech, -30 to -6 (default -16); false leaves the voice's own level."
      • addedInput schema / properties / machine / description
        Added value: +"True to give the voice a machine quality."
      • addedInput schema / properties / rate / description
        Added value: +"Sample rate in hertz: 16000, 22050, 44100 or 48000."
      • addedInput schema / properties / seed / description
        Added value: +"A whole number that varies the voice."
      • addedInput schema / properties / speed / description
        Added value: +"How fast it speaks, 0.5 to 2; 1 is the speaker's own pace."
      • addedInput schema / properties / text / description
        Added value: +"The English line to speak, at most 1000 characters. A line that presents itself as spoken by a real, famous person is refused."
      • addedInput schema / properties / trim / description
        Added value: +"False to keep the voice's half-second silent tail; the default trims silence to a breath either side."
      • addedInput schema / properties / woman / description
        Added value: +"True for a woman's voice, false for a man's."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedworld_apply3 fields changed
      • addedInput schema / properties / ops / description
        Added value: +"The edits to apply in order, each an object with an op name; world_schema lists them. An op that cannot apply is rejected with the reason and the rest still apply."
      • addedInput schema / properties / world / description
        Added value: +"The world document, written inline as JSON."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedworld_check2 fields changed
      • addedInput schema / properties / world / description
        Added value: +"The world document, written inline as JSON."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedworld_heightmap6 fields changed
      • addedInput schema / properties / area / description
        Added value: +"A block of chunks, w by h (each 1 to 25) from (i, j), drawn as one picture."
      • addedInput schema / properties / i / description
        Added value: +"The chunk column (east) to start from; chunks are 128 by 128 tiles."
      • addedInput schema / properties / j / description
        Added value: +"The chunk row (south) to start from; chunks are 128 by 128 tiles."
      • addedInput schema / properties / range / description
        Added value: +"Optional [lo, hi] in world units that fixes the grey scale, so separate calls tile on one scale."
      • addedInput schema / properties / world / description
        Added value: +"The world document, written inline as JSON. It needs a worldgen block to have country to draw."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedworld_schema2 fields changed
      • addedInput schema / properties / op / description
        Added value: +"One op's name (add_zone, add_npc, add_quest and the rest) to get only that op's schema; omit it for all of them."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
    • Changedworld_starter3 fields changed
      • addedInput schema / properties / id / description
        Added value: +"The id to give the world: lower-case letters, digits and hyphens."
      • addedInput schema / properties / name / description
        Added value: +"The world's title, shown to players. Plain text: no markup, braces or web addresses."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": true,
        +  "properties": {
        +    "files": {
        +      "description": "Files made, each with a name, type, size and a signed URL.",
        +      "items": {
        +        "additionalProperties": {},
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "job": {
        +      "description": "The job id; the job tool reads it.",
        +      "type": "string"
        +    },
        +    "ms": {
        +      "description": "Milliseconds the run took.",
        +      "type": "number"
        +    },
        +    "result": {
        +      "description": "The engine's own answer, a JSON document."
        +    },
        +    "status": {
        +      "description": "queued when the job runs in the background.",
        +      "type": "string"
        +    },
        +    "units": {
        +      "description": "Units this call cost.",
        +      "type": "number"
        +    },
        +    "verb": {
        +      "description": "The tool that made it.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "job"
        +  ],
        +  "type": "object"
        +}
  2. 57 tool updates
    • First observedart_check
    • First observedart_materials
    • First observedart_presets
    • First observedart_render
    • First observedart_schema
    • First observedart_starter
    • First observedart_swatch
    • First observedcancel_job
    • First observedcharacter_generate
    • First observedcharacter_list
    • First observedcity_plan
    • First observedform_apply
    • First observedform_build
    • First observedform_check
    • First observedform_starter
    • First observedjob
    • First observedjobs
    • First observedmaterial_apply
    • First observedmaterial_bake
    • First observedmaterial_check
    • First observedmaterial_cost
    • First observedowner
    • First observedpull_align
    • First observedpull_analyse
    • First observedpull_call
    • First observedpull_close
    • First observedpull_cost
    • First observedpull_lab
    • First observedpull_open
    • First observedpull_practice
    • First observedpull_prereg
    • First observedpull_replay
    • First observedpull_schedule
    • First observedpull_schema
    • First observedpull_seal
    • First observedpull_twin
    • First observedraster_check
    • First observedraster_render
    • First observedraster_schema
    • First observedsound_effect
    • First observedsound_list
    • First observedsubscription
    • First observedterrain_heightmap
    • First observedusage
    • First observedvideo_check
    • First observedvideo_cost
    • First observedvideo_examples
    • First observedvideo_presets
    • First observedvideo_render
    • First observedvideo_schema
    • First observedvideo_still
    • First observedvoice_speak
    • First observedworld_apply
    • First observedworld_check
    • First observedworld_heightmap
    • First observedworld_schema
    • First observedworld_starter

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables agentic creators to generate, score, and publish image, video, and audio assets using their own API keys and local storage, keeping a content-addressed provenance ledger and selecting the best candidates against pack rubrics. Brand-specific workflows layer on top as data packs, and posts go out only through a signed, human-confirmed manifest to the user's own publishing channel or local outbox.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A memory-backed brand generation runtime for agent-led creative iteration. Enables AI agents to plan, generate, review, and improve brand materials with persistent brand memory and structured workflows.
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to convert natural-language briefs into structured visual specs, deterministically render typography and layouts, and run constraint-aware visual QA and targeted repair for image generation.
    30 npm
    Apache 2.0
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources