MCP servers

Every ThreeNative project wires 4 MCP servers into its .mcp.json, all launched from the installed @threenative/core, so a coding agent can find and fix assets, sculpt geometry, convert models with Blender and search the engine's API before it writes code.

On this page

These tool lists are recorded from each server's published package, not copied from its docs, and update with the engine.

threenative-assets

Version 0.9.5, 46 tools.

The loop the project's AGENTS.md teaches

  1. ambientcg_list_files
  2. ambientcg_search_assets
  3. asset_download_file
  4. asset_search_sources
  5. audio_download_asset
  6. audio_search_assets
  7. polyhaven_list_files
  8. polyhaven_search_assets
  9. asset_inspect_rig
  10. asset_auto_rig
  11. asset_retarget_animations
  12. asset_preview_animation

Every tool

  • ambientcg_get_asset — Get normalized metadata and CC0 licensing for one ambientCG asset. — takes assetId: string
  • ambientcg_list_categories — List ambientCG category metadata and asset counts. — takes type?: "material" | "hdri" | "substance" | "decal" | "atlas" | "3d-model" | "plain-image" | "brush" | "terrain" | "hdri-element"
  • ambientcg_list_files — List official CC0 asset archives with variant attributes, extensions, URLs, and byte sizes. — takes assetId: string, attributes?: string, extension?: string, limit?: integer = 100, cursor?: string
  • ambientcg_search_assets — Search CC0 materials, HDRIs, models, decals, atlases, brushes, terrains, and other ambientCG assets. — takes query?: string, type?: "material" | "hdri" | "substance" | "decal" | "atlas" | "3d-model" | "plain-image" | "brush" | "terrain" | "hdri-element", sort?: "popular" | "latest" | "downloads" | "oldest" | "random" | "alphabet" = "popular", limit?: integer = 24, cursor?: string
  • asset_auto_rig — Fit an 18-joint humanoid skeleton to an unrigged local GLB by measured geometry landmarks, bind smooth or rigid skin weights and publish the skinned GLB under the project root. Preserves an existing rig unless replaceRig is set; ambiguous anatomy returns a landmark correction request instead of a bad rig. — takes target: string, output: string, projectRoot: string, weightMode?: "smooth" | "rigid" = "smooth", replaceRig?: boolean = false, maxInfluences?: integer, priorDigest?: string, overrides?: object, orientation?: object
  • asset_download_bundle_animation — Export one named animation as a small standalone GLB after range-fetching only the aggregate source entry. Unrelated clips, meshes, materials, and textures are removed; cached source entries are reused. — takes packId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer", uploadId: string, entryPath?: string, animationName: string, acceptLicense: boolean
  • asset_download_bundle_entry — Extract one selected ZIP entry through HTTP byte ranges, cache it locally, and avoid downloading unrelated bundle contents. Requires explicit license acknowledgement. A .glb/.gltf entry also reports sizeMeters, its bounding-box size in the file's own units: a value near 890 for something meant to be 9 m means the source was authored in centimetres and the game must scale it. — takes packId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer", uploadId: string, entryPath: string, acceptLicense: boolean
  • asset_download_file — Download a file URL returned by Poly Haven, ambientCG, or Smithsonian MCP tools, or a curated Game-icons.net/Kenney direct ZIP, into guarded local storage after license acknowledgement. Provider hosts and URL shapes are allowlisted, redirects are revalidated, files are streamed with a byte cap, and existing files are never overwritten. — takes provider: "polyhaven" | "ambientcg" | "smithsonian" | "game-icons" | "kenney", url: string, fileName: string, acceptLicense: boolean
  • asset_import_unreal — Convert a local directory of Unreal .uasset/.umap files into self-contained model and scene GLBs under a game's assets directory, with reconstructed PBR materials, actor transforms, and a provenance report. Works on any already-downloaded Unreal pack, whatever downloaded it. Every GLB result reports sizeMeters, its bounding-box size in the file's own units: a value near 890 for something meant to be 9 m means the source was authored in centimetres and the game must scale it. — takes sourceDir: string, outputDir: string, packages?: array, maxTextureSize?: integer
  • asset_inspect_rig — Inspect a local humanoid GLB and optional local UAL ZIP/GLB libraries: meshes, joints, suggested bone mappings, clips, attributes, extensions, measured bounds and attachment candidates. Reads only caller-selected local files and downloads nothing. — takes target: any, libraries?: array
  • asset_list_bundle_animations — Range-extract and cache only the aggregate GLB from a curated bundle, then return its named animation clips. The standard non-root-motion GLB is selected automatically when entryPath is omitted. — takes packId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer", uploadId: string, entryPath?: string
  • asset_list_bundle_entries — Inspect a curated itch.io ZIP through HTTP byte ranges without downloading the whole archive. Returns individual entry paths and compressed/uncompressed sizes; signed URLs are never exposed. — takes packId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer", uploadId: string
  • asset_list_sources — List agent-ready sources by default: every result has an MCP download path requiring no manual browser, login, checkout, or paywall. Set agentReadyOnly=false to inspect the broader research directory, including package-manager, Git, authenticated, and provider-page sources. — takes agentReadyOnly?: boolean = true
  • asset_preview_animation — Render a prepared GLB from several angles with an optional clip sample time or explicit bone pose, and publish a nonblank contact sheet under the project root. A missing rendering backend returns an explicit unavailable result instead of claiming success. — takes prepared: string, output: string, projectRoot: string, clip?: string, times?: array, pose?: object, angles?: integer = 3, width?: integer = 384, height?: integer = 384, priorDigest?: string
  • asset_retarget_animations — Fetch the selected pinned release donors, retarget their clips onto a prepared target skeleton with a world-space rest correction, preserve the target's mesh/materials/UVs and (by default) its existing clips, and publish a game minimal GLB. Root motion requires the matching _RM donor. — takes target: string, output: string, projectRoot: string, clips: array, keepExistingClips?: boolean = true, mapping?: object, priorDigest?: string
  • asset_search_sources — Search agent-ready asset sources by category, license, access mode, or text query. Manual/provider-page sources are excluded unless agentReadyOnly=false. — takes query?: string, category?: any = "all", access?: any = "all", license?: any = "all", agentReadyOnly?: boolean = true
  • audio_download_asset — Download one catalog asset by ID into the dedicated audio directory after explicit license acknowledgement. URLs and redirects are restricted to curated official hosts; existing files are never overwritten. — takes assetId: string, acceptLicense: boolean
  • audio_generate_sound — SPENDS PROVIDER CREDITS. Generate one sound effect or ambience from a prompt using the user's own ELEVENLABS_API_KEY, save the original response and a PCM16 WAV, and inspect the result automatically. Requires that key in the server environment; without it this tool fails and you should tell the user to set their own. Describe source, action, material, distance and timing in the prompt. Generate once, inspect, revise the specific property that failed, then explicitly generate again — never loop. Reusing a requestId returns the saved result instead of charging again. — takes requestId: string, prompt: string, durationSeconds?: number = 5, loop?: boolean = false, promptInfluence?: number = 0.3, inspection?: object
  • audio_inspect_asset — Measure one local WAV, Ogg, MP3 or FLAC with the pinned threenative-playtest inspector: decode integrity, silence, peak, DC, five-band spectrum, declared-loop seam and requested duration, plus a spectrogram. Needs no ElevenLabs key. Reports technical status, and prompt/emotion fit only when local CLAP is provisioned. It never repairs or rewrites the file, and it never certifies artistic quality: use the findings to decide whether to revise one specific property, then listen before shipping. — takes path: string, loop: boolean, expectedDurationSeconds?: number, expectedPrompt?: string, alternativePrompts?: array, emotion?: object, bands?: object, peakMax?: number, silenceRms?: number, seamMaxRatio?: number, semantic?: "off" | "clap" = "off"
  • audio_list_sources — List supported audio libraries, best uses, licensing caveats, browse pages, and whether this MCP has a curated direct-download contract.
  • audio_search_assets — Search the curated catalog of official audio packs with stable direct URLs and explicit license metadata. Use audio_list_sources for broader provider-page discovery. — takes query?: string, kind?: "all" | "sfx" | "music" | "mixed" = "all", source?: any = "all", limit?: integer = 24, cursor?: string
  • creature_check — Inspect actual GLB mesh, rig, materials and animation bindings, or run validated claims through the fixed anyCreature judge; visual review remains independent.
  • creature_compile — Compile a bounded project-relative anyCreature JSON spec with the fixed packaged 1.3.1 compiler, validate its GLB, and publish it atomically with hash-bound evidence. — takes specPath: string, outputPath: string, expectedOutputSha256?: string
  • creature_guide — Read a bounded syntax or workflow section from the verified anyCreature 1.3.1 payload. This does not run or extract the compiler. — takes section: "overview" | "syntax" | "low" | "mid" | "high" | "delivery"
  • creature_preview — Render fresh, bounded silhouettes or a hero image for a project-relative creature GLB and return image artifacts with backend and camera identity; visual approval remains independent. — takes glbPath: string, mode: "silhouettes" | "hero", previousPreviewId?: string
  • creature_status — Report the pinned anyCreature payload, currently available operations, and optional local tooling without starting a browser or requesting credentials.
  • fab_download_free_asset — Download one directly available free Fab file into the configured local download directory. This never purchases or adds an asset to a library. Every GLB result reports sizeMeters, its bounding-box size in the file's own units: a value near 890 for something meant to be 9 m means the source was authored in centimetres and the game must scale it. — takes listingIdOrUrl: string, format: "blender" | "fbx" | "glb" | "gltf" | "maya" | "obj" | "unity", acceptFabEula: boolean
  • fab_get_asset — Get normalized public details and per-license prices for one Fab listing. — takes listingIdOrUrl: string, currency?: string
  • fab_import_asset — Download an Unreal asset the signed-in Fab account already owns and convert it to source GLBs in one step. Uses the FabCLI session the user established themselves; it never logs in, claims, or purchases anything. Every GLB result reports sizeMeters, its bounding-box size in the file's own units: a value near 890 for something meant to be 9 m means the source was authored in centimetres and the game must scale it. — takes listingIdOrUrl: string, outputDir: string, packages?: array, engine?: string, maxTextureSize?: integer, platform?: string, acceptFabEula: boolean
  • fab_list_filters — List usable public Fab filter labels and slugs. A warning identifies versioned fallback or stale values. — takes kinds?: array, refresh?: boolean = false
  • fab_list_limited_time_free — List Fab's dedicated curated limited-time-free promotions separately from general free search. — takes limit?: integer = 24
  • fab_list_owned — List every listing already in the signed-in Fab library, optionally filtered to the ones that publish an Unreal artifact fab_import_asset can convert. Search free assets first with fab_search_assets; reach for this when you want something already paid for. Read-only — it never claims or purchases. — takes query?: string, unrealOnly?: boolean = false
  • fab_search_assets — Search public Fab marketplace listings. Free assets are returned by default. Results carry no file formats and there is no format filter: call fab_get_asset for a listing's formats. — takes query?: string, priceMode?: "free" | "any" | "range" = "free", minPrice?: number, maxPrice?: number, currency?: string, channels?: array, listingTypes?: array, categories?: array, tags?: array, licenses?: array, publisher?: string, minimumRating?: any, publishedSince?: string, aiGenerated?: boolean, allowsAiUse?: boolean, sort?: "relevance" | "rating" | "newest" | "oldest" | "price_asc" | "price_desc" | "discount_desc" | "recently_updated" = "relevance", limit?: integer = 24, cursor?: string
  • itch_download_asset — Resolve a fresh signed itch.io file URL for a listed upload and stream it into guarded local storage after explicit license acknowledgement. Signed URLs are not exposed in the MCP result. — takes packId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer", uploadId: string, acceptLicense: boolean
  • itch_list_downloads — Resolve a fresh no-account itch.io download page and list its upload IDs, names, sizes, license, and safe suggested filenames. Signed page tokens are never returned. — takes packId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer"
  • polyhaven_get_asset — Get normalized metadata, authorship, dimensions, and CC0 license information for one Poly Haven asset. — takes assetId: string
  • polyhaven_list_categories — List Poly Haven category labels and asset counts for HDRIs, textures, or models. — takes type: "hdris" | "textures" | "models"
  • polyhaven_list_files — List official download URLs, byte sizes, MD5 hashes, and file dependencies for a Poly Haven asset, with format and resolution filters. — takes assetId: string, resolution?: string, format?: string, includeDependencies?: boolean = true, limit?: integer = 100, cursor?: string
  • polyhaven_search_assets — Search CC0 HDRIs, textures, and models from Poly Haven. Results include explicit Poly Haven attribution. — takes query?: string, type?: "all" | "hdris" | "textures" | "models" = "all", categories?: array = [], sort?: "relevance" | "popular" | "newest" | "name" = "relevance", limit?: integer = 24, cursor?: string
  • sketchfab_get_downloads — Get temporary download URLs for a downloadable Sketchfab model using the user's SKETCHFAB_API_TOKEN. This does not store credentials or download files. — takes modelId: string
  • sketchfab_get_model — Get public metadata and explicit Creative Commons requirements for one Sketchfab model. — takes modelId: string
  • sketchfab_list_categories — List public Sketchfab model category names and slugs.
  • sketchfab_search_models — Search public Sketchfab models and return per-model license, author, geometry, and archive metadata. — takes query?: string, downloadable?: boolean = true, animated?: boolean, staffPicked?: boolean, category?: string, licenses?: array, sortBy?: "relevance" | "likeCount" | "viewCount" | "publishedAt" = "relevance", limit?: integer = 24, cursor?: string
  • smithsonian_get_asset — Get a normalized summary of one Smithsonian Open Access 3D model. — takes modelId: string
  • smithsonian_list_files — List direct Smithsonian Open Access files with format, quality, compression, and orientation metadata. — takes modelId: string, fileType?: "jpg" | "glb" | "ply" | "zip", modelType?: "glb" | "ply" | "obj" | "gltf" | "f3z" | "blend" | "stl", quality?: "Low" | "Medium" | "High" | "Thumb" | "Low_resolution" | "Medium_resolution" | "Full_resolution" | "Water_tight", limit?: integer = 100, cursor?: string
  • smithsonian_search_assets — Search Smithsonian Open Access 3D models and file variants by text, type, quality, and owning unit. — takes query?: string, fileType?: "jpg" | "glb" | "ply" | "zip", modelType?: "glb" | "ply" | "obj" | "gltf" | "f3z" | "blend" | "stl", quality?: "Low" | "Medium" | "High" | "Thumb" | "Low_resolution" | "Medium_resolution" | "Full_resolution" | "Water_tight", owningUnit?: string, dracoCompressed?: boolean, gltfOrientationCompliant?: boolean, limit?: integer = 24, cursor?: string

