Skip to main content
Glama
jonit-dev
by jonit-dev

threenative-asset-mcp

A Model Context Protocol server for finding 3D assets across Fab, Poly Haven, ambientCG, Smithsonian 3D, Sketchfab, and a curated game-audio catalog spanning Sonniss, Kenney, Tallbeard, Scott Buckley, itch.io, Mixkit, Pixabay, Freesound, OpenGameArt, and Abstraction. It gives AI clients provider-scoped, structured search, asset metadata, category/filter discovery, downloadable file data, and guarded Fab downloads for directly available free files.

The audio tools separate source discovery from verified direct downloads. All ten sources are described with license caveats and official browse pages; only packs with stable official URLs and known license metadata appear in the direct-download catalog. The initial downloadable set is Kenney Interface Sounds, Kenney Music Jingles, and all five Sonniss GDC 2026 archives.

fab_search_assets defaults to free assets. This means Fab reported at least one free or effectively free license; it does not imply every license tier is free. Use fab_get_asset before making license or price claims.

Poly Haven results are CC0 and explicitly labelled Powered by Poly Haven. polyhaven_list_files exposes official download URLs, hashes, sizes, and dependency relationships with pagination and resolution/format filters.

Status: experimental. Fab's /i/* JSON routes are undocumented and can change or restrict automated access. Poly Haven provides a documented public API, but clients must send a unique User-Agent and visibly credit Poly Haven. Sketchfab licenses vary per model and download URLs require a user API token. Review each provider's terms and each asset's license.

Requirements

  • Node.js 20.19 or newer

  • A local environment capable of running Playwright Chromium when Fab requests browser verification

  • No Epic or Fab login is required or automated

Related MCP server: envato-mcp

Install

An MCP host can launch the published package with:

npx -y threenative-asset-mcp

For a local checkout:

npm ci
npm run browser:install
npm run typecheck
npm test
npm run build
node dist/index.js

Playwright does not download Chromium as part of a normal package install. Run npx -p playwright@1.62.0 playwright install chromium once on the MCP host before relying on the browser fallback.

MCP host configuration

Codex

Add this to ~/.codex/config.toml:

[mcp_servers.assets]
command = "npx"
args = ["-y", "threenative-asset-mcp"]

For a local build:

[mcp_servers.assets]
command = "node"
args = ["/absolute/path/to/threenative-asset-mcp/dist/index.js"]

Claude Desktop

Add a server entry to the Claude Desktop configuration:

{
  "mcpServers": {
    "assets": {
      "command": "npx",
      "args": ["-y", "threenative-asset-mcp"]
    }
  }
}

VS Code

Create .vscode/mcp.json:

{
  "servers": {
    "assets": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "threenative-asset-mcp"]
    }
  }
}

Restart the MCP host after changing its configuration.

MCP tools

Fab:

  • fab_search_assets — searches public listings. priceMode defaults to free; use any or range explicitly for paid results.

  • fab_get_asset — returns normalized public listing details and per-license effective prices.

  • fab_list_filters — returns known public filter labels and slugs, including an explicit warning when the versioned fallback is used.

  • fab_list_limited_time_free — reads only a separately verified curated promotion surface. In production it extracts canonical listing UUIDs from Fab's public /limited-time-free page through the dedicated browser, then resolves them through the normal detail client; it never substitutes general is_free=1 search.

  • fab_download_free_asset — downloads one directly available free file into the dedicated download directory after explicit Fab EULA acknowledgement. It refuses purchase, acquisition, library-only, ambiguous, and unsafe-path flows.

  • asset_import_unreal — converts an already-downloaded Unreal directory to self-contained GLBs plus import-report.json; Unreal Engine is not required.

  • fab_import_asset — downloads an owned listing through the user's existing FabCLI session, then runs the same Unreal importer. It never signs in, claims, or purchases an asset.

Poly Haven:

  • polyhaven_search_assets — searches HDRIs, textures, and models by text, type, and category, with relevance/popularity/date/name sorting and cursor pagination.

  • polyhaven_get_asset — returns normalized metadata, attributes, authors, dimensions, resolution, and CC0 licensing for one asset.

  • polyhaven_list_categories — returns category labels and counts for one asset type.

  • polyhaven_list_files — returns the official file URLs, sizes, MD5 hashes, and dependency relationships. Use resolution and format to select usable variants; follow nextCursor until absent to retrieve every matching file.

ambientCG:

  • ambientcg_search_assets — searches CC0 materials, HDRIs, substances, decals, atlases, 3D models, images, brushes, terrains, and HDRI elements.

  • ambientcg_get_asset — returns metadata, maps, technique, dimensions, statistics, and CC0 licensing.

  • ambientcg_list_categories — lists typed categories and asset counts.

  • ambientcg_list_files — returns official archives with variant attributes, extensions, URLs, and byte sizes.

Smithsonian 3D:

  • smithsonian_search_assets — searches Open Access models by text, format, quality, owning unit, Draco compression, and glTF orientation compliance.

  • smithsonian_get_asset — groups the file-centric API response into one model summary.

  • smithsonian_list_files — returns direct model files with format, quality, compression, and orientation metadata.

Sketchfab:

  • sketchfab_search_models — anonymously searches public models, defaulting to downloadable results, and preserves author, geometry, archive, and license metadata.

  • sketchfab_get_model — returns public detail and explicit Creative Commons requirements.

  • sketchfab_list_categories — lists public category names and slugs.

  • sketchfab_get_downloads — uses SKETCHFAB_API_TOKEN to retrieve temporary download URLs. It never stores the token or returns it in tool output.

Game audio:

  • audio_list_sources — lists the ten supported audio libraries, best uses, official browse pages, license/attribution cautions, and honest download capability (curated-direct or provider-page).

  • audio_search_assets — searches only the curated packs with stable official direct URLs. Results preserve license, commercial-use, attribution, source, size (when known), and redistribution metadata.

  • audio_download_asset — downloads a catalog asset by ID after acceptLicense: true. It uses an HTTPS host allowlist, validates every redirect, streams with a byte cap, writes atomically without overwrite, and returns the local path, byte size, and SHA-256.

Curated itch.io packs:

  • itch_list_downloads — resolves a fresh no-account download page and lists upload IDs, filenames, sizes, CC0 terms, and pack-specific cautions without exposing the signed page token.

  • itch_download_asset — resolves a fresh 60-second signed file URL and streams the selected upload into guarded storage after acceptLicense: true. Signed URLs are not returned. The initial catalog covers Tallbeard Music Loop Bundle, Quaternius Universal Animation Libraries 1 and 2, Brackeys VFX Bundle, and KayKit Platformer.

  • asset_list_bundle_entries — reads the remote ZIP directory with HTTP byte ranges and returns individual paths and sizes without downloading the archive.

  • asset_download_bundle_entry — range-fetches and extracts one selected file, caches it with a SHA-256 sidecar, and never downloads unrelated bundle files.

  • asset_list_bundle_animations — range-fetches only an aggregate GLB and lists its named animation clips. For Quaternius, it automatically prefers the standard non-root-motion GLB.

  • asset_download_bundle_animation — exports one named animation as a valid animation-only GLB, removing unrelated clips, meshes, materials, and textures. The cached aggregate GLB is reused across requests.

Unified source and download routing:

  • asset_list_sources — returns only agent-ready sources by default across 3D, textures, HDRIs, animations, VFX, 2D, UI, icons, fonts, and audio. An agent-ready source has an MCP download tool and requires no manual browser, login, checkout, donation prompt, or paywall. Pass agentReadyOnly: false to inspect the broader research directory, including package-manager, Git, and provider-page sources that are not yet integrated.

  • asset_search_sources — filters that directory by text, category, access mode, and license tag (cc0, cc-by, mit, and others), while preserving the same agent-ready-only default.

  • asset_download_file — streams a direct URL previously returned by polyhaven_list_files, ambientcg_list_files, smithsonian_list_files, or the Game-icons.net bulk archive or Kenney Particle Pack entry into guarded local storage. Provider hosts and URL shapes are allowlisted, redirects are revalidated, existing files are never overwritten, and the result includes SHA-256.

Recommended agent flow:

  1. Call asset_search_sources with the requested category/query. Its default result set is guaranteed to contain only agent-ready sources.

  2. Call the returned searchTool or detailTool when present.

  3. Resolve variants with the returned filesTool.

  4. Call the returned downloadTool with acceptLicense: true.

  5. For aggregate Quaternius animation libraries, skip whole-pack download: itch_list_downloadsasset_list_bundle_animationsasset_download_bundle_animation.

This is intentionally a short MCP tool chain rather than a fake universal URL: each provider keeps its real search/variant semantics, while source routing and the no-manual-flow guarantee stay uniform.

All discovery tools are read-only. Download tools write only within their dedicated local directories and never purchase, add to cart or library, wishlist, sign in, or overwrite an existing download. Audio packs remain subject to their source license; raw redistribution is not implied by download.

Unreal import support

The importer writes the same GLB/report layout for cooked and uncooked inputs. It auto-provisions UE Viewer for package metadata, textures, and cooked render data. For uncooked UE4 editor meshes it also provisions the separate GPL-3.0+ unreal-assets-to-glb CLI in an isolated Python virtual environment and invokes it out of process. Modern UE5 packages rejected by UE Viewer use a pinned, out-of-process CUE4Parse adapter. Set THREENATIVE_TOOLCHAIN_AUTOINSTALL=0 to require manually installed tools instead.

Input

Current result

Cooked loose UE4 static meshes and textures

GLB geometry, LOD sections, embedded textures, and common PBR reconstruction

Cooked loose UE4 skeletal meshes and standalone animation packages

Standard skinned GLB; joints, weights, inverse-bind matrices, and existing clips are preserved; ActorX PSA clips are attached by case-insensitive bone name when at least 80% of tracks match, without duplicating an existing clip name

Uncooked UE4 FMeshDescription static meshes (object versions 517–522)

GLB geometry with centimetres converted to metres; verified on Fab Office Pack Vol.1 (47/47 meshes)

Standalone Texture2D packages

Collision-free source-relative PNGs under textures/; duplicate Unreal basenames are exported independently instead of overwriting one another

TextureCube environment maps

Collision-free 2:1 equirectangular PNG or lossless Radiance HDR files under cubemaps/; CUE4Parse decodes cooked faces, while editor TSF_BGRE8 source art retains its lighting range without Unreal Engine

Texture2DArray, TextureCubeArray, and VolumeTexture

Collision-free RGBA8 slice data plus JSON dimensions under textures3d/; use DataArrayTexture for arrays and Data3DTexture for volumes. Cube-array faces remain ordered in groups of six for custom shaders. Floating-point/HDR stacks are rejected rather than reduced to RGBA8

Standalone Material and MaterialInstanceConstant packages

One directly loadable Materials/UnrealMaterialLibrary.glb; each source-relative swatch name is collision-free, follows parent instances, embeds resolved texture inputs, and applies common base-color/emissive vectors plus roughness/metallic/opacity scalars

Standalone SoundWave packages

Collision-free WAV/Ogg/MP3/FLAC files under audio/; modern UE5 editor source WAVs and cooked formats exposed by CUE4Parse feed the same report path, verified through Three.js AudioLoader

Runtime Font and inline FontFace packages

Validated TTF/OTF faces under collision-free fonts/ paths; direct SFNT and legacy multi-block zlib FontBulkData are supported without Unreal Engine, with family/style/weight metadata for the browser FontFace API

Offline Font packages

Pre-baked glyph pages and serialized FontCharacter rectangles become collision-safe atlas PNGs plus BMFont-compatible JSON under bitmap-fonts/; Unicode remaps, baseline metrics, kerning, page indices, and distance-field metadata are retained for Three.js bitmap/SDF text

Paper2D PaperSprite and PaperFlipbook packages

Each sprite becomes a self-contained, unlit GLB with exact baked triangles and a cropped atlas region; flipbooks become JSON manifests preserving FPS and per-frame run lengths. Verified in Three.js on a real UE5.2 Paper2D project without Unreal Engine

Paper2D PaperTileSet and PaperTileMap packages

Populated layers become indexed, unlit GLB quads with atlas UVs, empty cells omitted, layer order retained, and packed horizontal/vertical/diagonal tile flips decoded. Placed tile maps and inherited Blueprint flipbook components are reconstructed in modern UE5 levels

Paper2D grouped sprites and TextRenderActor

