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 "Install 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.
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.
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). |
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
5 toolsfab_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?
The description adds context beyond annotations: it clarifies the download goes to a 'configured local download directory' and that the operation does not involve purchasing. Annotations indicate idempotentHint true and destructiveHint false, which align with the description.
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 one sentence, front-loaded with the core action. It is concise but could be more structured by parameter groupings. 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?
Given 3 parameters, annotations, and an output schema, the description explains the download action and clarifies no purchase. However, it omits details about the output schema structure, error conditions, or format variations. Adequate but not comprehensive.
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 is described). The description mentions 'free Fab file' but does not explain the meaning of format (enum), listingIdOrUrl (which must be a free listing), or the required Eula acceptance. The description fails to compensate for the low schema 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 downloads a 'free Fab file' and specifies it never purchases or adds to a library. It distinguishes from siblings like 'fab_search_assets' and 'fab_get_asset' by focusing on download of free files.
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 only for free assets by stating 'free' and 'never purchases'. However, it does not explicitly list when not to use it or suggest alternatives like a purchase tool. Context is clear but lacks explicit exclusions.
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, idempotentHint, and destructiveHint false. Description adds that details are 'normalized' and 'public', and includes prices. Adequate but does not go beyond basic safety profile.
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 no fluff. Front-loads the action and result. 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?
With output schema available, return values are covered. Description mentions key outputs (details, prices). Minor gap: no mention that it only fetches one listing, but sibling context clarifies.
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 description should clarify parameters. It does not explain 'listingIdOrUrl' or 'currency' beyond their names. Lacks detail on format, defaults, or behavior.
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 verb 'Get', resource 'Fab listing', and specifics 'normalized public details and per-license prices'. Distinguishes from siblings like fab_search_assets which searches multiple listings.
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. Usage is implied for a single listing retrieval, but no exclusions or alternatives mentioned.
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 filtersCRead-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?
Annotations already indicate idempotent, read-only, and non-destructive behavior. The description adds that a warning identifies 'versioned fallback or stale values,' providing some extra insight, but does not explain what that means or detail the output.
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 very concise at two sentences, front-loading the main action. However, it could be slightly improved by adding parameter context without losing 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?
With an output schema present, return values are covered externally. However, the complete lack of parameter descriptions and usage context makes it incomplete for an agent to use effectively.
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%, meaning the description provides no information about the two parameters ('kinds' and 'refresh'). Without any parameter description, the tool is hard to use correctly.
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' and mentions a warning for stale values. This distinguishes it from sibling tools that deal with assets or downloads, though it could explicitly link to filter usage in 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?
No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites or context such as being a precursor to fab_search_assets.
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 the tool as read-only, idempotent, and non-destructive. The description adds context about the curated nature of the promotions, which is valuable beyond the 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 conveys the core purpose without waste, but could be more informative about parameters.
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 simple list tool with an output schema, the description covers the purpose but misses parameter guidance, which is needed for proper 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 0% description coverage for the 'limit' parameter, and the description provides no additional meaning or usage guidance for 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 tool lists 'Fab's dedicated curated limited-time-free promotions' and distinguishes it from 'general free search,' specifying the exact verb and resource.
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 using this tool for limited-time-free promotions and not for general free search, but does not explicitly name alternatives or provide when-not-to-use guidance.
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, openWorldHint, idempotentHint, and destructiveHint. The description adds that free assets are the default, which is a specific behavioral trait. 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 extremely concise (two sentences), but given the tool's complexity (19 parameters, 0% schema coverage), it is under-specified. Conciseness should not come at the expense of clarity; more detail on parameters and usage is needed.
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 19 parameters and no schema descriptions, the description fails to provide adequate context for the tool's capabilities. It does not mention pagination, filtering logic, or key use cases, despite an output schema being present. The description is too minimal 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%, meaning no parameter descriptions exist. The tool description does not explain any of the 19 parameters (e.g., cursor, tags, channels). It only hints at priceMode via the 'free assets' default, which is insufficient for effective parameter use.
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 and notes that free assets are returned by default, which distinguishes it from siblings like fab_get_asset (single asset) and fab_list_limited_time_free. However, it does not explicitly contrast with all siblings, so it slightly misses the top score.
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 is provided on when to use this tool versus alternatives like fab_list_limited_time_free or fab_download_free_asset. The description implies default behavior (free assets) but does not explain context or exclusion criteria.
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. Dates show when Glama detected each change.
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
Each tool targets a distinct aspect: search, asset details, filters, free promotions, and download. No overlap in functionality.
All tools follow the consistent 'fab_verb_noun' pattern, using snake_case and clear verbs (search, get, list, download).
Five tools is appropriate for the focused domain of searching and acquiring free assets from Fab marketplace. Not too few or too many.
Covers the core workflow: search, get details, list filters, list free promotions, and download free assets. Minor gap: no support for paid purchases or library management, but that seems intentional.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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
- AlicenseBqualityFmaintenanceAn 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.MIT
- 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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/jonit-dev/threenative-asset-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server