The schema of each tool, as the server serves it

json
{
  "creature_status": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {},
    "additionalProperties": false
  },
  "creature_guide": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "section": {
        "type": "string",
        "enum": [
          "overview",
          "syntax",
          "low",
          "mid",
          "high",
          "delivery"
        ]
      }
    },
    "required": [
      "section"
    ],
    "additionalProperties": false
  },
  "asset_inspect_rig": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "target": {
        "anyOf": [
          {
            "type": "string",
            "minLength": 1,
            "maxLength": 4096
          },
          {
            "type": "object",
            "properties": {
              "sourceId": {
                "type": "string",
                "enum": [
                  "aether-02",
                  "aether-02-retopo"
                ],
                "description": "Explicitly acquire a pinned sample into the development cache."
              }
            },
            "required": [
              "sourceId"
            ]
          }
        ],
        "description": "Absolute path to the humanoid GLB under inspection, or a pinned sample reference to acquire into the development cache."
      },
      "libraries": {
        "description": "Optional local UAL ZIP archives or GLB libraries used as animation donors.",
        "maxItems": 8,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 4096
        }
      }
    },
    "required": [
      "target"
    ]
  },
  "asset_auto_rig": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "target": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Absolute path to an unrigged humanoid GLB."
      },
      "output": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Output .glb path under projectRoot."
      },
      "projectRoot": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Project root that must contain the output."
      },
      "weightMode": {
        "default": "smooth",
        "type": "string",
        "enum": [
          "smooth",
          "rigid"
        ]
      },
      "replaceRig": {
        "default": false,
        "type": "boolean"
      },
      "maxInfluences": {
        "type": "integer",
        "minimum": 1,
        "maximum": 4
      },
      "priorDigest": {
        "type": "string",
        "pattern": "^[0-9a-f]{64}$"
      },
      "overrides": {
        "type": "object",
        "propertyNames": {
          "type": "string",
          "maxLength": 64
        },
        "additionalProperties": {
          "type": "array",
          "prefixItems": [
            {
              "type": "number"
            },
            {
              "type": "number"
            },
            {
              "type": "number"
            }
          ]
        }
      },
      "orientation": {
        "type": "object",
        "properties": {
          "up": {
            "type": "string",
            "enum": [
              "x",
              "y",
              "z"
            ]
          },
          "arm": {
            "type": "string",
            "enum": [
              "x",
              "y",
              "z"
            ]
          },
          "facing": {
            "type": "string",
            "enum": [
              "x",
              "y",
              "z"
            ]
          },
          "facingSign": {
            "anyOf": [
              {
                "type": "number",
                "const": 1
              },
              {
                "type": "number",
                "const": -1
              }
            ]
          }
        }
      }
    },
    "required": [
      "target",
      "output",
      "projectRoot"
    ]
  },
  "asset_preview_animation": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "prepared": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Absolute path to a prepared (rigged or retargeted) GLB."
      },
      "output": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Output contact-sheet .png path under projectRoot."
      },
      "projectRoot": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Project root that must contain the output."
      },
      "clip": {
        "type": "string",
        "maxLength": 300
      },
      "times": {
        "minItems": 1,
        "maxItems": 12,
        "type": "array",
        "items": {
          "type": "number",
          "minimum": 0
        }
      },
      "pose": {
        "type": "object",
        "properties": {
          "bone": {
            "type": "string",
            "maxLength": 64
          },
          "axis": {
            "type": "string",
            "enum": [
              "x",
              "y",
              "z"
            ]
          },
          "degrees": {
            "type": "number",
            "minimum": -360,
            "maximum": 360
          }
        },
        "required": [
          "bone",
          "axis",
          "degrees"
        ]
      },
      "angles": {
        "default": 3,
        "type": "integer",
        "minimum": 2,
        "maximum": 6
      },
      "width": {
        "default": 384,
        "type": "integer",
        "minimum": 64,
        "maximum": 1024
      },
      "height": {
        "default": 384,
        "type": "integer",
        "minimum": 64,
        "maximum": 1024
      },
      "priorDigest": {
        "type": "string",
        "pattern": "^[0-9a-f]{64}$"
      }
    },
    "required": [
      "prepared",
      "output",
      "projectRoot"
    ]
  },
  "asset_retarget_animations": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "target": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Absolute path to the prepared target GLB (e.g. the AETHER sample)."
      },
      "output": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Output .glb path under projectRoot."
      },
      "projectRoot": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Project root that must contain the output."
      },
      "clips": {
        "minItems": 1,
        "maxItems": 24,
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1,
              "maxLength": 300,
              "description": "Pinned donor clip id, e.g. ual1/Walk_Loop."
            },
            "variant": {
              "type": "string",
              "enum": [
                "in_place",
                "root_motion"
              ],
              "description": "Which donor variant to retarget."
            }
          },
          "required": [
            "id",
            "variant"
          ]
        }
      },
      "keepExistingClips": {
        "default": true,
        "type": "boolean"
      },
      "mapping": {
        "type": "object",
        "propertyNames": {
          "type": "string",
          "maxLength": 64
        },
        "additionalProperties": {
          "type": "string",
          "maxLength": 64
        }
      },
      "priorDigest": {
        "type": "string",
        "pattern": "^[0-9a-f]{64}$"
      }
    },
    "required": [
      "target",
      "output",
      "projectRoot",
      "clips"
    ]
  },
  "fab_search_assets": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "priceMode": {
        "default": "free",
        "type": "string",
        "enum": [
          "free",
          "any",
          "range"
        ]
      },
      "minPrice": {
        "type": "number",
        "minimum": 0
      },
      "maxPrice": {
        "type": "number",
        "minimum": 0
      },
      "currency": {
        "type": "string",
        "pattern": "^[A-Za-z]{3}$"
      },
      "channels": {
        "maxItems": 20,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "listingTypes": {
        "maxItems": 20,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "categories": {
        "maxItems": 20,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "tags": {
        "maxItems": 20,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "licenses": {
        "maxItems": 20,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 100
        }
      },
      "publisher": {
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "minimumRating": {
        "anyOf": [
          {
            "type": "number",
            "const": 1
          },
          {
            "type": "number",
            "const": 2
          },
          {
            "type": "number",
            "const": 3
          },
          {
            "type": "number",
            "const": 4
          },
          {
            "type": "number",
            "const": 5
          }
        ]
      },
      "publishedSince": {
        "type": "string",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      },
      "aiGenerated": {
        "type": "boolean"
      },
      "allowsAiUse": {
        "type": "boolean"
      },
      "sort": {
        "default": "relevance",
        "type": "string",
        "enum": [
          "relevance",
          "rating",
          "newest",
          "oldest",
          "price_asc",
          "price_desc",
          "discount_desc",
          "recently_updated"
        ]
      },
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 24
      },
      "cursor": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2048
      }
    }
  },
  "fab_get_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "listingIdOrUrl": {
        "type": "string",
        "minLength": 1,
        "maxLength": 500
      },
      "currency": {
        "type": "string",
        "pattern": "^[A-Za-z]{3}$"
      }
    },
    "required": [
      "listingIdOrUrl"
    ]
  },
  "fab_list_filters": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "kinds": {
        "maxItems": 4,
        "type": "array",
        "items": {
          "type": "string",
          "enum": [
            "channels",
            "listing_types",
            "categories",
            "licenses"
          ]
        }
      },
      "refresh": {
        "default": false,
        "type": "boolean"
      }
    }
  },
  "fab_list_limited_time_free": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 24
      }
    }
  },
  "fab_download_free_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "listingIdOrUrl": {
        "type": "string",
        "minLength": 1,
        "maxLength": 500
      },
      "format": {
        "type": "string",
        "enum": [
          "blender",
          "fbx",
          "glb",
          "gltf",
          "maya",
          "obj",
          "unity"
        ]
      },
      "acceptFabEula": {
        "type": "boolean",
        "const": true,
        "description": "Required acknowledgement that the user accepts the Fab EULA linked by the listing."
      }
    },
    "required": [
      "listingIdOrUrl",
      "format",
      "acceptFabEula"
    ]
  },
  "fab_list_owned": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "description": "Case-insensitive substring of the title or category. Omit to list everything.",
        "type": "string",
        "minLength": 1,
        "maxLength": 200
      },
      "unrealOnly": {
        "default": false,
        "description": "Keep only what fab_import_asset can actually take: a listing UID plus a published Unreal artifact. Drops the engine installs and code plugins a library also contains.",
        "type": "boolean"
      }
    }
  },
  "asset_import_unreal": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "sourceDir": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "A local directory of Unreal .uasset/.umap files, for example an already downloaded Fab pack."
      },
      "outputDir": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Directory the source GLBs are written to, normally <game>/assets/fab/<listing-id>. It must not already hold a different import; this tool never overwrites one."
      },
      "packages": {
        "description": "Import only these package names, for example [\"SM_Rock\", \"DemoMap\"]. Omit to convert every supported mesh and level in the pack; a large marketplace pack is many gigabytes of GLBs.",
        "maxItems": 500,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "maxTextureSize": {
        "description": "Optional longest edge for embedded textures. Leave unset to keep Unreal's own resolution and let the ThreeNative asset compiler cap it.",
        "type": "integer",
        "minimum": 64,
        "maximum": 8192
      }
    },
    "required": [
      "sourceDir",
      "outputDir"
    ]
  },
  "fab_import_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "listingIdOrUrl": {
        "type": "string",
        "minLength": 1,
        "maxLength": 500
      },
      "outputDir": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096,
        "description": "Directory the source GLBs are written to, normally <game>/assets/fab/<listing-id>. It must not already hold a different import; this tool never overwrites one."
      },
      "packages": {
        "description": "Import only these package names, for example [\"SM_Rock\", \"DemoMap\"]. Omit to convert every supported mesh and level in the pack; a large marketplace pack is many gigabytes of GLBs.",
        "maxItems": 500,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "engine": {
        "description": "Unreal engine selector, for example UE_4.21. Required when the listing publishes several artifacts.",
        "type": "string",
        "pattern": "^UE_\\d+\\.\\d+$"
      },
      "maxTextureSize": {
        "description": "Optional longest edge for embedded textures. Leave unset to keep Unreal's own resolution and let the ThreeNative asset compiler cap it.",
        "type": "integer",
        "minimum": 64,
        "maximum": 8192
      },
      "platform": {
        "description": "Platform build to download when the artifact publishes several, for example Windows.",
        "type": "string",
        "pattern": "^[A-Za-z0-9_]{1,32}$"
      },
      "acceptFabEula": {
        "type": "boolean",
        "const": true,
        "description": "Required acknowledgement that the user accepts the Fab EULA for the listing they already own."
      }
    },
    "required": [
      "listingIdOrUrl",
      "outputDir",
      "acceptFabEula"
    ]
  },
  "polyhaven_search_assets": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "type": {
        "default": "all",
        "type": "string",
        "enum": [
          "all",
          "hdris",
          "textures",
          "models"
        ]
      },
      "categories": {
        "default": [],
        "maxItems": 20,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 200
        }
      },
      "sort": {
        "default": "relevance",
        "type": "string",
        "enum": [
          "relevance",
          "popular",
          "newest",
          "name"
        ]
      },
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    }
  },
  "polyhaven_get_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "assetId": {
        "type": "string",
        "maxLength": 200,
        "pattern": "^[A-Za-z0-9_-]+$"
      }
    },
    "required": [
      "assetId"
    ]
  },
  "polyhaven_list_categories": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "type": {
        "type": "string",
        "enum": [
          "hdris",
          "textures",
          "models"
        ]
      }
    },
    "required": [
      "type"
    ]
  },
  "polyhaven_list_files": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "assetId": {
        "type": "string",
        "maxLength": 200,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "resolution": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+k$"
      },
      "format": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "includeDependencies": {
        "default": true,
        "type": "boolean"
      },
      "limit": {
        "default": 100,
        "type": "integer",
        "minimum": 1,
        "maximum": 200
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    },
    "required": [
      "assetId"
    ]
  },
  "ambientcg_search_assets": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "type": {
        "type": "string",
        "enum": [
          "material",
          "hdri",
          "substance",
          "decal",
          "atlas",
          "3d-model",
          "plain-image",
          "brush",
          "terrain",
          "hdri-element"
        ]
      },
      "sort": {
        "default": "popular",
        "type": "string",
        "enum": [
          "popular",
          "latest",
          "downloads",
          "oldest",
          "random",
          "alphabet"
        ]
      },
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    }
  },
  "ambientcg_get_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "assetId": {
        "type": "string",
        "maxLength": 200,
        "pattern": "^[A-Za-z0-9_-]+$"
      }
    },
    "required": [
      "assetId"
    ]
  },
  "ambientcg_list_categories": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "type": {
        "type": "string",
        "enum": [
          "material",
          "hdri",
          "substance",
          "decal",
          "atlas",
          "3d-model",
          "plain-image",
          "brush",
          "terrain",
          "hdri-element"
        ]
      }
    }
  },
  "ambientcg_list_files": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "assetId": {
        "type": "string",
        "maxLength": 200,
        "pattern": "^[A-Za-z0-9_-]+$"
      },
      "attributes": {
        "type": "string",
        "maxLength": 100
      },
      "extension": {
        "type": "string",
        "maxLength": 20
      },
      "limit": {
        "default": 100,
        "type": "integer",
        "minimum": 1,
        "maximum": 200
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    },
    "required": [
      "assetId"
    ]
  },
  "smithsonian_search_assets": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "fileType": {
        "type": "string",
        "enum": [
          "jpg",
          "glb",
          "ply",
          "zip"
        ]
      },
      "modelType": {
        "type": "string",
        "enum": [
          "glb",
          "ply",
          "obj",
          "gltf",
          "f3z",
          "blend",
          "stl"
        ]
      },
      "quality": {
        "type": "string",
        "enum": [
          "Low",
          "Medium",
          "High",
          "Thumb",
          "Low_resolution",
          "Medium_resolution",
          "Full_resolution",
          "Water_tight"
        ]
      },
      "owningUnit": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^[A-Z]+$"
      },
      "dracoCompressed": {
        "type": "boolean"
      },
      "gltfOrientationCompliant": {
        "type": "boolean"
      },
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    }
  },
  "smithsonian_get_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "modelId": {
        "type": "string",
        "maxLength": 100,
        "pattern": "^(?:3d_package:)?[0-9a-f]{8}-[0-9a-f-]{27}$"
      }
    },
    "required": [
      "modelId"
    ]
  },
  "smithsonian_list_files": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "modelId": {
        "type": "string",
        "maxLength": 100,
        "pattern": "^(?:3d_package:)?[0-9a-f]{8}-[0-9a-f-]{27}$"
      },
      "fileType": {
        "type": "string",
        "enum": [
          "jpg",
          "glb",
          "ply",
          "zip"
        ]
      },
      "modelType": {
        "type": "string",
        "enum": [
          "glb",
          "ply",
          "obj",
          "gltf",
          "f3z",
          "blend",
          "stl"
        ]
      },
      "quality": {
        "type": "string",
        "enum": [
          "Low",
          "Medium",
          "High",
          "Thumb",
          "Low_resolution",
          "Medium_resolution",
          "Full_resolution",
          "Water_tight"
        ]
      },
      "limit": {
        "default": 100,
        "type": "integer",
        "minimum": 1,
        "maximum": 200
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    },
    "required": [
      "modelId"
    ]
  },
  "sketchfab_search_models": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "downloadable": {
        "default": true,
        "type": "boolean"
      },
      "animated": {
        "type": "boolean"
      },
      "staffPicked": {
        "type": "boolean"
      },
      "category": {
        "type": "string",
        "maxLength": 100,
        "pattern": "^[a-z0-9-]+$"
      },
      "licenses": {
        "maxItems": 10,
        "type": "array",
        "items": {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[a-z0-9-]+$"
        }
      },
      "sortBy": {
        "default": "relevance",
        "type": "string",
        "enum": [
          "relevance",
          "likeCount",
          "viewCount",
          "publishedAt"
        ]
      },
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      },
      "cursor": {
        "type": "string",
        "minLength": 1,
        "maxLength": 500
      }
    }
  },
  "sketchfab_get_model": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "modelId": {
        "type": "string",
        "pattern": "^[0-9a-f]{32}$"
      }
    },
    "required": [
      "modelId"
    ]
  },
  "sketchfab_list_categories": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {}
  },
  "sketchfab_get_downloads": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "modelId": {
        "type": "string",
        "pattern": "^[0-9a-f]{32}$"
      }
    },
    "required": [
      "modelId"
    ]
  },
  "audio_list_sources": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {}
  },
  "audio_search_assets": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "kind": {
        "default": "all",
        "type": "string",
        "enum": [
          "all",
          "sfx",
          "music",
          "mixed"
        ]
      },
      "source": {
        "default": "all",
        "anyOf": [
          {
            "type": "string",
            "const": "all"
          },
          {
            "type": "string",
            "enum": [
              "sonniss",
              "kenney",
              "tallbeard",
              "scott-buckley",
              "itch-io",
              "mixkit",
              "pixabay",
              "freesound",
              "opengameart",
              "abstraction"
            ]
          }
        ]
      },
      "limit": {
        "default": 24,
        "type": "integer",
        "minimum": 1,
        "maximum": 100
      },
      "cursor": {
        "type": "string",
        "maxLength": 10,
        "pattern": "^\\d+$"
      }
    }
  },
  "audio_download_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "assetId": {
        "type": "string",
        "maxLength": 200,
        "pattern": "^[a-z0-9-]+$"
      },
      "acceptLicense": {
        "type": "boolean",
        "const": true,
        "description": "Required acknowledgement that the caller reviewed and accepts the asset license returned by audio_search_assets."
      }
    },
    "required": [
      "assetId",
      "acceptLicense"
    ]
  },
  "audio_inspect_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "path": {
        "type": "string",
        "minLength": 1,
        "maxLength": 4096
      },
      "loop": {
        "type": "boolean",
        "description": "Required: it decides whether the loop seam is checked at all, and a default would silently skip it."
      },
      "expectedDurationSeconds": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 3600
      },
      "expectedPrompt": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2000
      },
      "alternativePrompts": {
        "minItems": 1,
        "maxItems": 5,
        "type": "array",
        "items": {
          "type": "string",
          "minLength": 1,
          "maxLength": 2000
        }
      },
      "emotion": {
        "type": "object",
        "properties": {
          "sourceDescription": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500,
            "description": "What is audibly happening, with no emotional adjective: 'ocean waves washing onto a beach'."
          },
          "targetMood": {
            "type": "string",
            "minLength": 1,
            "maxLength": 200
          },
          "alternativeMoods": {
            "minItems": 1,
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 200
            }
          }
        },
        "required": [
          "sourceDescription",
          "targetMood",
          "alternativeMoods"
        ],
        "additionalProperties": false
      },
      "bands": {
        "type": "object",
        "properties": {
          "sub": {
            "type": "object",
            "properties": {
              "min": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "max": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "additionalProperties": false
          },
          "low": {
            "type": "object",
            "properties": {
              "min": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "max": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "additionalProperties": false
          },
          "mid": {
            "type": "object",
            "properties": {
              "min": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "max": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "additionalProperties": false
          },
          "high": {
            "type": "object",
            "properties": {
              "min": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "max": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "additionalProperties": false
          },
          "air": {
            "type": "object",
            "properties": {
              "min": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              },
              "max": {
                "type": "number",
                "minimum": 0,
                "maximum": 100
              }
            },
            "additionalProperties": false
          }
        },
        "additionalProperties": false
      },
      "peakMax": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 10
      },
      "silenceRms": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 1
      },
      "seamMaxRatio": {
        "type": "number",
        "exclusiveMinimum": 0,
        "maximum": 1000
      },
      "semantic": {
        "default": "off",
        "type": "string",
        "enum": [
          "off",
          "clap"
        ]
      }
    },
    "required": [
      "path",
      "loop"
    ],
    "additionalProperties": false
  },
  "audio_generate_sound": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "requestId": {
        "type": "string",
        "format": "uuid",
        "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        "description": "A UUID you choose. Reusing it returns the saved result instead of generating and charging again."
      },
      "prompt": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2000
      },
      "durationSeconds": {
        "default": 5,
        "type": "number",
        "minimum": 0.5,
        "maximum": 30
      },
      "loop": {
        "default": false,
        "type": "boolean"
      },
      "promptInfluence": {
        "default": 0.3,
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "inspection": {
        "type": "object",
        "properties": {
          "expectedPrompt": {
            "type": "string",
            "minLength": 1,
            "maxLength": 2000
          },
          "alternativePrompts": {
            "minItems": 1,
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 2000
            }
          },
          "emotion": {
            "type": "object",
            "properties": {
              "sourceDescription": {
                "type": "string",
                "minLength": 1,
                "maxLength": 500,
                "description": "What is audibly happening, with no emotional adjective: 'ocean waves washing onto a beach'."
              },
              "targetMood": {
                "type": "string",
                "minLength": 1,
                "maxLength": 200
              },
              "alternativeMoods": {
                "minItems": 1,
                "maxItems": 5,
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1,
                  "maxLength": 200
                }
              }
            },
            "required": [
              "sourceDescription",
              "targetMood",
              "alternativeMoods"
            ],
            "additionalProperties": false
          },
          "bands": {
            "type": "object",
            "properties": {
              "sub": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "max": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "additionalProperties": false
              },
              "low": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "max": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "additionalProperties": false
              },
              "mid": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "max": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "additionalProperties": false
              },
              "high": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "max": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "additionalProperties": false
              },
              "air": {
                "type": "object",
                "properties": {
                  "min": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  },
                  "max": {
                    "type": "number",
                    "minimum": 0,
                    "maximum": 100
                  }
                },
                "additionalProperties": false
              }
            },
            "additionalProperties": false
          },
          "peakMax": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 10
          },
          "silenceRms": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 1
          },
          "seamMaxRatio": {
            "type": "number",
            "exclusiveMinimum": 0,
            "maximum": 1000
          },
          "semantic": {
            "default": "off",
            "type": "string",
            "enum": [
              "off",
              "clap"
            ]
          }
        },
        "additionalProperties": false
      }
    },
    "required": [
      "requestId",
      "prompt"
    ],
    "additionalProperties": false
  },
  "itch_list_downloads": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "packId": {
        "type": "string",
        "enum": [
          "tallbeard-music-loop-bundle",
          "quaternius-universal-animation-library-1",
          "quaternius-universal-animation-library-2",
          "brackeys-vfx-bundle",
          "kaykit-platformer"
        ]
      }
    },
    "required": [
      "packId"
    ]
  },
  "itch_download_asset": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "packId": {
        "type": "string",
        "enum": [
          "tallbeard-music-loop-bundle",
          "quaternius-universal-animation-library-1",
          "quaternius-universal-animation-library-2",
          "brackeys-vfx-bundle",
          "kaykit-platformer"
        ]
      },
      "uploadId": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^\\d+$"
      },
      "acceptLicense": {
        "type": "boolean",
        "const": true,
        "description": "Required acknowledgement that the caller accepts the CC0 terms and any pack-specific cautions returned by itch_list_downloads."
      }
    },
    "required": [
      "packId",
      "uploadId",
      "acceptLicense"
    ]
  },
  "asset_list_bundle_entries": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "packId": {
        "type": "string",
        "enum": [
          "tallbeard-music-loop-bundle",
          "quaternius-universal-animation-library-1",
          "quaternius-universal-animation-library-2",
          "brackeys-vfx-bundle",
          "kaykit-platformer"
        ]
      },
      "uploadId": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^\\d+$"
      }
    },
    "required": [
      "packId",
      "uploadId"
    ]
  },
  "asset_download_bundle_entry": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "packId": {
        "type": "string",
        "enum": [
          "tallbeard-music-loop-bundle",
          "quaternius-universal-animation-library-1",
          "quaternius-universal-animation-library-2",
          "brackeys-vfx-bundle",
          "kaykit-platformer"
        ]
      },
      "uploadId": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^\\d+$"
      },
      "entryPath": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2048
      },
      "acceptLicense": {
        "type": "boolean",
        "const": true,
        "description": "Required acknowledgement of the pack license returned by itch_list_downloads or asset_list_bundle_entries."
      }
    },
    "required": [
      "packId",
      "uploadId",
      "entryPath",
      "acceptLicense"
    ]
  },
  "asset_list_bundle_animations": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "packId": {
        "type": "string",
        "enum": [
          "tallbeard-music-loop-bundle",
          "quaternius-universal-animation-library-1",
          "quaternius-universal-animation-library-2",
          "brackeys-vfx-bundle",
          "kaykit-platformer"
        ]
      },
      "uploadId": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^\\d+$"
      },
      "entryPath": {
        "description": "Optional aggregate GLB path. Omit to select the standard non-root-motion GLB automatically.",
        "type": "string",
        "minLength": 1,
        "maxLength": 2048
      }
    },
    "required": [
      "packId",
      "uploadId"
    ]
  },
  "asset_download_bundle_animation": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "packId": {
        "type": "string",
        "enum": [
          "tallbeard-music-loop-bundle",
          "quaternius-universal-animation-library-1",
          "quaternius-universal-animation-library-2",
          "brackeys-vfx-bundle",
          "kaykit-platformer"
        ]
      },
      "uploadId": {
        "type": "string",
        "maxLength": 30,
        "pattern": "^\\d+$"
      },
      "entryPath": {
        "type": "string",
        "minLength": 1,
        "maxLength": 2048
      },
      "animationName": {
        "type": "string",
        "minLength": 1,
        "maxLength": 300
      },
      "acceptLicense": {
        "type": "boolean",
        "const": true
      }
    },
    "required": [
      "packId",
      "uploadId",
      "animationName",
      "acceptLicense"
    ]
  },
  "asset_list_sources": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "agentReadyOnly": {
        "default": true,
        "type": "boolean"
      }
    }
  },
  "asset_search_sources": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "query": {
        "type": "string",
        "maxLength": 200
      },
      "category": {
        "default": "all",
        "anyOf": [
          {
            "type": "string",
            "const": "all"
          },
          {
            "type": "string",
            "enum": [
              "3d-model",
              "animation",
              "texture",
              "hdri",
              "vfx",
              "2d",
              "ui",
              "icon",
              "font",
              "sfx",
              "music",
              "shader",
              "directory"
            ]
          }
        ]
      },
      "access": {
        "default": "all",
        "anyOf": [
          {
            "type": "string",
            "const": "all"
          },
          {
            "type": "string",
            "enum": [
              "mcp-api",
              "mcp-curated",
              "mcp-marketplace",
              "provider-page",
              "package-manager",
              "git"
            ]
          }
        ]
      },
      "license": {
        "default": "all",
        "anyOf": [
          {
            "type": "string",
            "const": "all"
          },
          {
            "type": "string",
            "enum": [
              "cc0",
              "cc-by",
              "mit",
              "open-source",
              "per-asset",
              "marketplace"
            ]
          }
        ]
      },
      "agentReadyOnly": {
        "default": true,
        "type": "boolean"
      }
    }
  },
  "asset_download_file": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "provider": {
        "type": "string",
        "enum": [
          "polyhaven",
          "ambientcg",
          "smithsonian",
          "game-icons",
          "kenney"
        ]
      },
      "url": {
        "type": "string",
        "maxLength": 4096,
        "format": "uri"
      },
      "fileName": {
        "type": "string",
        "minLength": 1,
        "maxLength": 220
      },
      "acceptLicense": {
        "type": "boolean",
        "const": true,
        "description": "Required acknowledgement that the caller reviewed and accepts the license metadata returned by the provider's search/detail/file tools."
      }
    },
    "required": [
      "provider",
      "url",
      "fileName",
      "acceptLicense"
    ]
  },
  "creature_compile": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "specPath": {
        "type": "string",
        "minLength": 1,
        "maxLength": 1000
      },
      "outputPath": {
        "type": "string",
        "minLength": 1,
        "maxLength": 1000
      },
      "expectedOutputSha256": {
        "type": "string",
        "pattern": "^[a-f0-9]{64}$"
      }
    },
    "required": [
      "specPath",
      "outputPath"
    ],
    "additionalProperties": false
  },
  "creature_preview": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "properties": {
      "glbPath": {
        "type": "string",
        "minLength": 1,
        "maxLength": 1000
      },
      "mode": {
        "type": "string",
        "enum": [
          "silhouettes",
          "hero"
        ]
      },
      "previousPreviewId": {
        "type": "string",
        "pattern": "^[a-z0-9-]{8,80}$"
      }
    },
    "required": [
      "glbPath",
      "mode"
    ],
    "additionalProperties": false
  },
  "creature_check": {
    "type": "object",
    "$schema": "https://json-schema.org/draft/2020-12/schema",
    "oneOf": [
      {
        "type": "object",
        "properties": {
          "glbPath": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "mode": {
            "type": "string",
            "const": "structural"
          }
        },
        "required": [
          "glbPath",
          "mode"
        ],
        "additionalProperties": false
      },
      {
        "type": "object",
        "properties": {
          "glbPath": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "mode": {
            "type": "string",
            "const": "claims"
          },
          "claimsPath": {
            "type": "string",
            "minLength": 1,
            "maxLength": 1000
          },
          "stage": {
            "type": "string",
            "enum": [
              "LOW",
              "MID",
              "HIGH"
            ]
          }
        },
        "required": [
          "glbPath",
          "mode",
          "claimsPath",
          "stage"
        ],
        "additionalProperties": false
      }
    ]
  }
}

