Skip to main content
Glama

HF Assets

Generating game assets through Hugging Face Spaces

An MCP server that generates game assets through free Hugging Face Spaces — no GPU and no subscription: images, 3D meshes, sound and music. A free Hugging Face token is optional and raises the daily quota. Plus procedural synthesizers that spend no quota at all.

The ZeroGPU quota is shared by all Spaces and resets 24 hours after first use, so the cheap option goes first and the expensive one is only run for the final take.

Install

npm install
npm run build

Node 20 or newer. The only runtime dependencies are the official MCP SDK, the official Gradio JavaScript client and Zod.

Related MCP server: game-asset-mcp

Run it as an MCP server

node dist/server.js

Register it with a client. Claude Code, for example:

claude mcp add hf-assets -- node /path/to/hf-assets/dist/server.js

or, for a client that reads a config file:

{
  "mcpServers": {
    "hf-assets": {
      "command": "node",
      "args": ["/path/to/hf-assets/dist/server.js"],
      "env": { "HF_TOKEN": "hf_...", "HF_ASSETS_ROOT": "/path/to/hf-assets" }
    }
  }
}

This repository ships a .mcp.json that points at the server next to it, so a client that reads it needs no configuration at all.

Variable

Meaning

HF_TOKEN

Free Hugging Face token (Read). A token raises the ZeroGPU quota. It is also read from a .env next to the server. Never commit it.

HF_ASSETS_ROOT

The directory relative paths are resolved against. Defaults to the working directory.

HF_ASSETS_BLENDER

Path to the Blender executable, for render_mesh. Found automatically in the usual install locations otherwise.

FFMPEG_PATH

Path to ffmpeg, for reading and writing OGG, MP3 and FLAC. Found on PATH otherwise.

The tools

Tool

What it does

list_models

Every model with its Space, licence and cost. Read this first: it says which models may ship and which are prototype-only.

generate_image

Text → image. Z-Image Turbo, FLUX.2 Klein (edit from a reference), Qwen-Image (legible text in frame).

generate_mesh

Image → raw 3D mesh (GLB). Hunyuan3D-2, TRELLIS.

generate_audio

Text → sound, music or speech. Stable Audio Open, MMAudio, ACE-Step, Chatterbox.

generate_audio_batch

A whole manifest of audio assets, two takes each. The manifest is a file or JSON text.

postprocess_audio

Trim the silence, crossfade the ends into a seamless loop, normalise the level.

synth_sound

Procedural engine loop (any cylinder count), vehicle Foley (crash, tyre skid, boost) and music. No network, no quota.

model_sheet

A 4-in-1 model sheet prompt (front, rear, side, 3/4) for any object, from a note or from fields. Has a vehicle preset.

render_mesh

Six studio renders of a mesh, in Blender.

render_mesh takes a couple of minutes on CPU: the client needs a longer timeout than the default for that call. Lower samples, width and height for a quick look.

The resources

URI

What it holds

hf-assets://prompt-templates

Prompt templates for model sheets, concept art and prop sheets.

hf-assets://model-catalogue

Every model with its Space, licence and cost, as JSON.

hf-assets://audio-manifest

An example audio manifest, showing the format the batch tool expects.

How it is put together

src/
  server.ts        the MCP server: every tool and resource
  catalogue.ts     the models: Space, licence, cost (the one source of truth)
  paths.ts         the working root and the package root
  types.ts         what the tools hand back
  gradio.ts        the Hugging Face Space layer, and the take/sidecar writer
  image.ts         text -> image
  mesh.ts          image -> mesh
  audio.ts         text -> sound, music, speech
  audio-batch.ts   a manifest of audio assets
  model-sheet.ts   the model sheet prompt builder
  render.ts        the Blender subprocess
  dsp/
    fft.ts         a complex FFT for any length
    engine.ts      the engine loop
    sfx.ts         vehicle Foley
    music.ts       the breakbeat suite
    postprocess.ts trimming, looping, normalising
    arrays.ts      the numpy-shaped array helpers
    rng.ts         a seeded random generator
    wav.ts         WAV natively, the rest through ffmpeg
blender/
  render_raw.py    the Blender mesh renderer
  studio_render.py the lights, the backdrop and the camera

