MCP server
Streamable-HTTP MCP endpoint at /mcp. Search and fetch without auth; add a Bearer API key to submit on a user’s behalf.
Connect
One command per client. The API key is only needed to submit models; searching and fetching work without it.
claude mcp add --transport http 3dassets https://3dassets.dev/mcpclaude mcp add --transport http 3dassets https://3dassets.dev/mcp --header "Authorization: Bearer <apiKey>"codex mcp add 3dassets --url https://3dassets.dev/mcpTHREEDASSETS_KEY=<apiKey> codex mcp add 3dassets --url https://3dassets.dev/mcp --bearer-token-env-var THREEJSASSETS_KEYcode --add-mcp '{"name":"3dassets","type":"http","url":"https://3dassets.dev/mcp"}'{
"mcpServers": {
"3dassets": {
"url": "https://3dassets.dev/mcp",
"headers": { "Authorization": "Bearer <apiKey>" }
}
}
}In ChatGPT itself, remote MCP tools arrive through plugins rather than a URL you paste; use the prompt route there. Any other client that reads a link and calls an API can use skill.md without MCP at all.
Tools
| Tool | Auth | Does |
|---|---|---|
search_assets | none | Search by text, category, theme, style and tags |
search_packs · get_pack | Public | Find cohesive game kits and fetch complete file manifests, budgets and starter scenes |
get_asset | none | Full details incl. CDN URL, licence + attribution text, stats, snippets |
get_asset_usage | none | Loader code or import steps for three.js, R3F, model-viewer, Blender, Godot and Unity |
list_categories · list_tags · list_licenses | none | Slugs the other tools accept |
create_account | none | Create a contributor account; emails the user a 6-digit code |
verify_account | none | Exchange the code for the user’s API key (shown once) |
submit_asset_from_url | key | Submit a .glb from a public https URL |
get_upload_url → finalize_upload | key | Direct byte upload for clients that can PUT files |
my_assets · update_asset | key | Track and edit the user’s submissions |
submit_pack · my_packs | key | Group the user’s uploads into a pack proposal and track it |
report_asset | none | Flag an asset |
Resource template asset://{slug} returns the Markdown rendition of an asset.
CC0 submissions
Uploads default to CC0 1.0 Universal. Omit license, or send cc0-1.0; other licences are rejected. Before setting attestation: true, the user must confirm their publishing rights and accept irrevocable CC0 dedication, allowing personal and commercial use without attribution. One confirmation can cover an identified batch. Do not ask the user to select a licence or tags.
list_licenses returns CC0 only. Licence and attribution fields remain in responses for compatibility and historical records.
Behaviour agents can rely on
- Every result carries the licence. If
attributionRequiredis true, the exact attribution string is included. Put it in the user’s credits. - All files load with a plain
GLTFLoader; there is never a need to configure Draco or KTX2. - Submissions are reviewed by a person, and so is any edit to an asset that is already published. Tell the user the outcome arrives by email and can be tracked with
my_assets. - Rejections and failures come with a human-readable reason. Relay it verbatim.
Rate limits
Tool calls are counted the same way as REST calls, against your API key when the server is configured with one and against your IP address otherwise. Read tools share one bucket; submit_asset_from_url, get_upload_url, finalize_upload, update_asset, submit_pack and report_asset count as submissions; create_account and verify_account count as account calls.
| What | Anonymous (per IP) | With an API key |
|---|---|---|
| Search & read GET /api/v1/*, /assets/{slug}.md, MCP read tools | 60/min · 1,000/hour | 120/min · 3,000/hour |
| Downloads /download/{slug} | 30/min · 300/hour · 1,000/day | 60/min · 600/hour · 3,000/day |
| Submissions & edits POST /api/v1/assets, /assets/from-url, /uploads/presign, /packs/submissions, /reports, MCP write tools | 5/min · 30/hour · 100/day | 20/min · 150/hour · 400/day |
| Accounts POST /api/v1/accounts/verify, /accounts/session, key rotation | 10/hour · 30/day | 10/hour · 30/day |
| Account emails POST /api/v1/accounts, /accounts/login-code, /accounts/resend | 6/hour · 20/day | 6/hour · 20/day |
Over the limit the call comes back as a JSON-RPC error (-32029) over HTTP 429 with a Retry-After header, and the message says how long to wait. Relay that to the user and pause: do not retry in a loop, and never split one job across several keys. Pulling a whole pack for a scene is expected and fits well inside the limits; re-fetching the catalogue is not.
AI model attribution
Set aiGenerated: true if AI helped create geometry, generating code or textures, and optionally include aiModel (up to 160 characters). Use GET /api/v1/ai-models?q=... or MCP list_ai_models for OpenRouter suggestions refreshed hourly. Custom model and 3D-tool names are accepted. Leave unknown models unspecified; never guess. Using an agent only to upload does not count as AI creation.
The asset info panel, JSON and Markdown show this as contributor-reported attribution. A model catalogue outage does not block uploading. Switching AI use off clears the model name.