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
ambientcg_list_filesambientcg_search_assetsasset_download_fileasset_search_sourcesaudio_download_assetaudio_search_assetspolyhaven_list_filespolyhaven_search_assetsasset_inspect_rigasset_auto_rigasset_retarget_animationsasset_preview_animation
Every tool
ambientcg_get_asset— Get normalized metadata and CC0 licensing for one ambientCG asset. — takesassetId: stringambientcg_list_categories— List ambientCG category metadata and asset counts. — takestype?: "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. — takesassetId: string,attributes?: string,extension?: string,limit?: integer = 100,cursor?: stringambientcg_search_assets— Search CC0 materials, HDRIs, models, decals, atlases, brushes, terrains, and other ambientCG assets. — takesquery?: 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?: stringasset_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. — takestarget: string,output: string,projectRoot: string,weightMode?: "smooth" | "rigid" = "smooth",replaceRig?: boolean = false,maxInfluences?: integer,priorDigest?: string,overrides?: object,orientation?: objectasset_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. — takespackId: "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: booleanasset_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/.gltfentry also reportssizeMeters, 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. — takespackId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer",uploadId: string,entryPath: string,acceptLicense: booleanasset_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. — takesprovider: "polyhaven" | "ambientcg" | "smithsonian" | "game-icons" | "kenney",url: string,fileName: string,acceptLicense: booleanasset_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 reportssizeMeters, 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. — takessourceDir: string,outputDir: string,packages?: array,maxTextureSize?: integerasset_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. — takestarget: any,libraries?: arrayasset_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. — takespackId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer",uploadId: string,entryPath?: stringasset_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. — takespackId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer",uploadId: stringasset_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. — takesagentReadyOnly?: boolean = trueasset_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. — takesprepared: string,output: string,projectRoot: string,clip?: string,times?: array,pose?: object,angles?: integer = 3,width?: integer = 384,height?: integer = 384,priorDigest?: stringasset_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. — takestarget: string,output: string,projectRoot: string,clips: array,keepExistingClips?: boolean = true,mapping?: object,priorDigest?: stringasset_search_sources— Search agent-ready asset sources by category, license, access mode, or text query. Manual/provider-page sources are excluded unless agentReadyOnly=false. — takesquery?: string,category?: any = "all",access?: any = "all",license?: any = "all",agentReadyOnly?: boolean = trueaudio_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. — takesassetId: string,acceptLicense: booleanaudio_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. — takesrequestId: string,prompt: string,durationSeconds?: number = 5,loop?: boolean = false,promptInfluence?: number = 0.3,inspection?: objectaudio_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. — takespath: 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. — takesquery?: string,kind?: "all" | "sfx" | "music" | "mixed" = "all",source?: any = "all",limit?: integer = 24,cursor?: stringcreature_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. — takesspecPath: string,outputPath: string,expectedOutputSha256?: stringcreature_guide— Read a bounded syntax or workflow section from the verified anyCreature 1.3.1 payload. This does not run or extract the compiler. — takessection: "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. — takesglbPath: string,mode: "silhouettes" | "hero",previousPreviewId?: stringcreature_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 reportssizeMeters, 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. — takeslistingIdOrUrl: string,format: "blender" | "fbx" | "glb" | "gltf" | "maya" | "obj" | "unity",acceptFabEula: booleanfab_get_asset— Get normalized public details and per-license prices for one Fab listing. — takeslistingIdOrUrl: string,currency?: stringfab_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 reportssizeMeters, 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. — takeslistingIdOrUrl: string,outputDir: string,packages?: array,engine?: string,maxTextureSize?: integer,platform?: string,acceptFabEula: booleanfab_list_filters— List usable public Fab filter labels and slugs. A warning identifies versioned fallback or stale values. — takeskinds?: array,refresh?: boolean = falsefab_list_limited_time_free— List Fab's dedicated curated limited-time-free promotions separately from general free search. — takeslimit?: integer = 24fab_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. — takesquery?: string,unrealOnly?: boolean = falsefab_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. — takesquery?: 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?: stringitch_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. — takespackId: "tallbeard-music-loop-bundle" | "quaternius-universal-animation-library-1" | "quaternius-universal-animation-library-2" | "brackeys-vfx-bundle" | "kaykit-platformer",uploadId: string,acceptLicense: booleanitch_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. — takespackId: "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. — takesassetId: stringpolyhaven_list_categories— List Poly Haven category labels and asset counts for HDRIs, textures, or models. — takestype: "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. — takesassetId: string,resolution?: string,format?: string,includeDependencies?: boolean = true,limit?: integer = 100,cursor?: stringpolyhaven_search_assets— Search CC0 HDRIs, textures, and models from Poly Haven. Results include explicit Poly Haven attribution. — takesquery?: string,type?: "all" | "hdris" | "textures" | "models" = "all",categories?: array = [],sort?: "relevance" | "popular" | "newest" | "name" = "relevance",limit?: integer = 24,cursor?: stringsketchfab_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. — takesmodelId: stringsketchfab_get_model— Get public metadata and explicit Creative Commons requirements for one Sketchfab model. — takesmodelId: stringsketchfab_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. — takesquery?: string,downloadable?: boolean = true,animated?: boolean,staffPicked?: boolean,category?: string,licenses?: array,sortBy?: "relevance" | "likeCount" | "viewCount" | "publishedAt" = "relevance",limit?: integer = 24,cursor?: stringsmithsonian_get_asset— Get a normalized summary of one Smithsonian Open Access 3D model. — takesmodelId: stringsmithsonian_list_files— List direct Smithsonian Open Access files with format, quality, compression, and orientation metadata. — takesmodelId: 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?: stringsmithsonian_search_assets— Search Smithsonian Open Access 3D models and file variants by text, type, quality, and owning unit. — takesquery?: 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
{
"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
availabledetailinstallinstallCommandminimumVersionpathversion
The loop the project's AGENTS.md teaches
blender_statusblender_inspectblender_convertblender_recipesblender_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. — takesout: string,source: stringblender_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. — takescell: number,out: string,source: string,spacing?: numberblender_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. — takessource: stringblender_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. — takesarguments?: object,name?: stringblender_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. — takesarguments?: object,script: string,timeoutMs?: numberblender_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
{
"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 undermatches. — takesimportPath?: string,symbol: stringengine_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. — takesscope?: "request" | "mechanic",situation: string
The schema of each tool, as the server serves it
{
"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
sculpt_plansculpt_spec_gatesculpt_comparesculpt_pass_gatesculpt_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. — takesreferencePath: 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. — takestopic: stringsculpt_pass_gate— Return advance, retry, or stop. Semantic review controls advancement; deterministic scores supply corrections, while an explicitly ambiguous comparison blocks advancement. — takespassId: "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 = 3sculpt_plan— Validate a reference image and return the locked eight-pass sculpt order plus relevant technique-safe grimoire resources. — takesreferencePath: string,intent: stringsculpt_spec_gate— Validate the MCP runtime ObjectSculptSpec contract and canonical complexity depth thresholds before code is written. — takesspec: object
The schema of each tool, as the server serves it
{
"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"
]
}
}