blender/ is the one part that is still Python: Blender's API is Python, so the studio renderer is a script the server runs as a subprocess.

Why not the official Hugging Face MCP server?

Hugging Face ships an official MCP server that can search the Hub and call any Space that exposes itself as an MCP tool, and Gradio can turn an app into an MCP server with mcp_server=True. If all you want is to call one of those Spaces from an agent, use it: it is less to install.

This project exists for what that does not cover.

  • Not every Space is an MCP tool. The author of a Space has to switch MCP on. Checked on 2026-10-20, four of the nine Spaces used here expose it (Z-Image Turbo, Qwen-Image, TRELLIS, Chatterbox) and five do not: FLUX.2 Klein, Hunyuan3D-2, Stable Audio Open, MMAudio and ACE-Step. Between them they cover editing from a reference, one of the two image-to-3D models and all of the sound effects and music. Here they are reached through the plain Gradio API, which every Space has. A Space may turn MCP on later, and then the official server will reach it too.

  • One tool per job, not a raw API. TRELLIS alone exposes twelve tools through MCP, and the agent has to work out which to call and in what order. Here, generate_mesh is one call, with the right parameters filled in. Likewise for image sizes, which Z-Image only accepts as exact strings.

  • A licence gate. list_models says which model may ship, and generate_audio_batch refuses a manifest that names a non-commercial model (MMAudio is CC-BY-NC-4.0), so a prototype take cannot be mistaken for a shippable one.

  • Provenance. Every file is written next to a .json with the prompt, the parameters, the seed and the raw Space response.

  • Work after the generation. postprocess_audio trims, crossfades a loop and normalises; render_mesh shows the agent the mesh from six angles in Blender so it can judge the shape; model_sheet builds a prompt that works for image-to-3D.

  • Things that need no Space at all. synth_sound makes an engine loop that survives a pitch shift, Foley and music with no network and no quota.

What is the same: both spend the same ZeroGPU quota, and both depend on someone else's free Space staying up.

Why this works

A synthesised loop survives a pitch shift. A recorded or generated loop has an arbitrary length, so when the revs of an engine or a motor change in-game the seam produces a phase jump — a click on every revolution. The synthesis is built so that the loop contains a whole number of engine cycles and the seam matches in phase at any pitch. The synth_sound tool checks this and reports:

seam step 0.0123 vs sharpest in-loop step 0.0254 -> looping is clean

Selection stays human. The pipeline is split on purpose: generation is automatic, choosing the take is not. Candidates sit next to their prompt, parameters and raw Space response (*.json), a human listens, picks one, and only then does postprocess_audio turn the chosen take into a finished file.

Every run is traceable. Next to the result sits a .json with the prompt, the parameters, the seed and the Space response, so a take can be repeated. The one exception is Stable Audio Open: its Space takes no seed, so its takes are numbered but cannot be reproduced exactly.

ZeroGPU quota

Account

GPU time per day

no token

~2–3 min, about 3 runs in total

free, with HF_TOKEN

5 min

PRO ($9/mo)

40 min, above the limit is charged

  • The quota is shared between images, meshes and sound.

  • It resets 24 hours after first use, not at midnight.

  • A Space reserves time before it starts: if there is less than the reservation left, the run is rejected immediately, even if the computation itself would have taken seconds.

Model licences

Model

Licence

Z-Image Turbo, FLUX.2 Klein, Qwen-Image

Apache-2.0

ACE-Step (music)

Apache-2.0

Chatterbox (speech)

MIT

Stable Audio Open 1.0

Stability AI Community (free below $1M revenue)

MMAudio

CC-BY-NC-4.0 — not for production

Hunyuan3D-2

Tencent Hunyuan Community (with territorial restrictions)

TRELLIS

MIT

Licences change: check the model page before using a model in a commercial project. list_models carries the same table, and generate_audio_batch refuses a manifest that names a non-commercial model. Prompts and images are uploaded to Hugging Face.

Prompt templates

Templates for model sheets, concept art and prop sheets live in PROMPT_TEMPLATES.md, also served as the hf-assets://prompt-templates resource.

Development

npm run dev        # run the server from the sources
npm run build      # the server tests run dist/server.js, so build first
npm test           # the test suite
npm run typecheck  # tsc --noEmit, sources and tests