Grouped sprite instances become EXT_mesh_gpu_instancing batches over shared sprite GLBs; text becomes unlit glyph geometry from offline UFont atlas pages, preserving alignment, colour, world size, and placement

DataTable, StringTable, CurveTable, and float/vector/colour curves

Collision-free, directly fetchable JSON under data/; row names, typed fields, localized strings, asset references, and rich-curve keys/tangents are retained

Modern UE5 loose static meshes, skeletal meshes, Texture2D, Material, and .umap packages rejected by UE Viewer

CUE4Parse converts directly to the same output/report pipeline; verified with UE5.5 cooked static geometry, UE5 editor skeletal geometry, Oodle-compressed UE5.3 editor texture source art, and a UE5.2 Paper2D map. Cooked packages using unversioned properties require one matching .usmap file beside the imported tree

Separate roughness/metalness, solid palette maps, glass, and mirrors

Packed glTF PBR maps or explicit material fallbacks; extra graph inputs remain named sidecars

UE4 .umap placement, direct lights, and serialized Blueprint component templates (object versions 517–522)

Directly loadable scene GLB plus a transform/source manifest; repeated actors instance shared meshes; inherited mesh/light defaults are merged into placed instances; directional, point, and spot lights use KHR_lights_punctual

Standalone modern UE5 Blueprint prefabs

Serialized static/skeletal mesh and light component defaults become directly loadable scene GLBs; referenced meshes, transforms, skins, and bone hierarchies are retained, while bytecode is explicitly reported and never executed

UE4 ISM/HISM and painted static-mesh foliage placement

Bulk-serialized instance matrices become EXT_mesh_gpu_instancing, which Three.js GLTFLoader loads as GPU-instanced meshes

UE4 editor LandscapeComponent heightfields

Package-relative compressed BGRA8 heightmaps become indexed terrain meshes with decoded normals, component transforms, and original material names

ActorX per-frame bone scale, dynamic Blueprint bytecode/construction scripts, Paper Terrain/spline deformation, and Nanite-only data without a fallback mesh

Detected or reported honestly; scene-level omissions are listed in scenes[].omittedActors, and Blueprint bytecode is never executed by the importer

Arbitrary Unreal shader graphs

Common PBR inputs become standard glTF materials; graph inputs with no glTF counterpart remain named in the report instead of being silently discarded

Encrypted Pak/IoStore

Unsupported without user-supplied keys and archive extraction; never reported as a complete conversion

Automatic uncooked conversion needs Python 3 with venv and pip. A Linux source build fallback for UE Viewer additionally needs git, g++, perl, zlib, and SDL2 development headers. Unreal import currently runs on Linux and Windows; use the path overrides below for preinstalled executables.

Load a reconstructed level with the normal Three.js loader — no Unreal runtime or custom .uasset loader is involved:

new GLTFLoader().load("assets/fab/<listing>/Scenes/DemoMap.glb", ({ scene }) => {
  threeScene.add(scene);
});

Standalone materials use that same loader. Find a swatch by the report's materialAssets[].libraryName, then assign its standard Three.js material:

new GLTFLoader().load("assets/fab/<listing>/Materials/UnrealMaterialLibrary.glb", ({ scene }) => {
  const swatch = scene.getObjectByName(materialAsset.libraryName);
  targetMesh.material = swatch.material;
});

Sound waves use Three.js directly as well:

const buffer = await new THREE.AudioLoader().loadAsync(audioAsset.file);
sound.setBuffer(buffer);

Structured data is ordinary runtime JSON — no Unreal object loader is needed:

const table = await fetch(dataAsset.json).then((response) => response.json());
const defaultAmmo = table.Rows.Default;

Fonts can back Three.js canvas textures or text libraries that accept web fonts:

const face = new FontFace(font.family, `url(${font.file})`, {
  style: font.fontStyle,
  weight: String(font.weight),
});
await face.load();
document.fonts.add(face);
// Draw with this family on a canvas, then pass the canvas to THREE.CanvasTexture.

Paper2D flipbooks reference ordinary GLBs. Select a frame using the manifest's frameRun and framesPerSecond, then show its loaded scene:

const flipbook = await fetch(report.flipbooks[0].manifest).then((response) => response.json());
const frames = await Promise.all(flipbook.frames.map((frame) => loader.loadAsync(frame.glb)));
const tick = Math.floor(elapsedSeconds * flipbook.framesPerSecond) % flipbook.frameCount;
let end = 0;
frames.forEach(({ scene }, index) => {
  end += flipbook.frames[index].frameRun;
  scene.visible = tick < end && tick >= end - flipbook.frames[index].frameRun;
});

Cubemaps use the standard Three.js equirectangular environment path:

const loader = cubemapAsset.dynamicRange === "hdr" ? new RGBELoader() : new THREE.TextureLoader();
const environment = await loader.loadAsync(cubemapAsset.file);
environment.mapping = THREE.EquirectangularReflectionMapping;
threeScene.environment = environment;

Multidimensional textures use the report's explicit Three.js type:

const metadata = await fetch(textureStack.manifest).then((response) => response.json());
const bytes = new Uint8Array(await fetch(textureStack.data).then((response) => response.arrayBuffer()));
const texture = metadata.threeTexture === "Data3DTexture"
  ? new THREE.Data3DTexture(bytes, metadata.width, metadata.height, metadata.depth)
  : new THREE.DataArrayTexture(bytes, metadata.width, metadata.height, metadata.depth);
texture.format = THREE.RGBAFormat;
texture.type = THREE.UnsignedByteType;
texture.needsUpdate = true;

Installation-only Unreal BasicShapes/Plane references are generated locally when the asset pack does not contain that mesh. Rectangular area lights are preserved in scene metadata and approximated as punctual point lights because glTF's standard punctual-light extension has no area-light type.

Configuration

Variable

Default

Purpose

FAB_DIRECT_TIMEOUT_MS

20000

Direct JSON request timeout.

FAB_BROWSER_TIMEOUT_MS

30000

Dedicated browser request timeout.

FAB_BROWSER_MANUAL_TIMEOUT_MS

10000

Headed-mode grace period for visible verification.

FAB_BROWSER_HEADLESS

true

Set to 0 temporarily for manual verification.

FAB_BROWSER_PROFILE_DIR

OS state directory under threenative-asset-mcp/fab-browser-profile

MCP-owned Fab browser state.

FAB_DOWNLOAD_DIR

~/Downloads/threenative-asset-mcp/fab

Dedicated directory for Fab free-file downloads.

FAB_MAX_DOWNLOAD_BYTES

2147483648

Maximum accepted download size in bytes.

FAB_DOWNLOAD_TIMEOUT_MS

600000

Total timeout for one file download.

FAB_CURL_IMPERSONATE

auto-detected on PATH

curl-impersonate wrapper override; 0/off disables.

FAB_MIN_REQUEST_INTERVAL_MS

1000

Minimum spacing between direct upstream requests.

FAB_LOG_LEVEL

warn

debug, info, warn, or error.

FAB_LOG_QUERIES

false

Set to 1 only if query text may be written to logs.

SKETCHFAB_API_TOKEN

unset

User token for temporary Sketchfab download URLs.

AUDIO_DOWNLOAD_DIR

~/Downloads/threenative-asset-mcp/audio

Dedicated directory for curated audio downloads.

AUDIO_MAX_DOWNLOAD_BYTES

10737418240

Maximum accepted bytes per audio archive (10 GiB).

AUDIO_DOWNLOAD_TIMEOUT_MS

1800000

Total timeout for one audio download (30 minutes).

ASSET_DOWNLOAD_DIR

~/Downloads/threenative-asset-mcp/assets

Dedicated directory for direct provider downloads.

ASSET_MAX_DOWNLOAD_BYTES

10737418240

Maximum accepted bytes per provider file (10 GiB).

ASSET_DOWNLOAD_TIMEOUT_MS

1800000

Total timeout for one provider download (30 minutes).

THREENATIVE_TOOLCHAIN_AUTOINSTALL

1

Set to 0 to disable first-use external-tool installs.

THREENATIVE_TOOLCHAIN_DIR

OS cache under threenative-asset-mcp/toolchain

UE Viewer, FabCLI, and uncooked-converter cache.

THREENATIVE_UMODEL_PATH

auto-detected/provisioned

Absolute path to a UE Viewer executable override.

THREENATIVE_UNCOOKED_CONVERTER_PATH

auto-detected/provisioned

Absolute path to unreal-assets-to-glb.

THREENATIVE_FABCLI_PATH

auto-detected/provisioned

Absolute path to FabCLI; login remains user-controlled.

Direct requests are spaced at least FAB_MIN_REQUEST_INTERVAL_MS apart. Only HTTP 429, 502, 503, and 504 are retried, at most twice, with backoff and Retry-After support. Challenges, access denial, invalid input, missing listings, and schema drift are never retried by the transport; a curl-impersonate challenge response is additionally retried inside the impersonation wrapper with longer, jittered waits before the browser fallback is engaged.

Browser-fingerprint TLS (curl-impersonate)

Fab's /i/* JSON routes sit behind Cloudflare bot management that challenges Node's default TLS fingerprint — including plain fetch from this MCP and headless Chromium — while real browser fingerprints pass. When a curl-impersonate wrapper (for example curl_chrome146) is available on the host PATH, the server performs all anonymous JSON reads through it and no browser is needed for search, detail, or download resolution. Set FAB_CURL_IMPERSONATE=0 to force the old behavior (plain Node fetch plus the Playwright fallback), or point it at a specific wrapper binary.

Downloads of free files resolve entirely through the anonymous JSON contract when possible: listing detail → asset-formats/{format} file listing → download-info signed URL → guarded file write. The signed distribution URL is validated against an exact Epic distribution-host allowlist before use. Only when the direct path is challenged does the server fall back to the guarded browser click flow below.

Process-local cache TTLs are five minutes for search, fifteen minutes for listing details, six hours for taxonomy data, and ten minutes for promotions. The shared LRU is capped at 500 entries and is cleared on process exit.

Poly Haven API behavior

Poly Haven requests go only to https://api.polyhaven.com, with the required threenative-asset-mcp User-Agent. Asset lists are cached for 15 minutes and details, categories, and file trees are cached for up to one hour. Returned file URLs are accepted only from https://dl.polyhaven.org.

The live API is free for personal and commercial use, but use of the API requires a visible Poly Haven credit. The assets themselves are CC0. This MCP includes provider, license, and attribution fields so downstream clients can preserve that distinction. See the official API page and API documentation.

Other provider behavior

ambientCG uses its anonymous, read-only v3 API. Its files are CC0 and its API exposes searchable metadata, categories, and downloadable variants.

Smithsonian uses the anonymous Smithsonian 3D file-search API. Files exposed by that API are part of Smithsonian Open Access; the MCP retains direct source URLs and format/quality metadata.

Sketchfab public search, categories, and model detail do not require a token. The download endpoint requires a token belonging to the user, configured through SKETCHFAB_API_TOKEN. The token is sent only in the Sketchfab Authorization header, is never logged or persisted, and is not included in MCP responses. Sketchfab models use different Creative Commons licenses; always inspect license.requirements before use.

Audio direct downloads are catalog-ID based; the MCP does not accept arbitrary URLs. Official Kenney downloads are restricted to kenney.nl and Sonniss GDC downloads to downloads.sonniss.com, including redirect revalidation. Sources without a stable, verified direct contract remain discoverable as provider-page instead of being falsely presented as one-click downloads.

The generic direct downloader is intentionally narrower than an arbitrary URL fetcher. It accepts only official Poly Haven, ambientCG, Smithsonian, Game-icons.net, and curated Kenney URL contracts. The itch.io downloader uses fresh signed mirror URLs internally but never exposes them. Sketchfab signed downloads are exposed through sketchfab_get_downloads but are not persisted by the generic downloader because their temporary CDN hosts vary and require the user's token-backed session. Provider-page-only sources stay provider-page-only until a stable, license-safe download contract is verified.

Dedicated browser profile and privacy

When a direct anonymous request receives a Cloudflare challenge, the server may open Playwright Chromium with a dedicated MCP-owned profile. It never attaches to, copies, or reads the user's normal Chrome/Edge/Chromium profile, cookie database, local storage, passwords, or Epic session.

