Fab MCP
Fab MCP is an MCP interface for discovering, searching, inspecting, and selectively downloading 3D assets, textures, HDRIs, audio, and more from multiple providers. Key capabilities include:
Asset Discovery & Search
Search across Fab, Poly Haven, ambientCG, Smithsonian 3D, Sketchfab, game audio libraries, and curated itch.io packs.
Identify "agent-ready" sources supporting direct, automated downloads without logins or paywalls.
Filter by tags, formats, categories, licenses (CC0, CC-BY, etc.), price range, rating, and more.
Fab-Specific
Search public Fab marketplace listings (defaults to free assets) with extensive filtering.
Retrieve detailed asset metadata: licenses, pricing, formats, files, media, and compatibility.
List available filter options (categories, formats, licenses, channels).
Discover curated limited-time-free promotions.
Download free Fab asset files (Blender, FBX, GLB, OBJ, Unity, etc.) locally after EULA acknowledgment — no purchase or library acquisition performed.
Poly Haven, ambientCG & Smithsonian
Search and retrieve metadata for HDRIs, textures, and 3D models.
Browse categories, resolutions, formats, and licensing details.
Download files with integrity checks (SHA-256/MD5).
Sketchfab
Anonymously search public models with author, license, and geometry metadata.
Retrieve temporary download URLs using a user-provided API token (never stored or logged).
Game Audio
List and search curated audio packs (Kenney, Sonniss, Tallbeard, etc.) with license and commercial-use metadata.
Download catalog audio assets after license acceptance, with HTTPS allowlisting and byte caps.
Curated itch.io Packs & Bundle Handling
List and download files from curated itch.io packs after license acceptance.
Read ZIP archive directory structures via HTTP byte ranges (no full download needed).
Extract individual files or animations from bundles, with SHA-256 caching.
List and export named animation clips from aggregate GLB bundles as standalone animation-only GLBs.
All downloads are guarded (allowlisted hosts, integrity checks, byte caps) and stored locally.
Provides tools for listing and downloading assets from curated itch.io packs, including individual file downloads and bundle entry extraction from Quaternius, Tallbeard, Brackeys, and KayKit packs.
Includes Pixabay as a source in its curated game-audio catalog, enabling search and download of audio assets from Pixabay.
Provides tools for searching and retrieving public 3D models, model details, categories, and download URLs (requires API token) from Sketchfab.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Fab MCPsearch for free 3D models"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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-mcpFor a local checkout:
npm ci
npm run browser:install
npm run typecheck
npm test
npm run build
node dist/index.jsPlaywright 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.priceModedefaults tofree; useanyorrangeexplicitly 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-freepage through the dedicated browser, then resolves them through the normal detail client; it never substitutes generalis_free=1search.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 plusimport-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. Useresolutionandformatto select usable variants; follownextCursoruntil 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— usesSKETCHFAB_API_TOKENto 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-directorprovider-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 afteracceptLicense: 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 afteracceptLicense: 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. PassagentReadyOnly: falseto 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 bypolyhaven_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:
Call
asset_search_sourceswith the requested category/query. Its default result set is guaranteed to contain only agent-ready sources.Call the returned
searchToolordetailToolwhen present.Resolve variants with the returned
filesTool.Call the returned
downloadToolwithacceptLicense: true.For aggregate Quaternius animation libraries, skip whole-pack download:
itch_list_downloads→asset_list_bundle_animations→asset_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 | GLB geometry with centimetres converted to metres; verified on Fab Office Pack Vol.1 (47/47 meshes) |
Standalone | Collision-free source-relative PNGs under |
| Collision-free 2:1 equirectangular PNG or lossless Radiance HDR files under |
| Collision-free RGBA8 slice data plus JSON dimensions under |
Standalone | One directly loadable |
Standalone | Collision-free WAV/Ogg/MP3/FLAC files under |
Runtime | Validated TTF/OTF faces under collision-free |
Offline | Pre-baked glyph pages and serialized |
Paper2D | 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 | 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 | Grouped sprite instances become |
| Collision-free, directly fetchable JSON under |
Modern UE5 loose static meshes, skeletal meshes, | 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 |
Separate roughness/metalness, solid palette maps, glass, and mirrors | Packed glTF PBR maps or explicit material fallbacks; extra graph inputs remain named sidecars |
UE4 | 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 |
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 |
UE4 editor | 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 |
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 |
|
| Direct JSON request timeout. |
|
| Dedicated browser request timeout. |
|
| Headed-mode grace period for visible verification. |
|
| Set to |
| OS state directory under | MCP-owned Fab browser state. |
|
| Dedicated directory for Fab free-file downloads. |
|
| Maximum accepted download size in bytes. |
|
| Total timeout for one file download. |
| auto-detected on | curl-impersonate wrapper override; |
|
| Minimum spacing between direct upstream requests. |
|
|
|
|
| Set to |
| unset | User token for temporary Sketchfab download URLs. |
|
| Dedicated directory for curated audio downloads. |
|
| Maximum accepted bytes per audio archive (10 GiB). |
|
| Total timeout for one audio download (30 minutes). |
|
| Dedicated directory for direct provider downloads. |
|
| Maximum accepted bytes per provider file (10 GiB). |
|
| Total timeout for one provider download (30 minutes). |
|
| Set to |
| OS cache under | UE Viewer, FabCLI, and uncooked-converter cache. |
| auto-detected/provisioned | Absolute path to a UE Viewer executable override. |
| auto-detected/provisioned | Absolute path to |
| 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:liveLive checks are opt-in because they contact Fab:
npm run test:liveThis 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 toolsambientcg_get_assetGet an ambientCG assetARead-onlyIdempotent
Get normalized metadata and CC0 licensing for one ambientCG asset.
| Name | Required | Description | Default |
|---|---|---|---|
| assetId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| maps | Yes | |
| tags | Yes | |
| type | Yes | |
| title | Yes | |
| license | Yes | |
| provider | Yes | |
| technique | No | |
| dimensions | No | |
| description | No | |
| releaseDate | No | |
| thumbnailUrl | No | |
| downloadCount | No |
TDQS
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.
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.
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.
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.
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.
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 categoriesBRead-onlyIdempotent
List ambientCG category metadata and asset counts.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| provider | Yes | |
| categories | Yes |
TDQS
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.
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.
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.
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.
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.
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 filesBRead-onlyIdempotent
List official CC0 asset archives with variant attributes, extensions, URLs, and byte sizes.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| assetId | Yes | ||
| extension | No | ||
| attributes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| total | Yes | |
| license | Yes | |
| provider | Yes | |
| nextCursor | No |
TDQS
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.
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.
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.
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.
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.
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 assetsCRead-onlyIdempotent
Search CC0 materials, HDRIs, models, decals, atlases, brushes, terrains, and other ambientCG assets.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | popular | |
| type | No | ||
| limit | No | ||
| query | No | ||
| cursor | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes | |
| provider | Yes | |
| nextCursor | No |
TDQS
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.
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.
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.
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.
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.
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 humanoidAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| output | Yes | Output .glb path under projectRoot. | |
| target | Yes | Absolute path to an unrigged humanoid GLB. | |
| overrides | No | ||
| replaceRig | No | ||
| weightMode | No | smooth | |
| orientation | No | ||
| priorDigest | No | ||
| projectRoot | Yes | Project root that must contain the output. | |
| maxInfluences | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| bytes | Yes | |
| joints | Yes | |
| output | Yes | |
| sha256 | Yes | |
| status | Yes | |
| target | Yes | |
| measure | Yes | |
| replaced | Yes | |
| landmarks | Yes | |
| weightMode | Yes | |
| ambiguities | Yes | |
| diagnostics | Yes | |
| orientation | Yes | |
| maxInfluences | Yes | |
| alreadyExisted | Yes | |
| skinnedVertices | Yes | |
| maxNormalizationError | Yes |
TDQS
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.
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.
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.
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.
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.
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 GLBAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | ||
| uploadId | Yes | ||
| entryPath | No | ||
| acceptLicense | Yes | ||
| animationName | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| packId | Yes | |
| sha256 | Yes | |
| license | Yes | |
| uploadId | Yes | |
| entryPath | Yes | |
| sizeBytes | Yes | |
| animationName | Yes | |
| alreadyExisted | Yes | |
| aggregateEntryBytes | Yes | |
| attributionRequired | Yes | |
| rangeBytesTransferred | Yes | |
| aggregateAlreadyCached | Yes |
TDQS
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.
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.
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.
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.
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.
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 bundleAIdempotent
Extract one selected ZIP entry through HTTP byte ranges, cache it locally, and avoid downloading unrelated bundle contents. Requires explicit license acknowledgement.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | ||
| uploadId | Yes | ||
| entryPath | Yes | ||
| acceptLicense | Yes | Required acknowledgement of the pack license returned by itch_list_downloads or asset_list_bundle_entries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| packId | Yes | |
| sha256 | Yes | |
| license | Yes | |
| uploadId | Yes | |
| entryPath | Yes | |
| sizeBytes | Yes | |
| alreadyCached | Yes | |
| attributionRequired | Yes | |
| rangeBytesTransferred | Yes |
TDQS
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.
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.
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.
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.
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.
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 fileAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | ||
| fileName | Yes | ||
| provider | Yes | ||
| acceptLicense | Yes | Required acknowledgement that the caller reviewed and accepts the license metadata returned by the provider's search/detail/file tools. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| sha256 | Yes | |
| fileName | Yes | |
| provider | Yes | |
| sizeBytes | Yes | |
| sourceUrl | Yes | |
| alreadyExisted | Yes | |
| licenseAcknowledged | Yes |
TDQS
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.
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.
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.
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.
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.
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 directoryAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| packages | No | Import only these package names, for example ["SM_Rock", "DemoMap"]. Omit to convert every supported mesh and level in the pack; a large marketplace pack is many gigabytes of GLBs. | |
| outputDir | Yes | Directory the source GLBs are written to, normally <game>/assets/fab/<listing-id>. It must not already hold a different import; this tool never overwrites one. | |
| sourceDir | Yes | A local directory of Unreal .uasset/.umap files, for example an already downloaded Fab pack. | |
| maxTextureSize | No | Optional longest edge for embedded textures. Leave unset to keep Unreal's own resolution and let the ThreeNative asset compiler cap it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| audio | Yes | |
| fonts | Yes | |
| counts | Yes | |
| failed | Yes | |
| models | Yes | |
| reused | Yes | |
| scenes | Yes | |
| license | No | |
| skipped | Yes | |
| sprites | Yes | |
| cubemaps | Yes | |
| textures | Yes | |
| warnings | Yes | |
| flipbooks | Yes | |
| materials | Yes | |
| outputDir | Yes | |
| dataAssets | Yes | |
| durationMs | Yes | |
| reportPath | Yes | |
| bitmapFonts | Yes | |
| textureStacks | Yes | |
| materialAssets | Yes | |
| materialCoverage | Yes |
TDQS
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.
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.
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.
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.
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.
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 donorsBRead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | Absolute path to the humanoid GLB under inspection, or a pinned sample reference to acquire into the development cache. | |
| libraries | No | Optional local UAL ZIP archives or GLB libraries used as animation donors. |
Output Schema
| Name | Required | Description |
|---|---|---|
| limits | Yes | |
| target | Yes | |
| catalog | Yes | |
| sources | Yes | |
| libraries | Yes | |
| acquisition | Yes | |
| attachmentCandidates | Yes |
TDQS
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.
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.
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.
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.
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.
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 GLBARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | ||
| uploadId | Yes | ||
| entryPath | No | Optional aggregate GLB path. Omit to select the standard non-root-motion GLB automatically. |
Output Schema
| Name | Required | Description |
|---|---|---|
| packId | Yes | |
| license | Yes | |
| uploadId | Yes | |
| entryPath | Yes | |
| animations | Yes | |
| alreadyCached | Yes | |
| aggregateEntryBytes | Yes | |
| attributionRequired | Yes | |
| rangeBytesTransferred | Yes |
TDQS
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.
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.
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.
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.
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.
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 bundleARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | ||
| uploadId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| packId | Yes | |
| entries | Yes | |
| license | Yes | |
| uploadId | Yes | |
| sourcePageUrl | Yes | |
| attributionRequired | Yes | |
| rangeBytesTransferred | Yes |
TDQS
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.
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.
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.
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.
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.
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 sourcesARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| agentReadyOnly | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| sources | Yes |
TDQS
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.
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.
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.
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.
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.
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 clipAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| clip | No | ||
| pose | No | ||
| times | No | ||
| width | No | ||
| angles | No | ||
| height | No | ||
| output | Yes | Output contact-sheet .png path under projectRoot. | |
| prepared | Yes | Absolute path to a prepared (rigged or retargeted) GLB. | |
| priorDigest | No | ||
| projectRoot | Yes | Project root that must contain the output. |
Output Schema
| Name | Required | Description |
|---|---|---|
| bounds | Yes | |
| canvas | Yes | |
| images | Yes | |
| output | Yes | |
| reason | Yes | |
| status | Yes | |
| tracks | Yes | |
| backend | Yes | |
| animations | Yes | |
| boundTracks | Yes | |
| sampledTimes | Yes | |
| contactSheetSha256 | Yes |
TDQS
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.
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.
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.
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.
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.
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 targetAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| clips | Yes | ||
| output | Yes | Output .glb path under projectRoot. | |
| target | Yes | Absolute path to the prepared target GLB (e.g. the AETHER sample). | |
| mapping | No | ||
| priorDigest | No | ||
| projectRoot | Yes | Project root that must contain the output. | |
| keepExistingClips | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| bytes | Yes | |
| clips | Yes | |
| output | Yes | |
| sha256 | Yes | |
| status | Yes | |
| mapping | Yes | |
| replaced | Yes | |
| alreadyExisted | Yes | |
| animationBytes | Yes | |
| animationCount | Yes | |
| meshTextureBytes | Yes | |
| keepExistingClips | Yes |
TDQS
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.
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.
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.
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.
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.
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 sourcesARead-onlyIdempotent
Search agent-ready asset sources by category, license, access mode, or text query. Manual/provider-page sources are excluded unless agentReadyOnly=false.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | ||
| access | No | all | |
| license | No | all | |
| category | No | all | |
| agentReadyOnly | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| sources | Yes |
TDQS
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.
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.
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.
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.
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.
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 packAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| assetId | Yes | ||
| acceptLicense | Yes | Required acknowledgement that the caller reviewed and accepts the asset license returned by audio_search_assets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| sha256 | Yes | |
| assetId | Yes | |
| license | Yes | |
| fileName | Yes | |
| sourceId | Yes | |
| sizeBytes | Yes | |
| sourcePageUrl | Yes | |
| alreadyExisted | Yes | |
| attributionText | No | |
| attributionRequired | Yes |
TDQS
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.
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.
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.
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.
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.
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 sourcesARead-onlyIdempotent
List supported audio libraries, best uses, licensing caveats, browse pages, and whether this MCP has a curated direct-download contract.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| sources | Yes |
TDQS
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.
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.
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.
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.
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.
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 packsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | all | |
| limit | No | ||
| query | No | ||
| cursor | No | ||
| source | No | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes | |
| nextCursor | No |
TDQS
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.
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.
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.
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.
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.
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 guidanceARead-onlyIdempotent
Read a bounded syntax or workflow section from the verified anyCreature 1.3.1 payload. This does not run or extract the compiler.
| Name | Required | Description | Default |
|---|---|---|---|
| section | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| guide | Yes | |
| section | Yes | |
| upstream | Yes | |
| integrity | Yes | |
| attribution | Yes |
TDQS
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.
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.
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.
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.
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.
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 availabilityARead-onlyIdempotent
Report the pinned anyCreature payload, currently available operations, and optional local tooling without starting a browser or requesting credentials.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| setup | Yes | |
| limits | Yes | |
| tooling | Yes | |
| upstream | Yes | |
| integrity | Yes | |
| operations | Yes | |
| attribution | Yes |
TDQS
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.
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.
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.
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.
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.
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 fileAIdempotent
Download one directly available free Fab file into the configured local download directory. This never purchases or adds an asset to a library.
| Name | Required | Description | Default |
|---|---|---|---|
| format | Yes | ||
| acceptFabEula | Yes | Required acknowledgement that the user accepts the Fab EULA linked by the listing. | |
| listingIdOrUrl | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| format | Yes | |
| sha256 | Yes | |
| fileName | Yes | |
| listingId | Yes | |
| sizeBytes | Yes | |
| alreadyExisted | Yes | |
| authentication | Yes |
TDQS
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.
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.
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.
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.
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.
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 assetARead-onlyIdempotent
Get normalized public details and per-license prices for one Fab listing.
| Name | Required | Description | Default |
|---|---|---|---|
| currency | No | ||
| listingIdOrUrl | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| tags | Yes | |
| files | Yes | |
| media | Yes | |
| title | Yes | |
| formats | Yes | |
| category | No | |
| isMature | No | |
| licenses | Yes | |
| warnings | Yes | |
| publisher | No | |
| transport | Yes | |
| updatedAt | No | |
| breadcrumb | Yes | |
| allowsAiUse | No | |
| description | No | |
| publishedAt | No | |
| hasChangelog | No | |
| thumbnailUrl | No | |
| compatibility | Yes | |
| isAiGenerated | No | |
| freeLicenseSlugs | Yes | |
| rawContractVersion | Yes | |
| descriptionTruncated | Yes |
TDQS
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.
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.
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.
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.
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.
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 assetAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| engine | No | Unreal engine selector, for example UE_4.21. Required when the listing publishes several artifacts. | |
| packages | No | Import only these package names, for example ["SM_Rock", "DemoMap"]. Omit to convert every supported mesh and level in the pack; a large marketplace pack is many gigabytes of GLBs. | |
| platform | No | Platform build to download when the artifact publishes several, for example Windows. | |
| outputDir | Yes | Directory the source GLBs are written to, normally <game>/assets/fab/<listing-id>. It must not already hold a different import; this tool never overwrites one. | |
| acceptFabEula | Yes | Required acknowledgement that the user accepts the Fab EULA for the listing they already own. | |
| listingIdOrUrl | Yes | ||
| maxTextureSize | No | Optional longest edge for embedded textures. Leave unset to keep Unreal's own resolution and let the ThreeNative asset compiler cap it. |
Output Schema
| Name | Required | Description |
|---|---|---|
| audio | Yes | |
| fonts | Yes | |
| counts | Yes | |
| failed | Yes | |
| models | Yes | |
| reused | Yes | |
| scenes | Yes | |
| license | No | |
| skipped | Yes | |
| sprites | Yes | |
| cubemaps | Yes | |
| textures | Yes | |
| warnings | Yes | |
| flipbooks | Yes | |
| materials | Yes | |
| outputDir | Yes | |
| dataAssets | Yes | |
| durationMs | Yes | |
| reportPath | Yes | |
| bitmapFonts | Yes | |
| textureStacks | Yes | |
| materialAssets | Yes | |
| materialCoverage | Yes |
TDQS
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.
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.
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.
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.
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.
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 filtersBRead-onlyIdempotent
List usable public Fab filter labels and slugs. A warning identifies versioned fallback or stale values.
| Name | Required | Description | Default |
|---|---|---|---|
| kinds | No | ||
| refresh | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| source | Yes | |
| filters | Yes | |
| warnings | Yes | |
| capturedAt | Yes | |
| contractVersion | Yes |
TDQS
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.
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.
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.
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.
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.
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 promotionsARead-onlyIdempotent
List Fab's dedicated curated limited-time-free promotions separately from general free search.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| source | Yes | |
| warnings | Yes |
TDQS
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.
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.
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.
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.
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.
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 ownsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Case-insensitive substring of the title or category. Omit to list everything. | |
| unrealOnly | No | Keep only what fab_import_asset can actually take: a listing UID plus a published Unreal artifact. Drops the engine installs and code plugins a library also contains. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | |
| listings | Yes |
TDQS
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.
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.
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.
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.
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.
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 assetsCRead-onlyIdempotent
Search public Fab marketplace listings. Free assets are returned by default.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevance | |
| tags | No | ||
| limit | No | ||
| query | No | ||
| cursor | No | ||
| formats | No | ||
| channels | No | ||
| currency | No | ||
| licenses | No | ||
| maxPrice | No | ||
| minPrice | No | ||
| priceMode | No | free | |
| publisher | No | ||
| categories | No | ||
| aiGenerated | No | ||
| allowsAiUse | No | ||
| listingTypes | No | ||
| minimumRating | No | ||
| publishedSince | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| warnings | Yes | |
| transport | Yes | |
| nextCursor | No | |
| appliedFilters | Yes |
TDQS
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.
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.
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.
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.
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.
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 packAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes | ||
| uploadId | Yes | ||
| acceptLicense | Yes | Required acknowledgement that the caller accepts the CC0 terms and any pack-specific cautions returned by itch_list_downloads. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| path | Yes | |
| packId | Yes | |
| sha256 | Yes | |
| license | Yes | |
| fileName | Yes | |
| uploadId | Yes | |
| sizeBytes | Yes | |
| sourcePageUrl | Yes | |
| alreadyExisted | Yes | |
| attributionRequired | Yes |
TDQS
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.
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.
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.
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.
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.
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 downloadsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| packId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| packId | Yes | |
| caution | No | |
| license | Yes | |
| downloads | Yes | |
| sourcePageUrl | Yes | |
| attributionRequired | Yes |
TDQS
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.
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.
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.
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.
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.
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 assetARead-onlyIdempotent
Get normalized metadata, authorship, dimensions, and CC0 license information for one Poly Haven asset.
| Name | Required | Description | Default |
|---|---|---|---|
| assetId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| lods | No | |
| name | Yes | |
| tags | Yes | |
| type | Yes | |
| authors | Yes | |
| donated | No | |
| license | Yes | |
| category | No | |
| provider | Yes | |
| filesHash | No | |
| polycount | No | |
| attributes | Yes | |
| categoryId | No | |
| dimensions | No | |
| description | No | |
| publishedAt | No | |
| thumbnailUrl | No | |
| downloadCount | No | |
| maxResolution | No |
TDQS
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.
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.
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.
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.
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.
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 categoriesARead-onlyIdempotent
List Poly Haven category labels and asset counts for HDRIs, textures, or models.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| provider | Yes | |
| categories | Yes |
TDQS
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.
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.
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.
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.
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.
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 filesARead-onlyIdempotent
List official download URLs, byte sizes, MD5 hashes, and file dependencies for a Poly Haven asset, with format and resolution filters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| format | No | ||
| assetId | Yes | ||
| resolution | No | ||
| includeDependencies | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| total | Yes | |
| provider | Yes | |
| nextCursor | No |
TDQS
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.
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.
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.
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.
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.
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 assetsBRead-onlyIdempotent
Search CC0 HDRIs, textures, and models from Poly Haven. Results include explicit Poly Haven attribution.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | relevance | |
| type | No | all | |
| limit | No | ||
| query | No | ||
| cursor | No | ||
| categories | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| total | Yes | |
| provider | Yes | |
| nextCursor | No | |
| attribution | Yes |
TDQS
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.
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.
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.
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.
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.
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 URLsARead-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.
| Name | Required | Description | Default |
|---|---|---|---|
| modelId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| warning | Yes | |
| provider | Yes | |
| downloads | Yes | |
| authentication | Yes |
TDQS
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.
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.
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.
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.
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.
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 modelARead-onlyIdempotent
Get public metadata and explicit Creative Commons requirements for one Sketchfab model.
| Name | Required | Description | Default |
|---|---|---|---|
| modelId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| name | Yes | |
| tags | Yes | |
| author | No | |
| license | No | |
| animated | Yes | |
| archives | Yes | |
| embedUrl | No | |
| provider | Yes | |
| faceCount | No | |
| likeCount | No | |
| updatedAt | No | |
| viewCount | No | |
| viewerUrl | Yes | |
| categories | Yes | |
| description | No | |
| publishedAt | No | |
| vertexCount | No | |
| downloadable | Yes | |
| thumbnailUrl | No | |
| ageRestricted | No | |
| downloadCount | No |
TDQS
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.
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.
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.
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.
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.
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 categoriesARead-onlyIdempotent
List public Sketchfab model category names and slugs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| provider | Yes | |
| categories | Yes |
TDQS
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.
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.
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.
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.
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.
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 modelsARead-onlyIdempotent
Search public Sketchfab models and return per-model license, author, geometry, and archive metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| cursor | No | ||
| sortBy | No | relevance | |
| animated | No | ||
| category | No | ||
| licenses | No | ||
| staffPicked | No | ||
| downloadable | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| provider | Yes | |
| nextCursor | No | |
| downloadAuthentication | Yes |
TDQS
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.
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.
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.
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.
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.
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 assetARead-onlyIdempotent
Get a normalized summary of one Smithsonian Open Access 3D model.
| Name | Required | Description | Default |
|---|---|---|---|
| modelId | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| url | Yes | |
| title | Yes | |
| license | Yes | |
| provider | Yes | |
| fileTypes | Yes | |
| qualities | Yes | |
| modelTypes | Yes |
TDQS
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.
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.
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.
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.
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.
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 filesCRead-onlyIdempotent
List direct Smithsonian Open Access files with format, quality, compression, and orientation metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| modelId | Yes | ||
| quality | No | ||
| fileType | No | ||
| modelType | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| total | Yes | |
| license | Yes | |
| provider | Yes | |
| nextCursor | No |
TDQS
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.
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.
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.
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.
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.
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 assetsARead-onlyIdempotent
Search Smithsonian Open Access 3D models and file variants by text, type, quality, and owning unit.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| cursor | No | ||
| quality | No | ||
| fileType | No | ||
| modelType | No | ||
| owningUnit | No | ||
| dracoCompressed | No | ||
| gltfOrientationCompliant | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| provider | Yes | |
| nextCursor | No | |
| totalFiles | Yes |
TDQS
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.
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.
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.
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.
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.
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.
36 tool updates
v0.1.1- Added
ambientcg_get_asset - Added
ambientcg_list_categories - Added
ambientcg_list_files - Added
ambientcg_search_assets - Added
asset_auto_rig - Added
asset_download_bundle_animation - Added
asset_download_bundle_entry - Added
asset_download_file - Added
asset_import_unreal - Added
asset_inspect_rig - Added
asset_list_bundle_animations - Added
asset_list_bundle_entries - Added
asset_list_sources - Added
asset_preview_animation - Added
asset_retarget_animations - Added
asset_search_sources - Added
audio_download_asset - Added
audio_list_sources - Added
audio_search_assets - Added
creature_guide - Added
creature_status - Added
fab_import_asset - Added
fab_list_owned - Added
itch_download_asset - Added
itch_list_downloads - Added
polyhaven_get_asset - Added
polyhaven_list_categories - Added
polyhaven_list_files - Added
polyhaven_search_assets - Added
sketchfab_get_downloads - Added
sketchfab_get_model - Added
sketchfab_list_categories - Added
sketchfab_search_models - Added
smithsonian_get_asset - Added
smithsonian_list_files - Added
smithsonian_search_assets
5 tool updates
v0.1.0- First observed
fab_download_free_asset - First observed
fab_get_asset - First observed
fab_list_filters - First observed
fab_list_limited_time_free - First observed
fab_search_assets
TDQS
Scored across 41 tools
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.
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.
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.
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
Related MCP Connectors
An MCP server that provides asset auto generator
Marketplace of MCP servers and agent skills, free and paid, where developers publish and monetise.
Search and install 4,000+ security-scanned MCP servers from inside any MCP-aware AI client.
MCP server for accessing curated awesome list documentation
Related MCP Servers
- AlicenseBqualityDmaintenanceAn MCP server that allows searching for and retrieving information about Model Context Protocol servers registered on the MCP Hub.12MIT
- FlicenseNot gradedqualityFmaintenanceAn MCP server for the Envato API that enables searching, purchasing, and downloading assets.-
- AlicenseNot gradedqualityBmaintenanceA Python MCP server for searching, downloading, extracting, inspecting, and previewing game assets from multiple public sources.1MIT
- AlicenseAqualityCmaintenanceThis MCP server enables free web search and page content extraction using real browsers, with support for multiple search engines and stealth browser backends. It provides tools for searching, fetching pages, and setting up the Camoufox stealth browser.3MIT