The tests cover the FFT against reference values from numpy, the engine loop against reference output of the original implementation, the post-processing chain and the server itself over a real stdio pipe.

Licence

MIT — see LICENSE. It covers the code and the prompt templates. The models behind the Spaces have their own licences, listed above.

Author: Ivan Glazyrin (glazrus97@gmail.com).

Available Tools

9 tools
generate_audioGenerate sound, music or speechA

Generate sound effects, music or speech through a free Hugging Face Space. Writes the audio and a .json sidecar with the prompt, the parameters, the seed and the raw Space response. mmaudio is CC-BY-NC-4.0: prototype only, it must never reach a build.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFile name prefix; defaults to the model name.
seedNoSeed; change it for another take.
countNoHow many takes to generate.
modelNoWhich Space to use.stable
lyricsNomusic only: lyrics, or a path to a lyrics file.
promptYesThe sound, the music tags, or the words to say.
out_dirNoWhere to write the file.out/audio
secondsNoLength in seconds.
languageNospeech only: language code (ru, en, de, ja, ...).en
exaggerationNospeech only: emotion, 0.25-2.
negative_promptNommaudio only: what to avoid.
voice_referenceNospeech only: a 5-10 s clip of a voice you have the right to clone.

Output Schema

ParametersJSON Schema
NameRequiredDescription
logYesWhat the engine printed while it worked.
filesYesEverything that was written.

TDQS

A3.7/5.0
Behavior4/5

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

With no annotations, the description carries full behavioral burden and does well: it discloses that files are written, that a .json sidecar records the prompt, parameters, seed and raw Space response, and that the mmaudio model carries a non-commercial license barring production use. It omits whether execution depends on network availability or how long generation takes, and does not state permission requirements.

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 sentences, front-loaded with the core capability and followed by the output artifact and the critical license constraint. No filler, though the sidecar sentence could be tightened 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?

For a 12-parameter tool with an output schema present, the description need not explain return values and correctly focuses on side effects and licensing. The model-specific parameter behavior (e.g. lyrics for music, voice_reference for speech) is left entirely to the schema, which coverage-wise is sufficient, but a sentence on model selection trade-offs would have completed 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%, so every one of the 12 parameters is already documented (model enum, seed, count, language, exaggeration, etc.). The description only loosely references 'the parameters' and 'the seed' without adding syntax or constraint meaning 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 ('Generate sound effects, music or speech') and names the upstream provider ('through a free Hugging Face Space'), so the agent knows exactly what operation this performs. It does not differentiate from siblings like generate_audio_batch or synth_sound, which share the same output modality, 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 Guidelines3/5

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

Usage is implied by the purpose, and the license note ('mmaudio is CC-BY-NC-4.0: prototype only, it must never reach a build') is a genuine when-not constraint. However, no sibling alternatives are named and no condition is given for choosing this over generate_audio_batch or synth_sound, leaving routing to inference.

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

generate_audio_batchGenerate a batch of audio assetsA

Generate every asset in a manifest, two takes each, with its sidecar. The manifest lists the prompt, the model, the parameters, the licence and the target loudness of each asset. The tool refuses a manifest that names a model with a non-commercial licence, so nothing that must not ship gets generated in the first place.

ParametersJSON Schema
NameRequiredDescriptionDefault
onlyNoAsset names to generate; all of them by default.
countNoTakes per asset.
out_dirNoWhere to write the candidates.out/audio
manifestNoPath to a manifest JSON file.
manifest_jsonNoThe manifest itself, as JSON text, instead of a file. See the hf-assets://audio-manifest resource for the format.

Output Schema

ParametersJSON Schema
NameRequiredDescription
logYesWhat the engine printed while it worked.
filesYesEverything that was written.

TDQS