If the tool returns FAB_BROWSER_ATTENTION_REQUIRED, run the same MCP command once with FAB_BROWSER_HEADLESS=0. The MCP opens its dedicated Fab homepage at startup, so complete any visible verification before calling the tool. A tool call allows an additional FAB_BROWSER_MANUAL_TIMEOUT_MS grace period, then returns FAB_BROWSER_ATTENTION_REQUIRED rather than exceeding typical MCP client timeouts. Close the MCP process after verification and return to headless mode. The server does not solve or bypass challenges.

Browser process startup is capped at ten seconds. On a host without a working graphical session, headed mode returns FAB_UPSTREAM_UNAVAILABLE instead of hanging an MCP call; run the manual release gate on a graphical host.

To clear browser-owned Fab state, stop every threenative-asset-mcp process and move only the dedicated directory reported by your configuration out of service. The default on Linux can be cleared recoverably with:

mv -- "${XDG_STATE_HOME:-$HOME/.local/state}/threenative-asset-mcp/fab-browser-profile" \
  "${XDG_STATE_HOME:-$HOME/.local/state}/threenative-asset-mcp/fab-browser-profile.cleared"

Do not point FAB_BROWSER_PROFILE_DIR at a normal browser profile. The server rejects known normal-profile locations.

The MCP has no analytics or remote telemetry. Application logs are structured JSON written only to stderr; stdout is reserved for MCP JSON-RPC. Search query text is omitted from logs unless FAB_LOG_QUERIES=1. Raw upstream bodies, headers, cookies, tokens, stack traces, and browser profile paths are not logged or returned to the model.

Troubleshooting

FAB_CHALLENGE or FAB_BROWSER_ATTENTION_REQUIRED : Fab asked for browser verification. First check whether a curl-impersonate wrapper is installed (FAB_LOG_LEVEL=info logs fab_impersonate_enabled when active). Otherwise use the headed dedicated-profile step above. If verification continues to fail, stop; do not copy a signed-in browser session.

FAB_RATE_LIMITED : Wait for retryAfterSeconds when present. The MCP already applied its bounded retries.

FAB_UPSTREAM_CHANGED : Fab's undocumented response changed. Re-run the sanitized contract probe and update normalization and fixtures before continuing.

FAB_UPSTREAM_UNAVAILABLE : Fab is unavailable, or a currently unverified discovery contract was intentionally disabled.

The MCP host shows no tools : Build first, confirm the configured path is absolute, and run npm run inspect. Logs belong on stderr; any non-JSON stdout is a bug.

Verification

npm ci
npm run browser:install
npm run typecheck
npm test
npm run build
npm pack --dry-run
npm run inspect
npm run test:providers:live

Live checks are opt-in because they contact Fab:

npm run test:live

This runs the real anonymous search, cursor, detail, and dedicated-browser contract probe. It exits nonzero when Fab challenges the clean browser or the required contract cannot be verified. Live verification must remain anonymous, concurrency-one, capped and paced. It must never acquire, purchase, wishlist, download, or automatically solve a challenge.

npm run test:providers:live launches the compiled stdio MCP and exercises live search, detail, categories, and file discovery for ambientCG, Smithsonian 3D, and Sketchfab. If SKETCHFAB_API_TOKEN is configured it also verifies the authenticated download endpoint; otherwise it verifies the explicit authentication-required response.

Available Tools

41 tools
ambientcg_get_assetGet an ambientCG assetA
Read-onlyIdempotent

Get normalized metadata and CC0 licensing for one ambientCG asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
mapsYes
tagsYes
typeYes
titleYes
licenseYes
providerYes
techniqueNo
dimensionsNo
descriptionNo
releaseDateNo
thumbnailUrlNo
downloadCountNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds behavioral context by specifying that the output includes 'normalized metadata and CC0 licensing', which is useful beyond the annotations. No contradictions.

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

Conciseness5/5

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

The description is a single, focused sentence with no wasted words. It is front-loaded and immediately conveys the tool's purpose.

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

Completeness4/5

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

Given the presence of an output schema (not shown), the description does not need to detail return values. However, it could benefit from mentioning the scope of metadata fields or any required permissions, but is largely complete for a simple retrieval tool.

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

Parameters1/5

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

The input schema has 0% description coverage for its single parameter (assetId). The tool description does not explain what assetId represents, its format, or how to obtain a valid ID. This forces the agent to infer from context, which is inadequate.

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

Purpose5/5

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

The description clearly states the tool retrieves 'normalized metadata and CC0 licensing' for a single ambientCG asset. It uses a specific verb ('Get') and resource ('ambientCG asset'), and distinguishes from sibling search/list tools that operate on collections or different sources.

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

Usage Guidelines3/5

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

The description implies this tool is for fetching details of a specific asset, but does not explicitly state when to use it versus alternatives like search or list tools. No when-not guidance is provided.

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

ambientcg_list_categoriesList ambientCG categoriesB
Read-onlyIdempotent

List ambientCG category metadata and asset counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
providerYes
categoriesYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate readOnlyHint, openWorldHint, idempotentHint, destructiveHint. Description adds that it returns metadata and asset counts, which is useful, but lacks details on pagination, errors, or performance. Does not contradict annotations.

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

Conciseness5/5

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

Single sentence, front-loaded with verb and resource, no unnecessary words. Efficient and clear.

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

Completeness3/5

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

Output schema exists so return values are covered. However, the optional 'type' parameter is unexplained, and given siblings, more context on filtering would help. Tool is simple but description could be more informative.

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

Parameters2/5

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

Schema has one optional parameter 'type' with enum, but description does not mention it. With 0% schema description coverage, the description should compensate but fails to explain the parameter's purpose or usage.

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

Purpose5/5

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

Description clearly states the action ('list') and resource ('ambientCG category metadata and asset counts'). It differentiates from sibling tools like polyhaven_list_categories and sketchfab_list_categories by specifying 'ambientCG'.

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

Usage Guidelines2/5

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

No guidance on when to use this tool vs alternatives. Sibling tools offer similar list_categories functions for other sources, but description provides no context for selection or exclusions.

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

ambientcg_list_filesList ambientCG filesB
Read-onlyIdempotent

List official CC0 asset archives with variant attributes, extensions, URLs, and byte sizes.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
assetIdYes
extensionNo
attributesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
totalYes
licenseYes
providerYes
nextCursorNo

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint as false, indicating a safe read operation. The description adds context about output content (variant attributes, extensions, etc.) but does not reveal additional behavioral traits like pagination or rate limits.

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

Conciseness5/5

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

Single sentence with 12 words, no redundancy. Efficiently communicates the core purpose without extraneous text.

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

Completeness2/5

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

Despite having an output schema, the description is insufficient for a list tool with 5 parameters. It lacks details on pagination (cursor/limit), required assetId, filtering (extension, attributes), and when to use this tool over alternatives. The agent would struggle to invoke this correctly without additional documentation.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must compensate. It only hints at 'variant attributes' and 'extensions' but fails to explain the purpose or format of parameters like assetId, limit, cursor, extension, and attributes. This leaves the agent uninformed about how to effectively use the parameters.

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

Purpose5/5

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

The description clearly states it lists official CC0 asset archives and specifies the returned fields: variant attributes, extensions, URLs, and byte sizes. It distinguishes from sibling tools like ambientcg_search_assets and ambientcg_get_asset, which focus on searching or getting single assets.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus siblings (e.g., ambientcg_get_asset for single asset details, or polyhaven_list_files for Poly Haven files). No prerequisites, when-not-to-use, or alternative tool references.

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

ambientcg_search_assetsSearch ambientCG assetsC
Read-onlyIdempotent

Search CC0 materials, HDRIs, models, decals, atlases, brushes, terrains, and other ambientCG assets.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNopopular
typeNo
limitNo
queryNo
cursorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes
providerYes
nextCursorNo

TDQS

C2.7/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, so the safety profile is covered. However, the description adds no behavioral context such as rate limits, pagination behavior, or query syntax, leaving a gap beyond the structured metadata.

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

Conciseness3/5

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

The description is a single sentence that front-loads the tool's purpose reasonably. However, it is too sparse and could benefit from additional context without becoming verbose. It earns a baseline score for efficiency but lacks depth.

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

Completeness2/5

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

Given that there are five parameters with no schema description coverage and no parameter information in the description, the description is incomplete. An output schema exists, which lessens the need to describe return values, but behavioral aspects (e.g., sorting, pagination via cursor) are missing. The description should provide more context for a search tool of this complexity.

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

Parameters1/5

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

Schema description coverage is 0%, and the description provides no information about any of the five parameters (sort, type, limit, query, cursor). The description does not compensate for the lack of schema descriptions, making it difficult for an agent to understand parameter usage without inspecting the schema.

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

Purpose5/5

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

The description clearly states the verb 'Search', the resource 'CC0 materials, HDRIs, models, decals, atlases, brushes, terrains, and other ambientCG assets', and is specific enough to distinguish from sibling search tools for other sources (e.g., Poly Haven, Fab).

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus sibling search tools (e.g., polyhaven_search_assets, fab_search_assets). There is no mention of preferred use cases, exclusions, or context that would help an agent decide between alternatives.

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

asset_auto_rigAuto-rig an unrigged humanoidA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputYesOutput .glb path under projectRoot.
targetYesAbsolute path to an unrigged humanoid GLB.
overridesNo
replaceRigNo
weightModeNosmooth
orientationNo
priorDigestNo
projectRootYesProject root that must contain the output.
maxInfluencesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
bytesYes
jointsYes
outputYes
sha256Yes
statusYes
targetYes
measureYes
replacedYes
landmarksYes
weightModeYes
ambiguitiesYes
diagnosticsYes
orientationYes
maxInfluencesYes
alreadyExistedYes
skinnedVerticesYes
maxNormalizationErrorYes

TDQS

A4.2/5.0
Behavior5/5

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

The description adds significant behavioral detail beyond the annotations: it preserves existing rigs unless replaceRig is set, and it returns a landmark correction request on ambiguous anatomy instead of producing a bad rig. These are exactly the kind of behavioral traits an agent needs and that annotations do not provide.

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

Conciseness5/5

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

The description is two dense sentences with no filler. The core operation and the two most important behavioral caveats are front-loaded, and every phrase adds useful information.

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

Completeness2/5

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

This is a complex 9-parameter tool with nested objects, yet the description omits semantics for several optional parameters such as overrides, orientation, priorDigest, and maxInfluences. An output schema exists, so return format is covered, but for a tool this complex the description should provide more guidance on the remaining inputs.

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

Parameters3/5

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

With only 33% schema description coverage, the description must compensate, and it does partially: it clarifies weightMode (smooth/rigid), replaceRig, target/output/projectRoot relationships. However, it leaves overrides, orientation, priorDigest, and maxInfluences semantically unexplained, so an agent would still have to infer their meaning from the schema.

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

Purpose5/5

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

The description names a specific operation: fit an 18-joint humanoid skeleton to an unrigged local GLB, bind weights, and publish the skinned GLB. This clearly distinguishes it from sibling tools like asset_inspect_rig or asset_retarget_animations by focusing on auto-rigging unrigged assets.

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

Usage Guidelines4/5

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

It clearly says the input must be an unrigged humanoid GLB and explains that an existing rig is preserved unless replaceRig is set, giving a concrete when-to-use/when-not-to-use condition. It does not explicitly name sibling alternatives, but the use case is unambiguous enough for selection.

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

asset_download_bundle_animationDownload one animation from a bundled GLBA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYes
uploadIdYes
entryPathNo
acceptLicenseYes
animationNameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
packIdYes
sha256Yes
licenseYes
uploadIdYes
entryPathYes
sizeBytesYes
animationNameYes
alreadyExistedYes
aggregateEntryBytesYes
attributionRequiredYes
rangeBytesTransferredYes
aggregateAlreadyCachedYes

TDQS

A3.7/5.0
Behavior4/5

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

Annotations provide idempotent and non-destructive hints. The description adds context on behavior: removes unrelated clips/meshes/materials/textures, reuses cached source entries, and uses range-fetching. These details go beyond annotations.

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

Conciseness4/5

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

Single sentence that is concise and front-loads the action. However, the phrasing is technical ('range-fetching', 'aggregate source entry') which may reduce clarity.

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

Completeness3/5

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

Given the tool has 5 parameters and an output schema, the description covers the core function but omits prerequisites (e.g., listing animations first) and does not describe the output beyond 'standalone GLB'. Adequate but incomplete for a complex tool.

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

Parameters2/5

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

Schema coverage is 0% (no parameter descriptions), so the description must compensate. It only mentions 'one named animation' but does not explain the required parameters (packId, uploadId, animationName, acceptLicense) or the optional entryPath. The agent must infer mappings from the schema alone.

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

