HF Assets
Provides a render_mesh tool that uses Blender to produce six studio renders of a 3D mesh, allowing agents to inspect the mesh from multiple angles.
Generates game assets such as images, 3D meshes, sound, music, and speech through free Hugging Face Spaces. It also lists available models with licences and costs, manages ZeroGPU quota, supports batch audio manifests, and writes provenance sidecars for generated files.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@HF Assetsmake a seamless engine loop for a six-cylinder race car"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
HF Assets
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 buildNode 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.jsRegister it with a client. Claude Code, for example:
claude mcp add hf-assets -- node /path/to/hf-assets/dist/server.jsor, 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 |
| Free Hugging Face token (Read). A token raises the ZeroGPU quota. It is also read from a |
| The directory relative paths are resolved against. Defaults to the working directory. |
| Path to the Blender executable, for |
| Path to ffmpeg, for reading and writing OGG, MP3 and FLAC. Found on |
The tools
Tool | What it does |
| Every model with its Space, licence and cost. Read this first: it says which models may ship and which are prototype-only. |
| Text → image. Z-Image Turbo, FLUX.2 Klein (edit from a reference), Qwen-Image (legible text in frame). |
| Image → raw 3D mesh (GLB). Hunyuan3D-2, TRELLIS. |
| Text → sound, music or speech. Stable Audio Open, MMAudio, ACE-Step, Chatterbox. |
| A whole manifest of audio assets, two takes each. The manifest is a file or JSON text. |
| Trim the silence, crossfade the ends into a seamless loop, normalise the level. |
| Procedural engine loop (any cylinder count), vehicle Foley (crash, tyre skid, boost) and music. No network, no quota. |
| A 4-in-1 model sheet prompt (front, rear, side, 3/4) for any object, from a note or from fields. Has a |
| 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 |
| Prompt templates for model sheets, concept art and prop sheets. |
| Every model with its Space, licence and cost, as JSON. |
| 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 camerablender/ 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_meshis one call, with the right parameters filled in. Likewise for image sizes, which Z-Image only accepts as exact strings.A licence gate.
list_modelssays which model may ship, andgenerate_audio_batchrefuses 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
.jsonwith the prompt, the parameters, the seed and the raw Space response.Work after the generation.
postprocess_audiotrims, crossfades a loop and normalises;render_meshshows the agent the mesh from six angles in Blender so it can judge the shape;model_sheetbuilds a prompt that works for image-to-3D.Things that need no Space at all.
synth_soundmakes 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 cleanSelection 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 | 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 testsThe 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 toolsgenerate_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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | File name prefix; defaults to the model name. | |
| seed | No | Seed; change it for another take. | |
| count | No | How many takes to generate. | |
| model | No | Which Space to use. | stable |
| lyrics | No | music only: lyrics, or a path to a lyrics file. | |
| prompt | Yes | The sound, the music tags, or the words to say. | |
| out_dir | No | Where to write the file. | out/audio |
| seconds | No | Length in seconds. | |
| language | No | speech only: language code (ru, en, de, ja, ...). | en |
| exaggeration | No | speech only: emotion, 0.25-2. | |
| negative_prompt | No | mmaudio only: what to avoid. | |
| voice_reference | No | speech only: a 5-10 s clip of a voice you have the right to clone. |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | Yes | What the engine printed while it worked. |
| files | Yes | Everything that was written. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| only | No | Asset names to generate; all of them by default. | |
| count | No | Takes per asset. | |
| out_dir | No | Where to write the candidates. | out/audio |
| manifest | No | Path to a manifest JSON file. | |
| manifest_json | No | The manifest itself, as JSON text, instead of a file. See the hf-assets://audio-manifest resource for the format. |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | Yes | What the engine printed while it worked. |
| files | Yes | Everything that was written. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | File name prefix; defaults to the model name. | |
| seed | No | Seed; change it for another take. | |
| size | No | Aspect ('16:9') or exact size ('1280x720'). | 1:1 |
| count | No | How many takes to generate. | |
| model | No | Which Space to use. | zimage |
| prompt | Yes | What the image should show. | |
| out_dir | No | Where to write the file. | out/images |
| enhance_prompt | No | qwen only: let the Space rewrite the prompt. | |
| reference_images | No | klein only: images to edit or restyle. |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | Yes | What the engine printed while it worked. |
| files | Yes | Everything that was written. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Seed; change it for another take. | |
| image | Yes | The source image, as a path. | |
| model | No | Which Space to use. | trellis |
| out_dir | No | Where to write the GLB. | out/mesh |
| extra_views | No | More views of the same object, fused as multi-image conditioning. |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | Yes | What the engine printed while it worked. |
| files | Yes | Everything that was written. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| root | Yes | |
| quota | Yes | |
| models | Yes | |
| out_dir | Yes | |
| procedural | Yes | |
| token_present | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Name of the object. | |
| rear | No | Override the rear view description. | |
| side | No | Override the side view description. | |
| front | No | Override the front view description. | |
| finish | No | Colour, material and finish. | |
| preset | No | object (default) or vehicle. | |
| subject | No | What it is: 'a hand-forged iron lantern', 'a mid-engine coupe'. | |
| note_file | No | A markdown note describing the object. | |
| reference | No | The design it is based on or inspired by. | |
| perspective | No | Override the 3/4 view description. |
Output Schema
| Name | Required | Description |
|---|---|---|
| info | Yes | |
| prompt | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | No | Crossfade the ends so the file loops seamlessly. | |
| fade_ms | No | Length of the loop crossfade in milliseconds. | |
| input_path | Yes | The audio file to process. | |
| output_path | Yes | Where to write the result (.ogg or .wav). | |
| target_dbfs | No | Target RMS level in dBFS. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| seam | Yes | |
| seconds | Yes | |
| rms_dbfs | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| glb | Yes | The mesh to render, as a path. | |
| width | No | Render width in pixels. | |
| height | No | Render height in pixels. | |
| length | No | Length of the longest horizontal axis in metres. | |
| prefix | No | File name prefix. | render |
| out_dir | No | Where to write the PNGs. | out/renders |
| samples | No | Cycles samples per view; lower is faster. |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | Yes | What the engine printed while it worked. |
| files | Yes | Everything that was written. |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| rpm | No | engine only: the revs the loop is recorded at. Must divide evenly into a whole number of firing cycles. | |
| kind | No | What to synthesise. | engine |
| name | No | engine only: file name stem. | engine_loop |
| seed | No | engine only: noise seed. | |
| cycles | No | engine only: firing cycles in the loop. | |
| out_dir | No | Where to write the files. | out/synth |
| cylinders | No | engine only: cylinder count; 8 gives the V8 lope, 12 a smooth V12. |
Output Schema
| Name | Required | Description |
|---|---|---|
| log | Yes | What the engine printed while it worked. |
| files | Yes | Everything that was written. |
TDQS
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.
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.
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.
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.
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.
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.
9 tool updates
v1.0.0- First observed
generate_audio - First observed
generate_audio_batch - First observed
generate_image - First observed
generate_mesh - First observed
list_models - First observed
model_sheet - First observed
postprocess_audio - First observed
render_mesh - First observed
synth_sound
TDQS
Scored across 9 tools
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.
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.
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.
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
Related MCP Connectors
Turn prompts into production-ready game assets: animated characters, textures, terrain, VFX, HUD.
Generate reproducible image, video, and audio assets with leading models and your own provider keys.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
- VoidlessOAuthdev.voidless
Generate game assets: sprites, animations, tilesets, sound effects, music, video and 3D models.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables local generation of game sound effects from text prompts using Stability AI's Stable Audio Open model, with no API keys or per-generation cost.1MIT
- AlicenseAqualityAmaintenanceEnables AI agents to generate game-ready 3D assets from reference images with PBR textures, and to retexture meshes the user already owns, while recording full provenance for every generated file.2011MIT
- FlicenseNot gradedqualityCmaintenanceEnables generating game assets from natural language prompts, including sprite sheets, animations, voiceover, sound effects, chiptune music, tilesets, backgrounds, VFX, and cohesive asset packs with shared style and audio DSP presets.-

Sprixen MCP serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI agents to create style-locked game projects and generate sprites, animations, tiles, maps, music, 3D models, and VFX, then export engine-ready packages for Godot, Phaser, Unity, GameMaker, or RPG Maker MZ.MIT