Skip to main content
Glama

Assets

assets

Import, generate, or find art and audio for Godot projects: create placeholders, search CC0 libraries, use AI generators, set import options, and list existing files.

Instructions

Get art and audio into the game. Instant procedural placeholders (no key needed) keep prototypes playable; free CC0 libraries (Poly Haven textures/HDRIs/models, ambientCG PBR materials, Poly Pizza low-poly models) are searched and imported with credits recorded in res://CREDITS.md; optional AI generators (images via OpenAI, sound effects via ElevenLabs, 3D models via Meshy) use keys from the server environment. Also import presets (pixel art, normal maps) and an inventory of existing assets.

Actions:

  • providers: {} which sources/generators are available (API keys configured).

  • placeholder: {path: res://assets/sprites/player.png, kind?: sprite|spritesheet|tileset|icon, shape?: rounded|rect|circle|triangle|diamond|capsule|star, size?: [32,32], color?, outline?, face?, frames? (spritesheet), colors? (tileset: one tile per color)} generate placeholder art instantly.

  • search: {query, source?: polyhaven|ambientcg|polypizza, type?: texture|hdri|model, limit?=10} search free asset libraries.

  • download: {source, id, resolution?='1k', dest?: res:// folder, material?=true} import an asset from search results. Textures also get a ready StandardMaterial3D .tres; HDRIs are for skies; models are glTF/GLB you can instance.

  • generate_image: {prompt, path: res://assets/sprites/x.png, size?: [64,64] (downscale after generating), transparent?=true, pixel_art?, style?} AI image (sprites, icons, backgrounds, textures). Needs OPENAI_API_KEY.

  • generate_sfx: {prompt: 'retro coin pickup', path: res://assets/sfx/coin.mp3, duration?} AI sound effect. Needs ELEVENLABS_API_KEY.

  • generate_model: {prompt, path: res://assets/models/x.glb, texture?=true, wait_seconds?=60} AI 3D model (takes minutes; returns a job id to poll). Needs MESHY_API_KEY.

  • job: {id, wait_seconds?} poll a 3D generation job; downloads the model when done.

  • import_options: {path | paths, preset?: pixel_art|2d|3d_texture|normal_map|ui, options?: {raw .import params}} change import settings and reimport. No preset/options = show current settings.

  • process_image: {path, resize?: [w,h], nearest?, trim?, save_as?} trim/resize an image (e.g. downscale a generated sprite to 32x32 with nearest).

  • inventory: {path?} project assets grouped by type (textures, audio, models, fonts, scenes, materials).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoAsset id from search, or job id.
destNoDestination res:// folder or file.
kindNoPlaceholder kind.
pathNores:// file path.
sizeNo[width, height] in px.
typeNotexture | hdri | model.
colorNoHex color.
limitNoMax results.
pathsNoSeveral res:// paths.
queryNoSearch text.
shapeNoPlaceholder shape.
actionYesWhat to do. See the tool description for each action's parameters.
presetNoImport preset.
promptNoWhat to generate.
sourceNopolyhaven | ambientcg | polypizza.
optionsNoRaw import options.
resolutionNo1k, 2k, 4k.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A3.8/5.0
Behavior1/5

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

Annotations declare openWorldHint=false, but the description explicitly describes searching external CC0 libraries and calling AI generation APIs (OpenAI, ElevenLabs, Meshy) — clearly networked/open-world operations. This direct contradiction overrides the otherwise useful behavioral details.

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?

Long but appropriately so for 11 actions. The overview is front-loaded, followed by compact action bullets. Each line provides necessary parameter or behavioral detail with no obvious filler.

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

Completeness5/5

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

Given 11 actions, 17 parameters, nested objects, and no output schema, the description covers required API keys, defaults, return behavior (job id for polling), and file destinations. It is complete enough for correct invocation.

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

Parameters5/5

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

Schema coverage is 100% but the schema descriptions are generic; the description supplies action-specific parameter semantics: enum-like values for kind/shape, defaults (limit=10, resolution='1k', wait_seconds=60), path conventions, and parameter combinations per action. This adds substantial meaning beyond the schema.

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

Purpose4/5

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

States a specific verb+resource: 'Get art and audio into the game', and enumerates all actions clearly. It does not, however, explicitly differentiate from sibling tools such as resource, audio, or files.

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 per-action context: placeholders for prototypes without keys, free libraries for real assets, AI generators when keys are available. It stops short of naming when to use this tool instead of siblings or when not to use it.

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