A3.6/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It discloses genuinely useful behavior beyond the schema: two takes per asset, a sidecar emitted per asset, and a hard refusal of non-commercial-licence models. It says nothing about overwrite behavior in out_dir, whether directories are created, or cost/rate implications of a batch job, so significant behavioral gaps remain.

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 sentences, front-loaded with the core action and no redundancy. The closing clause ('so nothing that must not ship gets generated in the first place') is mildly rhetorical but still conveys the licence-gate rationale, so the cost is small.

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. For a batch write tool with 100% schema coverage and a referenced manifest resource, the description supplies the missing pieces an agent needs: batch semantics, takes-per-asset, sidecar emission, and the licence gate.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds meaning about manifest contents (prompt, model, parameters, licence, target loudness) that the schema only gestures at via the hf-assets://audio-manifest resource, but it does not clarify the 'only', 'count', or 'out_dir' parameters beyond what the schema already says.

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 ('Generate every asset in a manifest, two takes each, with its sidecar'), making the batch scope clear. It implicitly separates itself from the single-asset generate_audio sibling via 'every asset in a manifest', but never names or contrasts with any sibling explicitly, 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 Guidelines3/5

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

Usage context is implied rather than stated: a manifest implies batch generation, and the description gives one real precondition (manifests naming non-commercial-licence models are refused). There is no explicit 'use this instead of generate_audio when...' routing or any when-not guidance.

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

generate_imageGenerate an imageA

Generate an image from a text prompt through a free Hugging Face Space. Writes the image and a .json sidecar with the prompt, the parameters, the seed and the raw Space response. Use klein with reference_images to edit an existing picture, qwen when the image has to carry legible text.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoFile name prefix; defaults to the model name.
seedNoSeed; change it for another take.
sizeNoAspect ('16:9') or exact size ('1280x720').1:1
countNoHow many takes to generate.
modelNoWhich Space to use.zimage
promptYesWhat the image should show.
out_dirNoWhere to write the file.out/images
enhance_promptNoqwen only: let the Space rewrite the prompt.
reference_imagesNoklein only: images to edit or restyle.

Output Schema

ParametersJSON Schema
NameRequiredDescription
logYesWhat the engine printed while it worked.
filesYesEverything that was written.

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does meaningful work: it discloses that the image is written to disk alongside a .json sidecar recording the prompt, parameters, seed and raw Space response, and that generation runs through an external third-party Space. It does not mention failure modes, rate limits or cost, which keeps it out of the top band.

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

Conciseness5/5

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

Two sentences, both load-bearing: the first defines the action and its outputs, the second routes model choice. The file-write behavior and the selection rule are front-loaded with no filler or redundant restatement of the schema.

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 9-parameter tool the description covers the essentials: what it produces, where it writes, and how to pick a model. An output schema exists so return values need no explanation. The only gap is that it never addresses count (up to 16 takes) or seed variation for multiple generations, and it omits any note about external Space availability or 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 description coverage is 100%, so the baseline is 3, but the description adds genuine meaning on top: it explains which model enum values pair with which parameters (klein + reference_images, qwen + legible text) and reinforces that the sidecar records the seed and parameters. It does not clarify size, count, or out_dir semantics beyond the schema.

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

Purpose5/5

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

States a specific verb + resource (generate an image from a text prompt) and identifies the execution channel (a free Hugging Face Space), which clearly separates it from generate_mesh, generate_audio and synth_sound among its siblings. It also names the artifacts produced (image plus .json sidecar), so the agent knows exactly what the tool yields.

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

Usage Guidelines4/5

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

Gives explicit conditional routing between the model options: use klein with reference_images to edit or restyle an existing picture, and qwen when the image must carry legible text. It stops short of stating when not to use this tool at all or naming a sibling alternative, so it is strong on internal selection but has no exclusion guidance.

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

generate_meshGenerate a 3D meshA

Turn an image into a raw 3D mesh. trellis gives a textured GLB at ~30k faces; hunyuan gives an untextured shape at ~450k faces. Writes the GLB and a .json sidecar with the parameters, the inputs and the raw Space response.

ParametersJSON Schema
NameRequiredDescriptionDefault
seedNoSeed; change it for another take.
imageYesThe source image, as a path.
modelNoWhich Space to use.trellis
out_dirNoWhere to write the GLB.out/mesh
extra_viewsNoMore views of the same object, fused as multi-image conditioning.

Output Schema

ParametersJSON Schema
NameRequiredDescription
logYesWhat the engine printed while it worked.
filesYesEverything that was written.

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and it does well: it discloses that it writes a GLB plus a .json sidecar containing the parameters, inputs, and raw Space response, which is exactly the side-effect information an agent needs. It omits runtime/cost expectations (a 450k-face generation is presumably slow) and whether existing files in out_dir are overwritten.

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 with zero waste: purpose first, model trade-off second, artifacts written third. Every sentence earns its place and the information 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?