Purpose5/5

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

The description clearly states it exports one named animation as a standalone GLB from a bundled source. Specific verb 'export' and resource 'animation' distinguish it from sibling tools like asset_download_bundle_entry (downloads full entry) and asset_list_bundle_animations (lists animations).

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

Usage Guidelines3/5

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

The description implies usage after listing animations ('one named animation') but does not explicitly state when to use vs. alternatives like asset_download_bundle_entry. No exclusions or contexts are provided.

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

asset_download_bundle_entryDownload one file from a remote asset bundleA
Idempotent

Extract one selected ZIP entry through HTTP byte ranges, cache it locally, and avoid downloading unrelated bundle contents. Requires explicit license acknowledgement.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYes
uploadIdYes
entryPathYes
acceptLicenseYesRequired acknowledgement of the pack license returned by itch_list_downloads or asset_list_bundle_entries.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
packIdYes
sha256Yes
licenseYes
uploadIdYes
entryPathYes
sizeBytesYes
alreadyCachedYes
attributionRequiredYes
rangeBytesTransferredYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate idempotency and non-destructiveness. The description adds behavioral details: extraction via HTTP byte ranges, local caching, and avoidance of downloading unrelated contents. It also notes the license requirement, providing context beyond annotations.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary action. Every sentence adds value without redundancy or fluff.

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

Completeness4/5

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

Given the tool has an output schema (so return values are covered), the description sufficiently explains the core operation and key prerequisite. It could explicitly mention the relationship to sibling tools, but overall it is complete enough for typical usage.

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

Parameters2/5

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

Schema description coverage is only 25% (only acceptLicense has a description). The description does not explain packId, uploadId, or entryPath meanings beyond what the schema provides. It fails to compensate for the low coverage, leaving parameter semantics unclear.

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

Purpose5/5

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

The description clearly states the tool extracts one selected ZIP entry from a remote asset bundle using HTTP byte ranges, caches it locally, and avoids downloading unrelated contents. This distinctively differentiates it from sibling tools like asset_list_bundle_entries (listing) and asset_download_bundle_animation (animation download).

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

Usage Guidelines4/5

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

The description mentions 'Requires explicit license acknowledgement', indicating a prerequisite for use. It implies usage after listing bundle entries, but does not explicitly state when not to use or provide alternatives. The context is clear but lacks exclusions.

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

asset_download_fileDownload a direct provider asset fileA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
fileNameYes
providerYes
acceptLicenseYesRequired acknowledgement that the caller reviewed and accepts the license metadata returned by the provider's search/detail/file tools.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
sha256Yes
fileNameYes
providerYes
sizeBytesYes
sourceUrlYes
alreadyExistedYes
licenseAcknowledgedYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations show mutability (readOnlyHint=false) and idempotency (idempotentHint=true). Description adds critical details: allowlisted hosts, redirect revalidation, byte cap, and no overwrite policy. No contradiction.

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

Conciseness5/5

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

Two sentences totaling ~70 words, front-loaded with core action and constraints. Every sentence adds value without redundancy.

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

Completeness4/5

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

Covers provider scope, license requirement, security measures (allowlist, revalidation, byte cap), and idempotency (no overwrite). Return details are omitted but output schema exists, so complete enough for correct invocation.

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

Parameters3/5

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

Schema coverage is only 25% (only acceptLicense has description). Description adds context about license acknowledgement and validation of URL shapes, but does not fully explain each parameter's syntax or constraints.

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

Purpose5/5

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

Clearly states the tool downloads a file URL from specific providers (Poly Haven, ambientCG, Smithsonian, Game-icons.net/Kenney) with license acknowledgement. Distinct from sibling tools like fab_download_free_asset or audio_download_asset which target different providers.

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

Usage Guidelines4/5

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

Implies usage when a file URL from those providers is obtained and license must be accepted. Does not explicitly exclude when not to use or provide alternative sibling tools, but context of siblings is available.

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

asset_import_unrealImport a local Unreal asset directoryA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packagesNoImport 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.
outputDirYesDirectory 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.
sourceDirYesA local directory of Unreal .uasset/.umap files, for example an already downloaded Fab pack.
maxTextureSizeNoOptional longest edge for embedded textures. Leave unset to keep Unreal's own resolution and let the ThreeNative asset compiler cap it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
audioYes
fontsYes
countsYes
failedYes
modelsYes
reusedYes
scenesYes
licenseNo
skippedYes
spritesYes
cubemapsYes
texturesYes
warningsYes
flipbooksYes
materialsYes
outputDirYes
dataAssetsYes
durationMsYes
reportPathYes
bitmapFontsYes
textureStacksYes
materialAssetsYes
materialCoverageYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already convey that the tool is not read-only, is idempotent, and is not destructive. The description and schema add concrete behavioral context beyond annotations, especially the guarantee that the tool 'never overwrites one' and the fact that it works across download sources. No contradictions with annotations are present.

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

Conciseness5/5

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

The description is two sentences with no filler. It front-loads the primary purpose and output, then adds the important portability qualifier about already-downloaded Unreal packs. Every clause adds useful information.

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

Completeness4/5

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

Between the description, annotations, and richly described schema, an agent has what it needs to call the tool: source and output directories, package filtering behavior, non-overwrite safety, and texture size constraints. The only minor gap is not explicitly routing to a sibling download/import tool, but that is not required for correct invocation.

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

Parameters3/5

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

The schema has 100% description coverage: sourceDir, outputDir, packages, and maxTextureSize each have meaningful explanations, including the many-gigabytes warning for omitted packages and the texture-size cap behavior. The main description does not need to repeat parameter details, so the baseline score of 3 applies.

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

Purpose5/5

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

The description states a specific action ('Convert') with a precise input (a local directory of Unreal .uasset/.umap files) and output (self-contained model/scene GLBs with reconstructed PBR materials, actor transforms, and a provenance report). This clearly differentiates it from download-oriented siblings that fetch assets rather than convert local Unreal content.

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

Usage Guidelines4/5

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

The description gives clear context for when to use this tool: on any already-downloaded Unreal pack, independent of how it was downloaded. It does not explicitly name alternative tools or state exclusions, but the local-source condition is clear enough to route an agent.

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

asset_inspect_rigInspect a humanoid rig and its animation donorsB
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetYesAbsolute path to the humanoid GLB under inspection, or a pinned sample reference to acquire into the development cache.
librariesNoOptional local UAL ZIP archives or GLB libraries used as animation donors.

Output Schema

ParametersJSON Schema
NameRequiredDescription
limitsYes
targetYes
catalogYes
sourcesYes
librariesYes
acquisitionYes
attachmentCandidatesYes

TDQS

B3.4/5.0
Behavior2/5

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

The description adds a useful safety claim—'Reads only caller-selected local files and downloads nothing'—which goes beyond the read-only/idempotent annotations. But it is not fully transparent: the `target` object variant allows 'acquire a pinned sample into the development cache,' which implies a cache write and possibly fetching, undercutting the blanket 'Reads only' statement. Because the annotations themselves declare read-only behavior, this is a descriptive overreach rather than an annotation contradiction.

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

Conciseness5/5

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

The description is a single well-organized sentence with a front-loaded action/resource followed by a compact list of returned data, plus one short sentence for the access/security behavior. It contains no fluff and every clause earns its place.

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

Completeness3/5

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

For a two-parameter read-only inspection tool with an output schema, the description covers the main inputs and safety behavior compactly. However, it misses the `sourceId` pinned-sample input form, the cache-write implication, and any explicit relationship to sibling tools, leaving an agent with an incomplete mental model of when and how to invoke it. The output schema covers return values, so no deduction there, but the input-mode gap prevents a higher score.

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

Parameters2/5

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

Schema coverage is 100%, so the schema already documents `target` and `libraries`; the description mostly repeats those facts. It also narrows `target` to 'a local humanoid GLB' and omits the pinned-sample/sourceId acquisition option, which could mislead an agent about valid inputs. This is not a meaningful semantic addition beyond the schema.

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

Purpose5/5

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

The description names the action ('Inspect'), the exact resource ('local humanoid GLB and optional local UAL ZIP/GLB libraries'), and enumerates the outputs (meshes, joints, suggested bone mappings, clips, attributes, extensions, measured bounds, attachment candidates). This makes it clearly distinct in purpose from sibling mutation/preview/import tools such as asset_auto_rig and asset_retarget_animations.

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

Usage Guidelines3/5

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

The description implies the tool should be used when an agent needs detailed structural/animation-donor information before rigging or retargeting, and its read-only privacy claim clarifies safe contexts. However, it never explicitly states when to choose this over asset_auto_rig, asset_preview_animation, or asset_retarget_animations, and it gives no exclusions or prerequisites. Usage guidance is only implied, not stated.

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

asset_list_bundle_animationsList animation clips inside a bundled GLBA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYes
uploadIdYes
entryPathNoOptional aggregate GLB path. Omit to select the standard non-root-motion GLB automatically.

Output Schema

ParametersJSON Schema
NameRequiredDescription
packIdYes
licenseYes
uploadIdYes
entryPathYes
animationsYes
alreadyCachedYes
aggregateEntryBytesYes
attributionRequiredYes
rangeBytesTransferredYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate read-only, idempotent, and non-destructive behavior. The description adds value by explaining the range-extraction and caching process, which goes beyond annotations. No contradictions.

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

Conciseness5/5

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

Two sentences with no wasted words. The first sentence delivers the core function; the second adds a key default behavior. Every sentence earns its place.

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

Completeness4/5

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

Given the presence of an output schema (so return format is handled), the description covers the main behavioral aspects: caching, automatic selection, and the result being named clips. It could clarify that it only lists names (not downloads), but that's inferable from sibling tools.

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

Parameters2/5

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

Schema description coverage is 33% (low, <50%), so the description should compensate. It only explains entryPath ('omit to select standard non-root-motion GLB'), leaving packId and uploadId unexplained. Without that context, the agent may not infer their roles from names alone, especially since packId has an enum but no guidance.

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

Purpose5/5

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

The description clearly states the tool lists animation clips inside a bundled GLB, using specific verbs and the resource. The title reinforces this. The tool is well-differentiated from siblings like asset_download_bundle_animation (download) and asset_list_bundle_entries (list entries).

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

Usage Guidelines3/5

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

The description provides guidance on omitting entryPath to automatically select the standard non-root-motion GLB, but does not explicitly state when to use this tool over alternatives, such as when only animation names are needed. It lacks explicit usage context or exclusions.

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

asset_list_bundle_entriesList files inside a remote asset bundleA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYes
uploadIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
packIdYes
entriesYes
licenseYes
uploadIdYes
sourcePageUrlYes
attributionRequiredYes
rangeBytesTransferredYes

TDQS

A3.9/5.0
Behavior4/5

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

The description adds behavioral context beyond annotations: it mentions HTTP byte ranges, return of entry paths and sizes, and that signed URLs are never exposed. This complements the readOnlyHint=true annotation without contradiction.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main action, and every word adds value. No unnecessary information is present.

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

Completeness4/5

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

Given the tool's simplicity (two parameters, simple list output), the description covers the key return values (entry paths and sizes) and a security note. The presence of an output schema reduces the need to detail return structure. Minimal gaps.

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

Parameters2/5

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

The input schema has two parameters (packId, uploadId) with 0% description coverage. The description does not explain what packId or uploadId represent or how they relate to the 'curated itch.io ZIP,' leaving the agent without parameter guidance.

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

Purpose5/5

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

The description clearly states the tool inspects a curated itch.io ZIP via HTTP byte ranges, listing entry paths and sizes. The verb 'inspect' and resource 'curated itch.io ZIP' align with the title 'List files inside a remote asset bundle,' and the purpose is distinct from sibling tools like download or search.

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

Usage Guidelines3/5

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

The description implies use for inspecting bundle contents without full download, but it does not explicitly state when to use this tool versus alternatives (e.g., asset_download_bundle_entry). No comparison or exclusion criteria are provided.

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

asset_list_sourcesList recommended asset sourcesA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
agentReadyOnlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
sourcesYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations provide readOnlyHint and idempotentHint. The description adds significant context: results have MCP download paths without manual browser/login/paywall, and the broader directory includes package-manager, Git, authenticated sources. No contradictions.

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

Conciseness5/5

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