threenative-blender

Version 0.1.4, 6 tools.

A status reply carries

  • available
  • detail
  • install
  • installCommand
  • minimumVersion
  • path
  • version

The loop the project's AGENTS.md teaches

  1. blender_status
  2. blender_inspect
  3. blender_convert
  4. blender_recipes
  5. blender_run_python

Every tool

  • blender_convert — Convert a model file to a GLB a ThreeNative game can load, preserving skeletons, animation clips, materials and textures. A conversion that produces no meshes fails rather than writing an empty GLB. Note that a game's build converts these files itself: use this to check a source before committing it, or to write a GLB somewhere else. — takes out: string, source: string
  • blender_export_world — Export a Blender-authored world as a ThreeNative world package v1: world.json, a raw uint16 heightmap, one GLB plus a decimated LOD1 per referenced scatter asset, per-cell chunk GLBs and placements.bin. Reads render-density instances so viewport share tricks never leak in; marks the terrain with tn_world_terrain, scatter sources with tn_asset_id and chunk collections with tn_world_chunk. — takes cell: number, out: string, source: string, spacing?: number
  • blender_inspect — Report what a model file contains without writing anything: mesh, triangle, vertex and bone counts, material names, animation clip names and image names. Accepts blend, dae, fbx, obj, .gltf and .glb. — takes source: string
  • blender_recipes — List the shipped bpy recipes, read one's full source text, or run one. Read before you write: a working recipe adapted into your game beats bpy written cold. Omit 'name' to list; pass 'name' alone to read; pass 'name' with 'arguments' to run. — takes arguments?: object, name?: string
  • blender_run_python — Run a bpy script of your own inside Blender, with a timeout, returning its result line, stderr and exit code. This is NOT a sandbox and does not claim to be: the script runs with your own privileges, exactly as it would if you invoked Blender through Bash yourself. What it adds is a resolved Blender, the same fail-closed handling every other tool here uses, and discoverability — not privilege. Read blender_recipes first; the shipped recipes are the worked examples. — takes arguments?: object, script: string, timeoutMs?: number
  • blender_status — Report whether this machine has a supported Blender, where it is and what version. Never fails: when Blender is absent it returns available:false with the install command for each platform.