Output schema exists, so return values need not be described, and the sidecar/GLB output is covered along with the two backend choices. The remaining gap is operational — long-running generation, failure modes, and file-overwrite behavior — which for a file-writing generation tool would be worth one more sentence.

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 earns more by explaining the 'model' enum substantively — trellis yields a textured low-poly GLB, hunyuan an untextured high-poly shape — which the schema's terse 'Which Space to use' does not convey. It adds little for seed, out_dir, or extra_views beyond the schema text.

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 first sentence names a specific verb and transformation ('Turn an image into a raw 3D mesh'), and the word 'raw' implicitly places it before render_mesh in the pipeline. It does not explicitly name a sibling as an alternative, so it falls short of the 5 bar for 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?

There is no explicit when-to-use statement or exclusion relative to siblings like render_mesh or generate_image. However, the trade-off between the two backends ('textured GLB at ~30k faces' vs 'untextured shape at ~450k faces') conveys implied guidance for choosing a model, which is more than nothing.

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

list_modelsList modelsA

Every model this server can reach, with its Space, licence and rough cost. Read this before generating: it says which models may ship and which are prototype-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
rootYes
quotaYes
modelsYes
out_dirYes
proceduralYes
token_presentYes

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonably well: 'list' implies a non-mutating read, and it discloses the returned fields plus a governance distinction (shippable vs prototype-only). It stops short of stating read-only guarantees, auth requirements, or cost-units/precision, so it is not fully transparent.

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

Conciseness5/5

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

Two sentences, no filler. The core deliverable ('every model ... with its Space, licence and rough cost') is front-loaded, and the usage rule follows immediately in the same breath.

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 structure need not be spelled out, yet the description still summarizes the payload and adds the one thing the schema cannot convey: that the list encodes a ship/prototype governance decision. 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?

The tool takes zero parameters, so there is nothing to disambiguate; baseline is 4. The description correctly adds no parameter chatter, keeping it a pure inventory call.

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 resource ('every model this server can reach') and enumerates what each entry carries (Space, licence, rough cost). An agent can distinguish this inventory tool from the generate_* siblings purely from the description.

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 an explicit trigger: 'Read this before generating.' It explains the selection consequence (which models may ship vs prototype-only) rather than just naming an alternative sibling, but it never names model_sheet or another route as a substitute.

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

model_sheetBuild a model sheet promptA

Assemble a 4-in-1 model sheet prompt: front, rear, side and 3/4 in one image. One prompt, one board, four angles of the same object — the fastest way to get a consistent set of views, and the best input for the image-to-3D models. The object preset suits any prop, building, character or machine; the vehicle preset keeps a car or a bike in factory trim.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoName of the object.
rearNoOverride the rear view description.
sideNoOverride the side view description.
frontNoOverride the front view description.
finishNoColour, material and finish.
presetNoobject (default) or vehicle.
subjectNoWhat it is: 'a hand-forged iron lantern', 'a mid-engine coupe'.
note_fileNoA markdown note describing the object.
referenceNoThe design it is based on or inspired by.
perspectiveNoOverride the 3/4 view description.

Output Schema

ParametersJSON Schema
NameRequiredDescription
infoYes
promptYes

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are supplied, so the description carries the full burden. It does disclose the output shape ('One prompt, one board, four angles of the same object'), but says nothing about whether it merely returns text versus writing artifacts, how the override parameters interact with the generated views, or any side effects or prerequisites. Adequate for a prompt-assembly tool, but noticeably thin given zero annotation coverage.

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

Conciseness4/5

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

Three sentences, front-loaded with the deliverable and then the value proposition and preset guidance; every sentence carries information. Slight promotional phrasing ('the fastest way', 'the best input') consumes space without adding actionable detail.

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

Completeness4/5

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

Ten optional parameters with full schema documentation and an output schema mean the description's job is mostly framing, which it does well: purpose, output artifact, and preset semantics are all present. It stops short of explaining how the front/rear/side/perspective overrides compose into the board, which is the one remaining gap an agent might care about.

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 description adds genuine meaning for the most consequential parameter: it explains what the object vs. vehicle presets are actually for. The remaining nine parameters (subject, finish, reference, note_file, the four view overrides) get no additional treatment in prose, leaving this just 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?