The description is extremely concise: two sentences. The first sentence front-loads the core functionality and key benefit, the second explains the parameter. No wasted words.

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

Completeness5/5

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

With a single parameter and full annotations, the description is complete. It explains the two modes, the nature of results, and acknowledges the output schema existence. No gaps.

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

Parameters5/5

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

Schema coverage is 0%, so the description fully compensates by explaining the agentReadyOnly parameter's effect (default true gives agent-ready sources, false gives broader list). This adds crucial meaning beyond the schema.

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

Purpose5/5

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

The description clearly states the tool lists asset sources, distinguishing between agent-ready and broader sources. It uses a specific verb ('list') and resource ('asset sources'), and effectively distinguishes itself from sibling tools like asset_search_sources and various asset search/download tools.

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

Usage Guidelines4/5

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

The description explains the default behavior and how to get broader results via the agentReadyOnly parameter. It implies when to use each mode, but does not explicitly contrast with sibling tools or state when not to use it. Still, the context is clear enough.

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

asset_preview_animationPreview a prepared rig or clipA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clipNo
poseNo
timesNo
widthNo
anglesNo
heightNo
outputYesOutput contact-sheet .png path under projectRoot.
preparedYesAbsolute path to a prepared (rigged or retargeted) GLB.
priorDigestNo
projectRootYesProject root that must contain the output.

Output Schema

ParametersJSON Schema
NameRequiredDescription
boundsYes
canvasYes
imagesYes
outputYes
reasonYes
statusYes
tracksYes
backendYes
animationsYes
boundTracksYes
sampledTimesYes
contactSheetSha256Yes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already indicate idempotent, non-destructive, and non-read-only behavior. The description adds useful behavioral context beyond those annotations: it publishes a nonblank contact sheet under the project root and explicitly returns an unavailable result if the rendering backend is missing. This clarifies failure modes and output guarantees.

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

Conciseness5/5

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

Two dense sentences convey rendering, optional inputs, output location, and failure behavior with no wasted words. Key constraints like 'nonblank' and 'explicit unavailable result' are front-loaded and meaningful.

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

Completeness2/5

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

The tool is complex with 10 parameters and a nested pose object, yet the description leaves significant gaps: no explanation of priorDigest, no definition of what clip references, no clarification on how times interacts with clip vs pose, and no guidance on width/height defaults or constraints beyond the schema. The output schema helps with return value expectations, but the input side remains under-specified for an agent to use this confidently.

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

Parameters3/5

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

Schema description coverage is only 30%, so the description must compensate. It does partially explain angles, clip sampling, bone pose, and contact sheet output, but it leaves width, height, times, clip's reference semantics, and especially priorDigest unexplained. The description adds meaning for several parameters but not enough to fully cover the 10-parameter surface.

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

Purpose5/5

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

The description states a specific action: render a prepared GLB from several angles, optionally sampling a clip or using a bone pose, and publish a contact sheet. It clearly differentiates from sibling tools like asset_inspect_rig and asset_auto_rig by focusing on rendering/preview output rather than inspection or rigging.

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

Usage Guidelines3/5

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

The phrasing 'prepared GLB' and 'optional clip sample time or explicit bone pose' implies this is the tool to call after preparation/rigging work, but it never explicitly says when to choose it over siblings like asset_inspect_rig or asset_retarget_animations. There is no when-not-to-use or alternative routing.

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

asset_retarget_animationsRetarget selected donor clips onto a prepared targetA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
clipsYes
outputYesOutput .glb path under projectRoot.
targetYesAbsolute path to the prepared target GLB (e.g. the AETHER sample).
mappingNo
priorDigestNo
projectRootYesProject root that must contain the output.
keepExistingClipsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
bytesYes
clipsYes
outputYes
sha256Yes
statusYes
mappingYes
replacedYes
alreadyExistedYes
animationBytesYes
animationCountYes
meshTextureBytesYes
keepExistingClipsYes

TDQS

A4.4/5.0
Behavior4/5

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

The description discloses meaningful behavior beyond the annotations: it preserves the target's mesh/materials/UVs and existing clips by default, applies a world-space rest correction, and publishes a minimal GLB. These details align with idempotentHint and destructiveHint=false; no contradiction exists.

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

Conciseness5/5

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

Two tightly packed sentences front-load the main action and then add the most important behavioral caveat. There is no filler or repetition.

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

Completeness4/5

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

For a complex 7-parameter pipeline, the description captures the core workflow, key side effects, and the root-motion requirement. The main gap is no mention of mapping or priorDigest, but the output schema and annotations fill some surrounding context.

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

Parameters4/5

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

Schema coverage is low at 43%, but the description compensates for key parameters: clips are 'pinned release donors', target is a 'prepared target skeleton', output is a 'game minimal GLB', keepExistingClips is 'by default its existing clips', and root_motion maps to the '_RM donor' rule. It leaves mapping and priorDigest unexplained, but the core workflow parameters are clarified.

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

Purpose5/5

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

The description states a specific multi-step action: fetch pinned release donors, retarget clips onto a prepared target skeleton, preserve target attributes, and publish a game minimal GLB. This clearly differentiates it from sibling search, download, and preview tools.

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

Usage Guidelines4/5

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

The description gives clear context: it is for retargeting pinned release donor clips onto an already prepared target, with a root-motion caveat about needing the matching _RM donor. It does not explicitly name alternatives or when-not-to-use conditions, but the scope is clear enough.

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

asset_search_sourcesSearch recommended asset sourcesA
Read-onlyIdempotent

Search agent-ready asset sources by category, license, access mode, or text query. Manual/provider-page sources are excluded unless agentReadyOnly=false.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
accessNoall
licenseNoall
categoryNoall
agentReadyOnlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
sourcesYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint=true and destructiveHint=false. The description adds that the tool searches sources and clarifies exclusion behavior (manual sources unless agentReadyOnly=false), which is beyond what annotations provide. No contradictions.

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

Conciseness5/5

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

The description is extremely concise: two sentences with no wasteful words. The first sentence announces the core action and filters; the second clarifies the important exclusion rule. Every word earns its place.

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

Completeness4/5

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

Given the presence of an output schema (explaining return values), the description covers the main functionality and filtering options adequately. It mentions the key agentReadyOnly condition. Minor gap: does not explicitly state that it returns sources (not assets), but that is inferred from tool name and category. Overall complete for a search tool.

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

Parameters3/5

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

With 0% schema description coverage, the description must compensate. It mentions four out of five parameters (query, category, license, access) and implicitly references agentReadyOnly through the exclusion rule. However, it does not explain each parameter's behavior or constraints in detail, leaving some ambiguity (e.g., what 'access mode' values are available). Partially compensates but not fully.

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

Purpose5/5

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

The description clearly states it searches 'agent-ready asset sources' with specific filters (category, license, access mode, text query). It distinguishes from other search tools (siblings like fab_search_assets) by specifying the scope and the exclusion of manual/provider-page sources unless agentReadyOnly=false.

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

Usage Guidelines4/5

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

The description provides clear context on when to use the tool: for searching agent-ready sources, with a note that manual/provider-page sources are excluded by default. It implies that for non-agent-ready sources one might need to set agentReadyOnly=false or use other tools, but does not explicitly mention sibling alternatives.

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

audio_download_assetDownload a curated game-audio packA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdYes
acceptLicenseYesRequired acknowledgement that the caller reviewed and accepts the asset license returned by audio_search_assets.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
sha256Yes
assetIdYes
licenseYes
fileNameYes
sourceIdYes
sizeBytesYes
sourcePageUrlYes
alreadyExistedYes
attributionTextNo
attributionRequiredYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations indicate idempotent and non-destructive; the description reinforces this with 'existing files are never overwritten.' It adds new constraints like URL restrictions to official hosts, which annotations don't cover. No contradictions.

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

Conciseness5/5

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

Two sentences, no fluff. First sentence conveys main purpose and key condition; second adds important behavioral constraints. Front-loaded with essential information.

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

Completeness4/5

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

Given the output schema exists (not shown) and annotations cover safety hints, the description adequately explains core behavior, security, and idempotency. Could mention error handling for invalid IDs, but overall complete for a download tool.

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

Parameters3/5

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

The description adds context for acceptLicense (required acknowledgement) beyond the schema, but assetId is only described as 'by ID' without extra semantics. Schema provides pattern and maxLength for assetId, so overall value is moderate.

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

Purpose5/5

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

The description clearly states the tool downloads a catalog asset by ID into a dedicated audio directory, requiring license acknowledgement. It distinguishes from siblings like audio_search_assets (search) and fab_download_free_asset (free assets) by specifying the exact action and conditions.

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

Usage Guidelines4/5

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

The description provides clear usage context: requires license acknowledgement, URLs are restricted to official hosts, and files are never overwritten. It implies when to use (after searching with audio_search_assets) but does not explicitly state when not to use or suggest alternatives.

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

audio_list_sourcesList game-audio sourcesA
Read-onlyIdempotent

List supported audio libraries, best uses, licensing caveats, browse pages, and whether this MCP has a curated direct-download contract.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
sourcesYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds specific behavioral context about what is listed (libraries, licenses, browse pages, contracts), enhancing transparency beyond annotations.

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

Conciseness5/5

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

The description is a single, well-structured sentence that efficiently conveys the tool's output without unnecessary words.

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

Completeness5/5

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

Given no parameters, rich annotations, and an existing output schema, the description is complete enough for an agent to understand the tool's purpose and output.

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

Parameters4/5

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

There are 0 parameters with 100% schema coverage trivially. The description adds meaning beyond the empty schema by detailing what the tool returns.

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

Purpose5/5

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

The description clearly states the tool lists supported audio libraries, best uses, licensing caveats, browse pages, and contract info, distinguishing it from sibling search/download tools.

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

Usage Guidelines3/5

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

The description implies when to use the tool (to get an overview of audio sources), but does not explicitly state when not to use it or compare it to siblings like audio_search_assets or audio_download_asset.

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

audio_search_assetsSearch downloadable game-audio packsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNoall
limitNo
queryNo
cursorNo
sourceNoall

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes
nextCursorNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate read-only and idempotent, and the description adds context about stable direct URLs and explicit license metadata, which are non-obvious behaviors.

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

Conciseness5/5

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

The description is extremely concise with two sentences, no filler, and the key information is front-loaded.

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

Completeness4/5

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

Given the presence of an output schema and annotations, the description covers the core purpose and primary usage scenario, but lacks explanations for pagination and parameter meaning.

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

Parameters2/5

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

With 0% schema description coverage, the description should explain at least key parameters like query, kind, source, and limit, but it doesn't mention any parameter.

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

Purpose5/5

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

The description clearly states the tool searches a curated catalog of official audio packs with stable URLs and license metadata, and distinguishes itself from the sibling audio_list_sources for broader discovery.

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

Usage Guidelines5/5

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

Explicitly tells when to use this tool (searching curated catalog) and when to use an alternative (audio_list_sources for broader provider-page discovery).

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

creature_guideRead pinned anyCreature authoring guidanceA
Read-onlyIdempotent

Read a bounded syntax or workflow section from the verified anyCreature 1.3.1 payload. This does not run or extract the compiler.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
guideYes
sectionYes
upstreamYes
integrityYes
attributionYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful context that it reads a 'bounded' section and does not run or extract the compiler, which clarifies the non-execution behavior. It doesn't add much beyond that, but the annotations carry the main burden.

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

Conciseness5/5

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

Two sentences with no wasted words. The core action and resource are front-loaded, and the clarifying 'does not run or extract the compiler' is placed second. Every sentence earns its place.

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

Completeness3/5

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

The tool has a single parameter with an enum, an output schema, and read-only annotations, so the description doesn't need to explain return values or safety. However, it doesn't explain what the sections contain or how an agent would know which section to request, which is a meaningful gap for a guidance-reading tool. The output schema may cover return structure, but the selection semantics are left to the enum names.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must compensate for the 'section' parameter. The description says 'bounded syntax or workflow section' which maps to the enum values, but it does not explain what each enum value (overview, syntax, low, mid, high, delivery) means or how to choose one. The enum itself provides the allowed values, but the description adds minimal semantic guidance beyond 'bounded section'.

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

Purpose4/5

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

The description states a specific verb ('Read') and resource ('bounded syntax or workflow section from the verified anyCreature 1.3.1 payload'), which clearly distinguishes it from the sibling tools that search/download assets. It could be slightly stronger by naming a sibling it is not, but the 'does not run or extract the compiler' clause helps differentiate it from compiler-related operations.

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