The schema of each tool, as the server serves it

json
{
  "blender_status": {
    "additionalProperties": false,
    "properties": {},
    "type": "object"
  },
  "blender_inspect": {
    "additionalProperties": false,
    "properties": {
      "source": {
        "description": "Path to the model file to inspect.",
        "type": "string"
      }
    },
    "required": [
      "source"
    ],
    "type": "object"
  },
  "blender_convert": {
    "additionalProperties": false,
    "properties": {
      "out": {
        "description": "Path of the .glb to write.",
        "type": "string"
      },
      "source": {
        "description": "Path to the model file to convert.",
        "type": "string"
      }
    },
    "required": [
      "source",
      "out"
    ],
    "type": "object"
  },
  "blender_recipes": {
    "additionalProperties": false,
    "properties": {
      "arguments": {
        "description": "Recipe arguments. Present means run it; absent means return its source.",
        "type": "object"
      },
      "name": {
        "description": "Recipe name. Omit to list every recipe.",
        "type": "string"
      }
    },
    "type": "object"
  },
  "blender_export_world": {
    "additionalProperties": false,
    "properties": {
      "cell": {
        "description": "Cell edge length in metres.",
        "type": "number"
      },
      "out": {
        "description": "Directory to write the package into.",
        "type": "string"
      },
      "source": {
        "description": "Path to the .blend world to read.",
        "type": "string"
      },
      "spacing": {
        "description": "Heightmap sample spacing in metres. Default 2.",
        "type": "number"
      }
    },
    "required": [
      "source",
      "out",
      "cell"
    ],
    "type": "object"
  },
  "blender_run_python": {
    "additionalProperties": false,
    "properties": {
      "arguments": {
        "description": "The JSON request handed to the script after '--'.",
        "type": "object"
      },
      "script": {
        "description": "Path to the .py file to run inside Blender.",
        "type": "string"
      },
      "timeoutMs": {
        "description": "Kill the run after this many milliseconds.",
        "type": "number"
      }
    },
    "required": [
      "script"
    ],
    "type": "object"
  }
}

threenative-engine

Version 0.2.4, 2 tools.

Every tool

  • engine_capability_detail — Inspect one engine capability's import, signature, example, constraints, and overrides. When several packages export the symbol, every match is returned under matches. — takes importPath?: string, symbol: string
  • engine_search_capabilities — Search the installed engine by concrete gameplay mechanic. Decompose genres first. Use scope "request" for the mechanically explicit full request and "mechanic" for each focused search; matchedSituation and score explain every result. The response verdict "none" is an actionable answer with guidance, not a failed search. — takes scope?: "request" | "mechanic", situation: string

The schema of each tool, as the server serves it

json
{
  "engine_search_capabilities": {
    "additionalProperties": false,
    "properties": {
      "scope": {
        "description": "Use request for the complete cross-system game request; use mechanic or omit it for one mechanic.",
        "enum": [
          "request",
          "mechanic"
        ],
        "type": "string"
      },
      "situation": {
        "type": "string"
      }
    },
    "required": [
      "situation"
    ],
    "type": "object"
  },
  "engine_capability_detail": {
    "additionalProperties": false,
    "properties": {
      "importPath": {
        "description": "The search result's importPath; required when two packages export the same symbol.",
        "type": "string"
      },
      "symbol": {
        "type": "string"
      }
    },
    "required": [
      "symbol"
    ],
    "type": "object"
  }
}

threenative-sculpt

Version 0.1.1, 5 tools.

The loop the project's AGENTS.md teaches

  1. sculpt_plan
  2. sculpt_spec_gate
  3. sculpt_compare
  4. sculpt_pass_gate
  5. sculpt_grimoire

Every tool

  • sculpt_compare — Produce deterministic diagnostic evidence from an existing capture and reference, globally and per normalized region. Never launches a browser and never authorizes advancement. — takes referencePath: string, capturePath: string, regions?: array = []
  • sculpt_grimoire — Fetch a technique-safe grimoire page by topic. Unknown and concrete shader/material recipe topics fail and list valid topics. — takes topic: string
  • sculpt_pass_gate — Return advance, retry, or stop. Semantic review controls advancement; deterministic scores supply corrections, while an explicitly ambiguous comparison blocks advancement. — takes passId: "blockout" | "structural-pass" | "form-refinement" | "material-pass" | "surface-pass" | "lighting-pass" | "interaction-pass" | "optimization-pass", compareResult: object, semanticReview?: object, threshold?: number = 0.7, minimumConfidence?: number = 0.65, attempt?: integer = 1, maxAttempts?: integer = 3
  • sculpt_plan — Validate a reference image and return the locked eight-pass sculpt order plus relevant technique-safe grimoire resources. — takes referencePath: string, intent: string
  • sculpt_spec_gate — Validate the MCP runtime ObjectSculptSpec contract and canonical complexity depth thresholds before code is written. — takes spec: object

The schema of each tool, as the server serves it

json
{
  "sculpt_plan": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "referencePath": {
        "type": "string",
        "minLength": 1
      },
      "intent": {
        "type": "string",
        "minLength": 1,
        "maxLength": 500
      }
    },
    "required": [
      "referencePath",
      "intent"
    ]
  },
  "sculpt_spec_gate": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "spec": {
        "type": "object",
        "propertyNames": {
          "type": "string"
        },
        "additionalProperties": {}
      }
    },
    "required": [
      "spec"
    ]
  },
  "sculpt_compare": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "referencePath": {
        "type": "string",
        "minLength": 1
      },
      "capturePath": {
        "type": "string",
        "minLength": 1
      },
      "regions": {
        "default": [],
        "maxItems": 32,
        "type": "array",
        "items": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "minLength": 1
            },
            "x": {
              "type": "number",
              "minimum": 0,
              "maximum": 1
            },
            "y": {
              "type": "number",
              "minimum": 0,
              "maximum": 1
            },
            "width": {
              "type": "number",
              "exclusiveMinimum": 0,
              "maximum": 1
            },
            "height": {
              "type": "number",
              "exclusiveMinimum": 0,
              "maximum": 1
            }
          },
          "required": [
            "id",
            "x",
            "y",
            "width",
            "height"
          ]
        }
      }
    },
    "required": [
      "referencePath",
      "capturePath"
    ]
  },
  "sculpt_pass_gate": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "passId": {
        "type": "string",
        "enum": [
          "blockout",
          "structural-pass",
          "form-refinement",
          "material-pass",
          "surface-pass",
          "lighting-pass",
          "interaction-pass",
          "optimization-pass"
        ]
      },
      "compareResult": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "const": "evidence"
          },
          "authority": {
            "type": "string",
            "const": "diagnostic-only"
          },
          "referencePath": {
            "type": "string"
          },
          "capturePath": {
            "type": "string"
          },
          "dimensions": {
            "type": "object",
            "properties": {
              "reference": {
                "type": "object",
                "properties": {
                  "width": {
                    "type": "number"
                  },
                  "height": {
                    "type": "number"
                  }
                },
                "required": [
                  "width",
                  "height"
                ]
              },
              "capture": {
                "type": "object",
                "properties": {
                  "width": {
                    "type": "number"
                  },
                  "height": {
                    "type": "number"
                  }
                },
                "required": [
                  "width",
                  "height"
                ]
              },
              "normalizedForComparison": {
                "type": "object",
                "properties": {
                  "width": {
                    "type": "number"
                  },
                  "height": {
                    "type": "number"
                  }
                },
                "required": [
                  "width",
                  "height"
                ]
              }
            },
            "required": [
              "reference",
              "capture",
              "normalizedForComparison"
            ]
          },
          "overall": {
            "type": "object",
            "properties": {
              "score": {
                "type": "number"
              },
              "confidence": {
                "type": "number"
              }
            },
            "required": [
              "score",
              "confidence"
            ]
          },
          "regions": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string"
                },
                "pixels": {
                  "type": "number"
                },
                "score": {
                  "type": "number"
                },
                "confidence": {
                  "type": "number"
                },
                "signals": {
                  "type": "object",
                  "properties": {
                    "structuralSimilarity": {
                      "type": "number"
                    },
                    "perceptualHashSimilarity": {
                      "type": "number"
                    },
                    "colorSimilarity": {
                      "type": "number"
                    },
                    "deltaE00": {
                      "type": "number"
                    }
                  },
                  "required": [
                    "structuralSimilarity",
                    "perceptualHashSimilarity",
                    "colorSimilarity",
                    "deltaE00"
                  ]
                },
                "corrections": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              },
              "required": [
                "id",
                "pixels",
                "score",
                "confidence",
                "signals",
                "corrections"
              ]
            }
          },
          "ambiguous": {
            "type": "boolean"
          },
          "notes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "status",
          "authority",
          "referencePath",
          "capturePath",
          "dimensions",
          "overall",
          "regions",
          "ambiguous",
          "notes"
        ]
      },
      "semanticReview": {
        "type": "object",
        "properties": {
          "score": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "confidence": {
            "type": "number",
            "minimum": 0,
            "maximum": 1
          },
          "notes": {
            "type": "string",
            "minLength": 1
          },
          "criticalFeatures": {
            "maxItems": 5,
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "minLength": 1
                },
                "score": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "threshold": {
                  "type": "number",
                  "minimum": 0,
                  "maximum": 1
                },
                "critical": {
                  "type": "boolean"
                }
              },
              "required": [
                "id",
                "score",
                "threshold",
                "critical"
              ]
            }
          }
        },
        "required": [
          "score",
          "confidence",
          "notes",
          "criticalFeatures"
        ]
      },
      "threshold": {
        "default": 0.7,
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "minimumConfidence": {
        "default": 0.65,
        "type": "number",
        "minimum": 0,
        "maximum": 1
      },
      "attempt": {
        "default": 1,
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      },
      "maxAttempts": {
        "default": 3,
        "type": "integer",
        "exclusiveMinimum": 0,
        "maximum": 9007199254740991
      }
    },
    "required": [
      "passId",
      "compareResult"
    ]
  },
  "sculpt_grimoire": {
    "$schema": "http://json-schema.org/draft-07/schema#",
    "type": "object",
    "properties": {
      "topic": {
        "type": "string",
        "minLength": 1
      }
    },
    "required": [
      "topic"
    ]
  }
}
View source on GitHub ↗