States a specific verb and artifact ('Assemble a 4-in-1 model sheet prompt') and enumerates the four views it composes, so the deliverable is unambiguous. It does not name a sibling (e.g., generate_image) or explicitly say it returns a text prompt rather than a rendered sheet, so the differentiation from adjacent generation tools rests on inference.

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 context for when to reach for it — 'the fastest way to get a consistent set of views, and the best input for the image-to-3D models' — and steers preset choice ('object preset suits any prop, building, character or machine; the vehicle preset keeps a car or a bike in factory trim'). There is no when-not guidance and no named alternative, so it falls short of the 5 tier.

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

postprocess_audioPost-process audioA

Trim the silence, crossfade the ends into a seamless loop, normalise the level. This is the step that turns a chosen take into a finished asset. With loop on, the file is shortened by the crossfade so that it tiles without a click at the seam.

ParametersJSON Schema
NameRequiredDescriptionDefault
loopNoCrossfade the ends so the file loops seamlessly.
fade_msNoLength of the loop crossfade in milliseconds.
input_pathYesThe audio file to process.
output_pathYesWhere to write the result (.ogg or .wav).
target_dbfsNoTarget RMS level in dBFS.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
seamYes
secondsYes
rms_dbfsYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries full disclosure burden. It does add one genuinely non-obvious behavioural fact — that enabling loop shortens the file by the crossfade length — which cannot be inferred from the schema. But it says nothing about write semantics: whether output_path is overwritten, whether processing is in-place, or what happens on failure.

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

Conciseness5/5

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

Three tight sentences, front-loaded with the concrete operations before the pipeline framing and the loop side-effect. No filler or restatement of the tool name.

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 described, and the schema documents all five parameters and defaults. The description covers the pipeline role and the loop truncation behaviour; the only material omission for a file-writing tool with no annotations is overwrite/error behaviour.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description adds value by explaining the interaction between loop and fade_ms (the seam crossfade truncates the total length), which is cross-parameter meaning the schema does not state. Other parameters (target_dbfs, input/output paths) are left entirely to the schema.

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

Purpose5/5

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

The description names three concrete operations (trim silence, crossfade ends, normalise level) on a specific resource (an audio take), and frames it as the finishing step after a take is chosen. This clearly separates it from the sibling generators such as generate_audio and synth_sound, which produce rather than finish audio.

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?

"This is the step that turns a chosen take into a finished asset" positions the tool in the pipeline and tells the agent it operates on an already-produced file rather than raw parameters. It does not, however, name alternatives or state exclusions (e.g. what to do if the take is already processed).

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

render_meshRender a mesh in a studioA

Render a mesh from six studio angles: both ends, both sides and two 3/4 views. The mesh is centred, put on the floor and lit with a key, a fill and a rim light. Use it to judge the shape before building anything on top of it. Needs Blender; set HF_ASSETS_BLENDER if it is not on PATH.

ParametersJSON Schema
NameRequiredDescriptionDefault
glbYesThe mesh to render, as a path.
widthNoRender width in pixels.
heightNoRender height in pixels.
lengthNoLength of the longest horizontal axis in metres.
prefixNoFile name prefix.render
out_dirNoWhere to write the PNGs.out/renders
samplesNoCycles samples per view; lower is faster.

Output Schema

ParametersJSON Schema
NameRequiredDescription
logYesWhat the engine printed while it worked.
filesYesEverything that was written.

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does disclose real behavioral traits: the fixed six-view framing, centring/floor placement, three-light setup, that it writes PNGs, and an external dependency ('Needs Blender; set HF_ASSETS_BLENDER'). It could still note that it is a read-only, non-destructive operation, but the coverage is solid.

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 sentences, front-loaded with what it renders before moving to setup and prerequisites. Every sentence carries information (angles, lighting, purpose, dependency). Slightly dense but no wasted 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?