Usage Guidelines3/5

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

The description implies when to use it: when you need authoring guidance for anyCreature 1.3.1, and the 'does not run or extract the compiler' clause tells the agent what it won't do. However, it does not explicitly state when to prefer this over alternatives or mention any exclusions, leaving the agent to infer usage context from the section enum.

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

creature_statusGet anyCreature availabilityA
Read-onlyIdempotent

Report the pinned anyCreature payload, currently available operations, and optional local tooling without starting a browser or requesting credentials.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
setupYes
limitsYes
toolingYes
upstreamYes
integrityYes
operationsYes
attributionYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds valuable behavioral context beyond those: it does not start a browser and does not request credentials, which clarifies that this is a lightweight, non-interactive status check. No contradiction with annotations.

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

Conciseness4/5

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

The description is a single, front-loaded sentence with no filler. However, terms like 'pinned anyCreature payload' and 'optional local tooling' are somewhat jargon-heavy and may require the reader to infer their meaning.

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

Completeness4/5

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

With no parameters, an output schema present, and annotations covering safety, the description provides adequate context: purpose, non-interactive nature, and credential-free operation. It is reasonably complete, though it could clarify what 'optional local tooling' refers to.

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

Parameters4/5

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

The tool has zero parameters and the empty schema has 100% description coverage, so the baseline is 4. The description does not need to elaborate on parameters; none exist.

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

Purpose5/5

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

The description uses the specific verb 'Report' and names the resource ('pinned anyCreature payload') and the exact content reported (payload, currently available operations, optional local tooling). This clearly distinguishes it from sibling tools that search, import, or inspect assets.

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

Usage Guidelines3/5

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

The description implies when it should be used: when you need status/availability information without the overhead of a browser or credentials. However, it does not explicitly state when to use this tool versus alternatives like creature_guide or asset_inspect_rig, and it offers no exclusions or conditions.

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

fab_download_free_assetDownload a free Fab asset fileA
Idempotent

Download one directly available free Fab file into the configured local download directory. This never purchases or adds an asset to a library.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatYes
acceptFabEulaYesRequired acknowledgement that the user accepts the Fab EULA linked by the listing.
listingIdOrUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
pathYes
formatYes
sha256Yes
fileNameYes
listingIdYes
sizeBytesYes
alreadyExistedYes
authenticationYes

TDQS

A4/5.0
Behavior4/5

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

Annotations indicate idempotentHint=true, openWorldHint=true, and destructiveHint=false. The description adds valuable context that the tool downloads to a local directory and never performs purchases or library operations, which aligns with annotations. It does not detail file overwrite behavior or other side effects, but the idempotency hint mitigates some concerns.

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

Conciseness5/5

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

The description is two concise sentences that convey the core purpose and a key behavioral distinction with no redundant information. It is front-loaded and efficient.

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

Completeness3/5

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

Given moderate complexity (3 required params, output schema exists), the description covers the overall function and important behavioral notes but lacks parameter details. For a download tool, it is adequate but not fully complete without addressing parameter semantics.

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

Parameters2/5

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

Schema description coverage is only 33% (only acceptFabEula has a description). The description does not elaborate on 'listingIdOrUrl' or 'format', leaving agents to infer meaning from names alone. For low coverage, the description should compensate but does not.

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

Purpose5/5

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

The description clearly states the action (download), resource (free Fab file), and location (configured local download directory). It explicitly distinguishes itself from purchasing or adding to a library, which sets it apart from sibling tools like fab_search_assets or fab_get_asset.

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

Usage Guidelines4/5

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

The description provides clear context for when to use the tool (downloading a free Fab file) and when not to use it (if the intent is to purchase or add to library). However, it does not explicitly mention alternative tools or prerequisites such as requiring a valid listing ID.

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

fab_get_assetGet a Fab assetA
Read-onlyIdempotent

Get normalized public details and per-license prices for one Fab listing.

ParametersJSON Schema
NameRequiredDescriptionDefault
currencyNo
listingIdOrUrlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
tagsYes
filesYes
mediaYes
titleYes
formatsYes
categoryNo
isMatureNo
licensesYes
warningsYes
publisherNo
transportYes
updatedAtNo
breadcrumbYes
allowsAiUseNo
descriptionNo
publishedAtNo
hasChangelogNo
thumbnailUrlNo
compatibilityYes
isAiGeneratedNo
freeLicenseSlugsYes
rawContractVersionYes
descriptionTruncatedYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, providing strong behavioral transparency. The description adds the specific context of returning normalized details and per-license prices, but does not disclose behavior for invalid inputs or edge cases. The added value is moderate given the rich annotations.

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

Conciseness5/5

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

The description is a single, concise sentence that front-loads the core purpose. Every word provides value, with no redundancy or fluff.

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

Completeness4/5

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

Given the tool has 2 parameters (1 required), a rich set of annotations, and an output schema, the description is largely adequate for selection. It could mention that listingIdOrUrl accepts either an ID or a URL, but overall it provides sufficient context for an agent to decide when to use this tool.

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

Parameters2/5

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

Schema description coverage is 0%, so the description should compensate by explaining parameters. It mentions 'one Fab listing' but does not detail the listingIdOrUrl parameter (e.g., format, what it accepts) or the currency parameter. This leaves the agent with minimal guidance beyond the schema's structural definitions.

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

Purpose5/5

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

The description clearly states 'Get normalized public details and per-license prices for one Fab listing,' specifying the verb (Get), resource (Fab listing), and the type of data returned (details and prices). This distinguishes it from sibling tools like fab_search_assets which perform searches.

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

Usage Guidelines4/5

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

The description implies usage for retrieving details of a single Fab listing, and the naming suggests it complements search tools. However, it does not explicitly state when not to use it or provide alternatives, though the sibling set includes similar tools for other sources, making context clear.

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

fab_import_assetImport an owned Fab Unreal assetA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
engineNoUnreal engine selector, for example UE_4.21. Required when the listing publishes several artifacts.
packagesNoImport 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.
platformNoPlatform build to download when the artifact publishes several, for example Windows.
outputDirYesDirectory 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.
acceptFabEulaYesRequired acknowledgement that the user accepts the Fab EULA for the listing they already own.
listingIdOrUrlYes
maxTextureSizeNoOptional longest edge for embedded textures. Leave unset to keep Unreal's own resolution and let the ThreeNative asset compiler cap it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
audioYes
fontsYes
countsYes
failedYes
modelsYes
reusedYes
scenesYes
licenseNo
skippedYes
spritesYes
cubemapsYes
texturesYes
warningsYes
flipbooksYes
materialsYes
outputDirYes
dataAssetsYes
durationMsYes
reportPathYes
bitmapFontsYes
textureStacksYes
materialAssetsYes
materialCoverageYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate a non-read-only, idempotent, non-destructive operation. The description adds meaningful behavioral context: it uses the user's existing FabCLI session, performs no auth or purchase actions, and converts to GLBs in a single step. This goes beyond what the annotations alone state.

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

Conciseness5/5

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

Two sentences with no filler: the first states the core action and scope, and the second adds the key auth boundary. Every sentence earns its place and avoids repeating schema information.

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

Completeness5/5

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

Given the rich schema, annotations, and output schema, the description is complete enough for an agent to understand when and how to invoke it. It covers ownership, one-step conversion, and the FabCLI session constraint, while the structured fields handle the remaining parameter details.

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

Parameters3/5

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

Schema description coverage is 86%, so the schema documents most parameters in detail, including engine, packages, platform, outputDir, acceptFabEula, and maxTextureSize. The description itself adds little parameter-level detail beyond the ownership and GLB conversion context, so the baseline score of 3 is appropriate.

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

Purpose5/5

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

The description names a specific operation: download an already-owned Unreal asset and convert it to source GLBs in one step. It also scopes the tool to the signed-in Fab account and explicitly rules out login, claiming, and purchasing, which distinguishes it from acquisition-focused sibling tools.

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

Usage Guidelines4/5

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

It clearly states the precondition that the user must already own the asset and have an established FabCLI session. It also gives an implicit when-not by saying the tool never logs in, claims, or purchases, though it does not name an alternative tool for cases like free downloads or new purchases.

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

fab_list_filtersList Fab search filtersB
Read-onlyIdempotent

List usable public Fab filter labels and slugs. A warning identifies versioned fallback or stale values.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindsNo
refreshNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
sourceYes
filtersYes
warningsYes
capturedAtYes
contractVersionYes

TDQS

B3.4/5.0
Behavior3/5

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

The description adds context beyond annotations by mentioning that a warning identifies 'versioned fallback or stale values,' indicating potential data quality concerns. However, the annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description does not significantly expand on these.

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

Conciseness5/5

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

The description is two sentences long, front-loading the core purpose. Every sentence adds value: the first states the main action, the second highlights a notable behavior (warning). No extraneous text.

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

Completeness3/5

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

While an output schema exists (not shown), the description does not cover the parameters, leaving a significant gap for a tool with 2 parameters and 0% schema coverage. The warning about stale values adds some depth, but the overall description is slightly incomplete for an agent to understand parameter usage.

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

Parameters1/5

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

The parameter schema is not described in the description (0% coverage). The 'kinds' parameter has enum values and 'refresh' is a boolean with default false, but their effects are not explained. The description provides no guidance on how these parameters affect the results, relying entirely on the schema.

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

Purpose5/5

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

The description clearly states the tool lists 'usable public Fab filter labels and slugs,' with a specific verb and resource. It distinguishes itself from sibling tools like fab_search_assets, which search for assets, by focusing solely on filter metadata. The mention of a warning about versioned fallback values adds specificity.

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

Usage Guidelines3/5

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

The description implies usage for listing Fab filters but does not explicitly state when to use this tool versus alternatives like fab_list_limited_time_free or other filter-related tools. No exclusion criteria or alternative tool references are provided, leaving some ambiguity.

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

fab_list_limited_time_freeList limited-time-free Fab promotionsA
Read-onlyIdempotent

List Fab's dedicated curated limited-time-free promotions separately from general free search.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
sourceYes
warningsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, indicating a safe read operation. The description adds only that it lists separately from general free search, adding minimal behavioral context beyond annotations. No contradiction.

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

Conciseness5/5

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

Single sentence, front-loaded, no superfluous text. Every word adds value.

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

Completeness4/5

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

Given rich annotations and an output schema, the description is mostly sufficient. It could mention default limit and behavior when no promotions exist, but the output schema likely covers return fields.

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

Parameters3/5

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

The only parameter (limit) is fully documented in the schema (type, default, min/max). With 0% schema description coverage, the description does not add parameter meaning, but schema coverage is complete for this single parameter, so baseline 3 is appropriate.

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

Purpose4/5

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

The description clearly states the tool lists limited-time-free promotions from Fab, distinguishing it from general free search. It uses specific verb 'list' and resource 'promotions', but does not explicitly name the sibling tool for general free search (fab_search_assets).

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

Usage Guidelines3/5

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

The description implies usage for limited-time-free promotions versus general free search, but does not provide explicit when-to-use or when-not-to-use guidance, nor does it name alternative tools.

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

fab_list_ownedList the Fab assets this account ownsA
Read-onlyIdempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoCase-insensitive substring of the title or category. Omit to list everything.
unrealOnlyNoKeep 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.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYes
listingsYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces the read-only nature and adds the specific 'never claims or purchases' context beyond the generic hints. It also explains the unrealOnly filter behavior (filtering to what fab_import_asset can convert), which is useful behavioral context beyond the schema. No contradictions with annotations.

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

Conciseness5/5

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

Two concise sentences, with the core action front-loaded and the usage guidance in the second sentence. No redundant or filler content; every clause earns its place.

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

Completeness5/5

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

For a tool with two optional parameters, a rich output schema, and strong annotations, the description covers purpose, usage guidance, the read-only caveat, and the filter semantics. Nothing an agent needs to invoke it correctly is missing.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents both parameters thoroughly. The description adds a high-level explanation of the unrealOnly filter ('ones that publish an Unreal artifact fab_import_asset can convert') and mentions 'optionally filtered' for query, but this largely paraphrases the schema. It adds minimal incremental value, so a 3 is appropriate.

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

Purpose5/5

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

States exactly what it does: 'List every listing already in the signed-in Fab library,' with a specific verb and resource. It also distinguishes itself from siblings by mentioning the optional unrealOnly filter and explicitly pointing to fab_search_assets as the alternative for free assets, so an agent can tell them apart.

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

Usage Guidelines5/5

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

Explicitly instructs when to use it: 'Search free assets first with fab_search_assets; reach for this when you want something already paid for.' Also clarifies what it does not do ('it never claims or purchases'), giving clear exclusions against other tools like fab_download_free_asset or purchasing actions.

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

fab_search_assetsSearch Fab assetsC
Read-onlyIdempotent

Search public Fab marketplace listings. Free assets are returned by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
tagsNo
limitNo
queryNo
cursorNo
formatsNo
channelsNo
currencyNo
licensesNo
maxPriceNo
minPriceNo
priceModeNofree
publisherNo
categoriesNo
aiGeneratedNo
allowsAiUseNo
listingTypesNo
minimumRatingNo
publishedSinceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
warningsYes
transportYes
nextCursorNo
appliedFiltersYes

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds that free assets are returned by default, which is useful but not extensive. No disclosure of other behaviors like pagination or rate limits.

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

Conciseness3/5

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

The description is short (two sentences) and front-loads purpose. However, for a tool with 19 parameters, it could be more informative without sacrificing conciseness.

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

Completeness2/5

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

Despite having an output schema, the description fails to provide an overview of filtering capabilities or search behavior. Many sibling tools exist, and this description does not help an agent understand when to use it.

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

Parameters1/5

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

Schema description coverage is 0%. The description does not explain any of the 19 parameters beyond hinting at the 'priceMode' default. It adds negligible semantic value over the raw schema.

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

Purpose5/5

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

The description clearly states the tool searches 'public Fab marketplace listings', a specific verb+resource. It distinguishes from sibling tools that search other marketplaces (e.g., polyhaven_search_assets). The note about free assets as default adds specificity.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like polyhaven_search_assets or sketchfab_search_models. Does not mention prerequisites, when not to use, or other context for choosing this tool.

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

itch_download_assetDownload a curated itch.io asset packA
Idempotent

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYes
uploadIdYes
acceptLicenseYesRequired acknowledgement that the caller accepts the CC0 terms and any pack-specific cautions returned by itch_list_downloads.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
pathYes
packIdYes
sha256Yes
licenseYes
fileNameYes
uploadIdYes
sizeBytesYes
sourcePageUrlYes
alreadyExistedYes
attributionRequiredYes

TDQS

A3.9/5.0
Behavior4/5

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

The description discloses key behavioral traits beyond annotations: signed URLs are not exposed, the download is streamed to guarded local storage, and license acknowledgement is required. This aligns with annotations (readOnlyHint=false, idempotentHint=true) and adds useful context about side effects and security.

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

Conciseness5/5

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

Two concise sentences that front-load the core action and flow, then clarify a key detail (signed URL exposure). Every sentence adds value, no fluff or repetition of schema.

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

Completeness3/5

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

The description covers the core process but lacks guidance on prerequisites (e.g., the need to call itch_list_downloads first), error handling, or what the tool returns. An output schema exists but is not shown; the description does not compensate for missing details on success/failure conditions.

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

Parameters3/5

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

Schema description coverage is only 33% (only acceptLicense has a description). The description adds context that acceptLicense is a required boolean acknowledgement and links to license terms, but provides little additional meaning for packId and uploadId beyond what the schema enum and pattern offer.

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

Purpose5/5

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

The description clearly states the action (resolve and stream), the resource (itch.io asset pack upload), and the flow (explicit license acknowledgement, signed URLs not exposed). It distinguishes from sibling tools by specifying 'itch.io' and 'curated asset pack', and from other download tools by the unique process.

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

Usage Guidelines3/5

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

The description implies the tool should be used when you have a packId and uploadId and after acknowledging a license, but it does not explicitly state when to use this tool over alternatives, nor does it provide exclusions or refer to other tools for comparison. The reference to 'listed upload' hints at a prerequisite but could be clearer.

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

itch_list_downloadsList curated itch.io pack downloadsA
Read-only

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
packIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
packIdYes
cautionNo
licenseYes
downloadsYes
sourcePageUrlYes
attributionRequiredYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the tool as read-only and open-world. The description adds meaningful behavioral context: it explicitly states that no account is required and that signed page tokens are never returned, which addresses a potential security or privacy concern. This goes beyond the annotations and helps the agent understand the tool's safety and access model.

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

Conciseness5/5

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

The description is two sentences and front-loaded. The first sentence delivers the core purpose and output, and the second sentence adds a critical security note. Every clause earns its place with no redundancy or fluff.

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

Completeness5/5

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

Given that the tool has a single parameter with clear enums, a read-only annotation, and an existing output schema, the description is complete. It covers the action, the resource, the output fields, and the important behavioral note about tokens. No gaps are present for this level of complexity.

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

Parameters3/5

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

The single parameter packId has an enum list of specific values, which are self-explanatory. Schema description coverage is 0%, but the description does not need to add meaning because the enum values and tool name already convey the parameter's purpose. The description adds 'fresh no-account' context, which is not parameter-specific but useful. A score of 3 is appropriate: the description does not hinder understanding but neither does it enhance the schema significantly.

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

Purpose5/5

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

The description clearly states the action (resolve and list uploads), the resource (itch.io pack download page without account), and the specific information returned (upload IDs, names, sizes, license, filenames). It distinguishes this tool from siblings like itch_download_asset, which performs downloads instead of listing.

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

Usage Guidelines3/5

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

The description implies the tool is for listing available downloads from a pack, but it does not explicitly state when to use it versus alternatives like itch_download_asset, nor does it provide prerequisites or exclusions. The context from sibling names helps infer the intended use, but the description itself lacks direct guidance.

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

polyhaven_get_assetGet a Poly Haven assetA
Read-onlyIdempotent

Get normalized metadata, authorship, dimensions, and CC0 license information for one Poly Haven asset.

ParametersJSON Schema
NameRequiredDescriptionDefault
assetIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
lodsNo
nameYes
tagsYes
typeYes
authorsYes
donatedNo
licenseYes
categoryNo
providerYes
filesHashNo
polycountNo
attributesYes
categoryIdNo
dimensionsNo
descriptionNo
publishedAtNo
thumbnailUrlNo
downloadCountNo
maxResolutionNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare read-only, open-world, idempotent, and non-destructive behavior. The description adds context about the type of metadata returned (authorship, dimensions, license). No contradictions.

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

Conciseness5/5

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

Single sentence, 13 words, front-loaded with verb and resource. Every word is informative; no redundancy or fluff.

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

Completeness4/5

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

Output schema exists, so return values are defined. The description covers the main output components. However, it could mention that the asset ID comes from a search tool. Still, it is sufficient for a simple retrieval tool.

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

Parameters1/5

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

Schema description coverage is 0%, so the description must explain the parameter. It does not mention 'assetId' or how to obtain it. The parameter is required, yet the description lacks any guidance on its value.

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

Purpose5/5

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

The description clearly states the verb 'Get', the resource 'one Poly Haven asset', and specifies the returned information: normalized metadata, authorship, dimensions, and CC0 license. It distinguishes this tool from search and list siblings.

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

Usage Guidelines3/5

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

The description implies use when you need metadata for a specific Poly Haven asset, but it does not explicitly mention when not to use it or provide alternatives. Given many sibling tools, more guidance would be helpful.

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

polyhaven_list_categoriesList Poly Haven categoriesA
Read-onlyIdempotent

List Poly Haven category labels and asset counts for HDRIs, textures, or models.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
providerYes
categoriesYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false. The description adds that it returns category labels and asset counts, which is basic behavioral context. No contradiction with annotations.

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

Conciseness5/5

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

The description is a single sentence that front-loads the verb 'List' and the resource. There is no extraneous information; every word is necessary and clear.

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

Completeness4/5

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

With a simple one-parameter tool and an output schema present, the description adequately indicates what is returned (category labels and asset counts). It could be slightly more detailed but is generally complete for the tool's simplicity.

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

Parameters4/5

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

The schema has 0% description coverage, but the description lists the allowed types (HDRIs, textures, models) corresponding to the enum. This adds meaning beyond the schema by explicitly pairing the parameter with the tool's resource types.

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

Purpose5/5

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

The description clearly states the tool lists Poly Haven category labels and asset counts for HDRIs, textures, or models. It distinguishes from sibling tools like polyhaven_search_assets and polyhaven_get_asset by specifying the listing action and resource scope.

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

Usage Guidelines3/5

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

The description implies usage for listing categories but provides no explicit guidance on when to use this tool versus alternatives (e.g., polyhaven_list_files) or any exclusions. The context is clear but lacks when-not or alternative recommendations.

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

polyhaven_list_filesList Poly Haven asset filesA
Read-onlyIdempotent

List official download URLs, byte sizes, MD5 hashes, and file dependencies for a Poly Haven asset, with format and resolution filters.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
formatNo
assetIdYes
resolutionNo
includeDependenciesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
totalYes
providerYes
nextCursorNo

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false. The description adds value beyond annotations by specifying exact output fields (download URLs, byte sizes, MD5 hashes, file dependencies) and the presence of filters. This helps the agent understand the response structure without contradicting annotations.

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

Conciseness5/5

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

The description is a single concise sentence with no filler. It is front-loaded with the verb and resource, immediately followed by key output details and filter capabilities. Every word contributes to understanding.

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

Completeness3/5

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

Given the output schema exists (assumed to document return values), the description does not need to detail them. However, it fails to mention pagination parameters ('limit', 'cursor') and only lightly covers filters. For a tool with 6 parameters and 1 required, the description is slightly incomplete but still adequate for basic use.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the burden. It only mentions two parameters ('format' and 'resolution') as filters, ignoring 'limit', 'cursor', 'assetId', and 'includeDependencies'. The agent gets no explanation of pagination or how to use the required 'assetId'. This is insufficient for a 6-parameter tool.

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

Purpose5/5

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

The description clearly states the tool lists 'download URLs, byte sizes, MD5 hashes, and file dependencies' for a Poly Haven asset, with explicit mention of format and resolution filters. This distinguishes it from siblings like polyhaven_get_asset (which likely gets metadata) and ambientcg_list_files (different source). The verb 'list' and specific resource 'Poly Haven asset' are unambiguous.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, when not to use, or compare with similar tools like polyhaven_get_asset or asset_list_sources. The agent must infer usage from the name and context alone.

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

polyhaven_search_assetsSearch Poly Haven assetsB
Read-onlyIdempotent

Search CC0 HDRIs, textures, and models from Poly Haven. Results include explicit Poly Haven attribution.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNorelevance
typeNoall
limitNo
queryNo
cursorNo
categoriesNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
totalYes
providerYes
nextCursorNo
attributionYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, destructiveHint. The description adds that results include explicit Poly Haven attribution, a useful behavioral detail for licensing. However, it does not describe pagination, sorting behavior, or error handling beyond what annotations imply.

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

Conciseness5/5

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

Two sentences with no wasted words. The description is front-loaded with the action and includes an additional detail about attribution without verbosity.

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

Completeness2/5

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

Despite an existing output schema, the description lacks explanation of how to use parameters like cursor, limit, and categories. It does not cover result structure, pagination, or typical usage patterns for a search tool.

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

Parameters1/5

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

Schema description coverage is 0%, but the description provides no parameter information beyond hinting at the 'type' parameter (HDRIs, textures, models). Six parameters remain unexplained, leaving the agent to infer from names alone.

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

Purpose5/5

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

The description clearly states the tool searches CC0 HDRIs, textures, and models from Poly Haven. It distinguishes from siblings by specifying the source (Poly Haven) and content type (CC0), and adds a unique detail about attribution in results.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like fab_search_assets or ambientcg_search_assets. The description does not provide context for selection based on asset source or licensing needs.

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

sketchfab_get_downloadsGet Sketchfab download URLsA
Read-only

Get temporary download URLs for a downloadable Sketchfab model using the user's SKETCHFAB_API_TOKEN. This does not store credentials or download files.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningYes
providerYes
downloadsYes
authenticationYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description adds limited new behavioral insight. It confirms no credential storage and no file downloading, which is useful but not extensive. No contradiction with annotations.

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

Conciseness5/5

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

The description is two sentences long, front-loaded with the core purpose, and contains no extraneous information. Every sentence serves a clear function.

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

Completeness4/5

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

Given the tool has a single parameter and output schema, the description covers key aspects: token requirement, temporary URLs, and non-storage. It could mention the modelId's role but is otherwise sufficient for a simple tool.

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

Parameters2/5

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

The input schema has 0% description coverage and the description does not mention the 'modelId' parameter or its format. This fails to add meaning beyond the schema, which is especially problematic given the low coverage.

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

Purpose5/5

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

The description clearly states the tool retrieves temporary download URLs for a Sketchfab model using the user's API token, providing a specific verb-resource pair. This distinguishes it from sibling tools like sketchfab_search_models or sketchfab_get_model.

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

Usage Guidelines4/5

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

The description implies the tool requires a valid SKETCHFAB_API_TOKEN and clarifies that it does not store credentials or download files, giving context for when to use it. However, it does not explicitly exclude usage scenarios or compare with alternatives.

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

sketchfab_get_modelGet a Sketchfab modelA
Read-onlyIdempotent

Get public metadata and explicit Creative Commons requirements for one Sketchfab model.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tagsYes
authorNo
licenseNo
animatedYes
archivesYes
embedUrlNo
providerYes
faceCountNo
likeCountNo
updatedAtNo
viewCountNo
viewerUrlYes
categoriesYes
descriptionNo
publishedAtNo
vertexCountNo
downloadableYes
thumbnailUrlNo
ageRestrictedNo
downloadCountNo

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds value by specifying what is returned (public metadata and Creative Commons requirements), beyond what annotations provide. No contradictions.

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

Conciseness5/5

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

The description is a single sentence that instantly conveys the action and target, with no filler or redundant information. Every word earns its place.

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

Completeness4/5

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

The tool has an output schema (covering return values), simple parameters, and the description states the retrieval scope. It is complete enough for this straightforward read operation.

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

Parameters2/5

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

Schema coverage is 0%, so the description must compensate. It does not explain the modelId parameter beyond the schema's pattern, missing an opportunity to clarify its meaning or format.

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

Purpose5/5

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

The description uses a specific verb ('Get') and resource ('public metadata and explicit Creative Commons requirements for one Sketchfab model'), clearly distinguishing from sibling tools like sketchfab_search_models and sketchfab_get_downloads.

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

Usage Guidelines3/5

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

The description implies usage for retrieving a single model's metadata and license info, but it lacks explicit when-to-use guidance or comparisons with siblings. No exclusions or alternatives are mentioned.

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

sketchfab_list_categoriesList Sketchfab categoriesA
Read-onlyIdempotent

List public Sketchfab model category names and slugs.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
providerYes
categoriesYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint as true/false. The description adds 'public' and 'model category names and slugs' but does not contradict annotations. No additional behavioral context beyond annotations.

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

Conciseness5/5

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

A single concise sentence provides all necessary information without waste. Perfectly front-loaded.

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

Completeness5/5

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

With an output schema present and no parameters, the description is complete. It specifies the resource and output fields (names and slugs), covering all needed context for a simple list tool.

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

Parameters4/5

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

No parameters exist, so schema coverage is 100% by default. The description adds no parameter info, but none is needed. Baseline 4 for zero parameters.

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

Purpose5/5

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

The description clearly states the verb 'list' and the resource 'public Sketchfab model category names and slugs'. It distinguishes the tool from sibling tools like sketchfab_search_models and other list tools.

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

Usage Guidelines2/5

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

The description does not provide guidance on when to use this tool versus alternatives, such as other category listing tools (e.g., polyhaven_list_categories) or search tools. No explicit when-to-use or when-not-to-use information.

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

sketchfab_search_modelsSearch Sketchfab modelsA
Read-onlyIdempotent

Search public Sketchfab models and return per-model license, author, geometry, and archive metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
cursorNo
sortByNorelevance
animatedNo
categoryNo
licensesNo
staffPickedNo
downloadableNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
providerYes
nextCursorNo
downloadAuthenticationYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, openWorldHint=true. Description adds value by detailing returned metadata fields, which goes beyond what annotations convey. No contradictions.

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

Conciseness5/5

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

Single sentence with 15 words, front-loaded with purpose and return info. No wasted words, to the point.

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

Completeness3/5

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

Basic purpose and return are covered, but parameter usage is not explained. Output schema may clarify return structure, but for a tool with 9 optional parameters, more guidance is needed for effective use.

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

Parameters2/5

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

Schema description coverage is 0% with 9 parameters. Description does not explain any parameter semantics (e.g., query, sortBy, filters). It must compensate but fails, leaving agents to guess parameter roles.

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

Purpose5/5

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

Description clearly states 'Search public Sketchfab models' with verb+resource, and specifies return fields (license, author, geometry, archive metadata). This distinguishes from siblings like sketchfab_get_model (single model) or sketchfab_list_categories (categories).

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

Usage Guidelines2/5

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

No explicit when-to-use or when-not-to-use guidance. Implied by context but no alternatives named. Sibling list provides context but description lacks usage instructions.

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

smithsonian_get_assetGet a Smithsonian 3D assetA
Read-onlyIdempotent

Get a normalized summary of one Smithsonian Open Access 3D model.

ParametersJSON Schema
NameRequiredDescriptionDefault
modelIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
titleYes
licenseYes
providerYes
fileTypesYes
qualitiesYes
modelTypesYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already provide readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, covering safety and idempotency. The description adds that the output is a 'normalized summary' but does not elaborate on what normalization entails or disclose other behaviors like rate limits or authentication needs. With rich annotations, the description adds moderate value.

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

Conciseness5/5

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

The description is a single, 12-word sentence that efficiently conveys the core purpose. It is front-loaded with the verb and resource, with no extraneous information.

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

Completeness4/5

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

Given the existence of an output schema, the description need not detail return values. The description is sufficient for understanding the tool's role among many siblings, but the minimalism leaves some questions about the 'normalized summary' concept. Still, it is largely complete for agent selection.

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

Parameters1/5

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

Schema description coverage is 0%, and the description does not mention the modelId parameter at all. While the parameter name and requirement are clear, the description fails to compensate for the lack of schema documentation. It should explain what modelId is or how to obtain it.

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

Purpose5/5

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

The description clearly states the action ('Get') and the resource ('normalized summary of one Smithsonian Open Access 3D model'). It distinguishes from sibling tools like smithsonian_search_assets (search) and smithsonian_list_files (list files), making the tool's unique purpose obvious.

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

Usage Guidelines3/5

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

The description implies usage after searching for a model, but does not explicitly state when to use this tool versus alternatives like smithsonian_search_assets or smithsonian_list_files. No when-not conditions or alternative names are provided.

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

smithsonian_list_filesList Smithsonian 3D filesC
Read-onlyIdempotent

List direct Smithsonian Open Access files with format, quality, compression, and orientation metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
modelIdYes
qualityNo
fileTypeNo
modelTypeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
filesYes
totalYes
licenseYes
providerYes
nextCursorNo

TDQS

C2.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds value by mentioning what metadata is returned (format, quality, compression, orientation). However, it does not describe pagination behavior or rate limits beyond annotations.

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

Conciseness3/5

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

The description is a single sentence with no fluff, but it omits critical information. Conciseness should not sacrifice clarity or completeness.

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

Completeness2/5

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

Given 6 parameters (1 required), many enums, and an output schema, the description fails to explain pagination, filtering, or the relationship between modelId and files. Sibling context suggests this tool is part of a broader ecosystem, but no hints on how it fits.

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

Parameters2/5

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

Schema description coverage is 0%, so the description must compensate. It hints at 'format' and 'quality' parameters but does not explain 'cursor', 'limit', 'fileType', 'modelType', or the required 'modelId'. 'Compression' and 'orientation' are not parameters but output fields, adding confusion.

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

Purpose4/5

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

The description clearly states the action (list files) and resource (Smithsonian Open Access files). It mentions specific metadata types, distinguishing it from sibling tools like smithsonian_search_assets and smithsonian_get_asset. However, it does not explicitly differentiate from non-Smithsonian list tools.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives like asset_list_sources or polyhaven_list_files. The description does not mention prerequisites, filtering, or pagination.

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

smithsonian_search_assetsSearch Smithsonian 3D assetsA
Read-onlyIdempotent

Search Smithsonian Open Access 3D models and file variants by text, type, quality, and owning unit.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNo
cursorNo
qualityNo
fileTypeNo
modelTypeNo
owningUnitNo
dracoCompressedNo
gltfOrientationCompliantNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes
providerYes
nextCursorNo
totalFilesYes

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint, so the safety profile is clear. The description adds minimal behavioral context beyond the search criteria, which is expected given the annotation coverage.

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

Conciseness5/5

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

The description is a single, well-structured sentence of 14 words. It front-loads the purpose and contains no redundant information. Every word earns its place.

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

Completeness2/5

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

Given the complexity (9 parameters, 0% schema description coverage) and the existence of an output schema, the description should cover all major filter options. It only covers a subset, leaving out cursor-based pagination, boolean flags, and file type variants. The output schema helps, but the description is still too sparse for effective tool selection.

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

Parameters2/5

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

Schema description coverage is 0%, placing burden on the description to explain parameters. The description only mentions four categories (text, type, quality, owning unit) but not the other five parameters (limit, cursor, dracoCompressed, gltfOrientationCompliant, and implicit enumeration details). This is insufficient compensation.

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

Purpose5/5

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

The description clearly states the tool searches Smithsonian Open Access 3D models and file variants, with specific filter criteria (text, type, quality, owning unit). It distinguishes itself from sibling tools that search other sources (e.g., fab, polyhaven, sketchfab).

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

Usage Guidelines3/5

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

The description implies usage by specifying the source (Smithsonian) and search criteria, but does not explicitly state when to use this tool versus alternatives. It lacks when-not-to-use guidance or explicit context for choosing among sibling search tools.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 36 tool updatesv0.1.1
    • Addedambientcg_get_asset
    • Addedambientcg_list_categories
    • Addedambientcg_list_files
    • Addedambientcg_search_assets
    • Addedasset_auto_rig
    • Addedasset_download_bundle_animation
    • Addedasset_download_bundle_entry
    • Addedasset_download_file
    • Addedasset_import_unreal
    • Addedasset_inspect_rig
    • Addedasset_list_bundle_animations
    • Addedasset_list_bundle_entries
    • Addedasset_list_sources
    • Addedasset_preview_animation
    • Addedasset_retarget_animations
    • Addedasset_search_sources
    • Addedaudio_download_asset
    • Addedaudio_list_sources
    • Addedaudio_search_assets
    • Addedcreature_guide
    • Addedcreature_status
    • Addedfab_import_asset
    • Addedfab_list_owned
    • Addeditch_download_asset
    • Addeditch_list_downloads
    • Addedpolyhaven_get_asset
    • Addedpolyhaven_list_categories
    • Addedpolyhaven_list_files
    • Addedpolyhaven_search_assets
    • Addedsketchfab_get_downloads
    • Addedsketchfab_get_model
    • Addedsketchfab_list_categories
    • Addedsketchfab_search_models
    • Addedsmithsonian_get_asset
    • Addedsmithsonian_list_files
    • Addedsmithsonian_search_assets
  2. 5 tool updatesv0.1.0
    • First observedfab_download_free_asset
    • First observedfab_get_asset
    • First observedfab_list_filters
    • First observedfab_list_limited_time_free
    • First observedfab_search_assets

TDQS

B3.4/5.0

Scored across 41 tools

Disambiguation4/5

Most tools are cleanly separated by provider prefix and action (search/get/list/download), and asset processing tools target distinct stages (inspect, rig, preview, retarget). A few pairs like asset_list_sources vs asset_search_sources and several download variants could cause hesitation, but descriptions provide enough boundary detail. The unrelated creature_status and creature_guide are distinct from each other but oddly placed.

Naming Consistency4/5

Tool names overwhelmingly follow a source_verb_noun convention such as polyhaven_get_asset, itch_download_asset, and sketchfab_list_categories, making the set predictable. Deviations include the generic asset_* family with mixed object nouns and the two creature_* names that do not follow the pattern, though these are minor relative to the total.

Tool Count2/5

41 tools is far beyond the usual well-scoped MCP surface. While the server aggregates many provider integrations plus a processing pipeline, the count still feels heavy and increases cognitive load. The bundle, audio, and creature subsets could be split into separate servers or trimmed significantly.

Completeness4/5

The asset lifecycle is well covered: discover, inspect metadata, list files, download, rig/retarget, preview, and import for the major supported sources. Minor gaps exist, such as no direct guarded download path for Sketchfab URLs and no category listing for audio, but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers