A Model Context Protocol server that lets AI clients find, inspect and download game-ready 3D assets, textures, HDRIs, animations and audio. It gives each provider structured search, metadata and guarded downloads, and it converts owned Unreal/Fab packs and Unity Asset Store packages to GLB.
Status: experimental. Fab's
/i/*JSON routes are undocumented and can change or restrict automated access. Sketchfab licenses vary per model. Review each provider's terms and each asset's license. Unreal and Unity support cover specific formats and verified cases; they do not certify whole packs. Unity imports are verified on three real packs; real Unity Editor reference renders are not yet available. Blendkit is optional and needs documented provider permission. Live Blendkit downloads remain UNVERIFIED.
| I want to… | Read |
|---|---|
| Install it and connect my MCP host | Install and Host configuration below |
| See every tool and how to chain them | docs/tools.md |
| Generate or inspect game audio | docs/audio.md |
| Import an Unreal / Fab pack as GLB | docs/unreal-import.md |
| Import a Unity Asset Store package as GLB | docs/unity-import.md |
| Check which Unreal formats work | docs/unreal-format-support.md |
| Check which Unity formats work | docs/unity-format-support.md |
| Load imported assets in Three.js | docs/unreal-threejs-usage.md |
| Read what each importer version changed | docs/unreal-importer-history.md |
| Set environment variables | docs/configuration.md |
| Understand provider rules, caching and TLS | docs/providers.md |
| Fix an error, or learn what the browser profile touches | docs/troubleshooting.md |
| Run the tests and CI checks | docs/development.md |
| Read the Fab API contract notes | docs/fab-contract.md |
| Use Blendkit (optional, permission required) | docs/blendkit-integration.md |
| Provider | Content | License | Needs |
|---|---|---|---|
| Fab | 3D, free-file downloads, owned Unreal packs | Per listing | FabCLI login for owned packs only |
| Poly Haven | HDRIs, textures, models | CC0 (API use needs a visible credit) | Nothing |
| ambientCG | Materials, HDRIs, decals, models | CC0 | Nothing |
| Smithsonian 3D | Open Access scanned models | Open Access | Nothing |
| Sketchfab | Public models | Varies per model | SKETCHFAB_API_TOKEN for downloads only |
| Kenney | 3D packs, audio | CC0 | Nothing |
| itch.io (curated) | Quaternius animations, KayKit, Brackeys VFX, Tallbeard music | CC0 | Nothing |
| Blendkit (optional) | Free models through your own Blendkit-Client | Private use only, never redistributed | Local Client plus BLENDKIT_PROVIDER_PERMISSION |
| Game audio catalog | Sonniss, Kenney, Tallbeard, Scott Buckley, Mixkit, Pixabay, Freesound, OpenGameArt, Abstraction | Per source | ELEVENLABS_API_KEY for generation only |
Fab search defaults to free assets, meaning at least one license tier is free. Call fab_get_asset before
making license or price claims. More in docs/providers.md.
- Node.js 20.19 or newer
- Playwright Chromium, only when Fab requests browser verification
- FFmpeg and FFprobe on
PATHfor the audio tools - Unreal imports on Linux also need build packages for older packs. Run
npm run doctorfor the list. See docs/unreal-import.md. - Unity imports need Blender 4.5 LTS to read FBX models. The MCP downloads a pinned copy into its toolchain cache on first use. See docs/unity-import.md.
No Epic or Fab login is needed for search and free downloads. The MCP never signs in for you.
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 build
node dist/index.jsCodex (~/.codex/config.toml):
[mcp_servers.assets]
command = "npx"
args = ["-y", "threenative-asset-mcp"]Claude Desktop:
{
"mcpServers": {
"assets": {
"command": "npx",
"args": ["-y", "threenative-asset-mcp"]
}
}
}VS Code (.vscode/mcp.json):
{
"servers": {
"assets": {
"type": "stdio",
"command": "npx",
"args": ["-y", "threenative-asset-mcp"]
}
}
}For a local build, use command = "node" and the absolute path to dist/index.js. Restart the host after
changing its configuration.
| Group | Tools |
|---|---|
| Unified | asset_search_sources, asset_search, asset_get, asset_download, asset_download_file |
| Fab | fab_search_assets, fab_get_asset, fab_download_free_asset, fab_list_owned, fab_import_asset |
| Poly Haven | polyhaven_search_assets, polyhaven_get_asset, polyhaven_list_files |
| ambientCG | ambientcg_search_assets, ambientcg_get_asset, ambientcg_list_files |
| Smithsonian 3D | smithsonian_search_assets, smithsonian_get_asset, smithsonian_list_files |
| Sketchfab | sketchfab_search_models, sketchfab_get_model, sketchfab_get_downloads |
| Blendkit | blendkit_status, blendkit_import_asset |
| Audio | audio_search_assets, audio_download_asset, audio_inspect_asset, audio_generate_sound |
| itch.io bundles | itch_list_downloads, asset_list_bundle_entries, asset_download_bundle_animation |
| Unreal | asset_import_unreal |
| Unity | unity_list_packages, asset_import_unity |
Recommended flow: asset_search_sources → the returned search tool → the returned files tool → the returned
download tool with acceptLicense: true. All discovery tools are read-only. Download tools write only inside
their own directories, and never purchase, sign in or overwrite. Full list: docs/tools.md.
audio_generate_sound spends your own ElevenLabs credits. Nothing else costs money.
fab_import_asset and asset_import_unreal turn an Unreal pack (UE4 and UE5, cooked or uncooked) into
self-contained GLBs plus an import-report.json. Unreal Engine is not required. The importer reports what it
could not convert instead of claiming a full conversion. Setup, login and output types:
docs/unreal-import.md. Per-class status: docs/unreal-format-support.md.
asset_import_unity turns a .unitypackage, a UPM tarball or a Unity project folder you already have into
self-contained GLBs (one per model, plus one per prefab with its materials bound) and an import-report.json.
unity_list_packages lists the packages your Unity Editor cached. fab_import_asset hands a Unity-format Fab
artifact to the same importer when FabCLI exposes it. The MCP never signs in to Unity, never calls Unity
services and never decrypts a download. Unity is not required. The importer reports what it could not convert,
such as custom shaders, which keep their saved colour and base texture. Setup and output:
docs/unity-import.md. Per-class status: docs/unity-format-support.md.
No analytics or remote telemetry. Logs go to stderr only and omit query text unless FAB_LOG_QUERIES=1. The
dedicated browser profile never reads your normal browser profile or Epic session.
See docs/troubleshooting.md.
npm ci && npm run typecheck && npm testnpm run doctor lists missing local prerequisites. CI details and live probes: docs/development.md.
Start with Troubleshooting and npm run doctor. Report bugs through
GitHub issues with the package version, Node
version, OS, affected tool and sanitized reproduction steps. Never include credentials, signed download URLs or
licensed asset files. Before a pull request, read AGENTS.md and run the checks in
docs/development.md.
The package declares UNLICENSED in package.json. No open-source license is granted. Downloaded assets and external tools keep their own licenses and terms. Public availability does not grant redistribution rights.