Given an output schema exists, return values need not be explained, and the description covers purpose, visual setup, and the Blender prerequisite. The one gap is that it never distinguishes this tool from the sibling model_sheet, which likely also produces multi-view renders, leaving that routing decision unclear.

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, and the description adds genuine meaning on top: the six-angle framing explains why width/height matters, the floor/centring context informs 'length', and the PNG output clarifies out_dir. It stops short of documenting syntax for any single parameter, keeping it just above baseline.

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 (render) and resource (mesh) and further specifies the output: six studio angles (both ends, both sides, two 3/4 views). This is enough to distinguish it from generate_mesh and the other generation siblings 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?

It gives a clear usage context: 'Use it to judge the shape before building anything on top of it.' That tells the agent when this tool fits. It does not name alternatives such as model_sheet, so exclusions are left to inference rather than stated.

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

synth_soundSynthesise sound procedurallyA

Synthesise audio without the network and without spending any quota. engine writes a loop whose length is a whole number of firing cycles, so it still loops cleanly when the game pitches it up or down. sfx writes vehicle Foley: crash, tyre skid and boost. music writes a breakbeat in four intensity tiers plus a menu theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
rpmNoengine only: the revs the loop is recorded at. Must divide evenly into a whole number of firing cycles.
kindNoWhat to synthesise.engine
nameNoengine only: file name stem.engine_loop
seedNoengine only: noise seed.
cyclesNoengine only: firing cycles in the loop.
out_dirNoWhere to write the files.out/synth
cylindersNoengine only: cylinder count; 8 gives the V8 lope, 12 a smooth V12.

Output Schema

ParametersJSON Schema
NameRequiredDescription
logYesWhat the engine printed while it worked.
filesYesEverything that was written.

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full behavioral burden, and it does disclose real traits: offline execution, no quota consumption, and that engine loops are an integer number of firing cycles so they stay loop-clean under pitch changes. It omits write-to-disk behavior (only implied by out_dir), output file format, and runtime cost, which keeps it short of 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?

Four short sentences, front-loaded with the key differentiator (offline, no quota) followed by one sentence per enum branch. Nothing is padded and every sentence carries information an agent needs.

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 7 all-optional parameters at full schema coverage and an output schema present, the description needn't explain returns; it covers the enum semantics and the important behavioral constraints. The remaining gap is the file-writing side effect and output format, which is only hinted at via the out_dir parameter.

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, and the description earns a bump by explaining what each kind value yields (a pitched-stable engine loop, vehicle Foley crash/skid/boost, a four-tier breakbeat plus menu theme) and by tying rpm to the firing-cycle constraint. It adds no syntax or format detail for the remaining engine-only parameters, which the schema already documents.

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 ("Synthesise audio") and immediately differentiates itself from the sibling generators by the qualifier "without the network and without spending any quota." The three kind branches (engine/sfx/music) further pin down exactly what output each invocation produces, so an agent can distinguish it from generate_audio 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?

The offline/no-quota framing is a clear use-case signal: pick this when you want synthesis that doesn't hit the network or consume quota. However, it never names the alternative (generate_audio) or states exclusions, so the agent must infer the routing decision rather than being told it explicitly.

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. 9 tool updatesv1.0.0
    • First observedgenerate_audio
    • First observedgenerate_audio_batch
    • First observedgenerate_image
    • First observedgenerate_mesh
    • First observedlist_models
    • First observedmodel_sheet
    • First observedpostprocess_audio
    • First observedrender_mesh
    • First observedsynth_sound

TDQS

A4/5.0

Scored across 9 tools

Disambiguation4/5

Most tools have distinct purposes, but the audio tools (generate_audio, generate_audio_batch, synth_sound, postprocess_audio) share a broad domain and require careful reading to pick correctly. model_sheet could also be mistaken for an image generator, though its description clarifies it assembles a prompt.

Naming Consistency4/5

Eight of nine tools follow a consistent snake_case verb_noun pattern (list_models, generate_image, generate_mesh, generate_audio, generate_audio_batch, postprocess_audio, synth_sound, render_mesh). model_sheet is a noun phrase, which is a minor deviation from the otherwise strong convention.

Tool Count5/5

Nine tools are well-scoped for an asset-generation pipeline covering images, meshes, audio, and supporting steps. Each tool has a distinct job, and the set is neither thin nor bloated.

Completeness4/5

The core lifecycle for generating, post-processing, and rendering image, mesh, and audio assets is well covered, including model and licence awareness. Minor gaps exist around inspecting or managing generated artifacts and image post-processing, but they do not block the main workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers