Free CC0 3D models, PBR textures and HDRIs searched by meaning and size; 3D generation for credits.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The credit balance, the price of every tool and model in credits (1 credit = $0.01), the rate limits and this key's daily spending cap. Check before spending.
This tool takes no arguments.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http mcp https://3dvalley.com/mcp
The credit balance, the price of every tool and model in credits (1 credit = $0.01), the rate limits and this key's daily spending cap. Check before spending.
No arguments.
{
"type": "object",
"required": [],
"properties": {},
"additionalProperties": false
}Change a model you have: retexture (new PBR textures from a picture or words; trellis-2-texture 5, trellis-2-texture-pro 10, tripo-texture 20, tripo-texture-detailed 40 credits) or remesh (new, clean topology at a face count; tripo-remesh 50 credits). The mesh is an https URL, an upload id from upload_file, a library id (ph:wooden_barrel_01) or a job id, so steps chain without downloading. Waits about 45 s, then returns job_id for get_job. To reduce, compress, convert or repair a file, use gltf-transform or Blender locally.
| Argument | Type | Description |
|---|---|---|
| mesh* | string | The model: URL, upl_..., library id, or job_... |
| image | string | retexture: the look as a picture. |
| model | string | retexture or remesh: the model to use. |
| prompt | string | retexture: the look in words, when there is no picture. |
| options | object | remesh: faces (500 to 20,000; 10,000 as quads), topology (quads|triangles). |
| operation* | string | |
| max_credits | integer | |
| wait_seconds | integer | |
| idempotency_key | string |
{
"type": "object",
"required": [
"operation",
"mesh"
],
"properties": {
"mesh": {
"type": "string",
"description": "The model: URL, upl_..., library id, or job_..."
},
"image": {
"type": "string",
"description": "retexture: the look as a picture."
},
"model": {
"type": "string",
"description": "retexture or remesh: the model to use."
},
"prompt": {
"type": "string",
"description": "retexture: the look in words, when there is no picture."
},
"options": {
"type": "object",
"description": "remesh: faces (500 to 20,000; 10,000 as quads), topology (quads|triangles).",
"additionalProperties": true
},
"operation": {
"enum": [
"retexture",
"remesh"
],
"type": "string"
},
"max_credits": {
"type": "integer",
"minimum": 0
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 50,
"minimum": 0
},
"idempotency_key": {
"type": "string"
}
},
"additionalProperties": false
}Make one 3D object (never a scene) as a textured GLB, from a picture (image) or a description (prompt). Costs credits, which the user bought: image models trellis-2 5, trellis-2-pro 15, hunyuan-3d-3-1-pro 90, tripo-3-1 50, tripo-3-1-detailed 100; from a prompt add the picture model (flux-2-klein 1). Pass max_credits to refuse anything dearer. For a game or the web pass max_faces (5000-20000; the default is 200,000 triangles), and from a prompt style lowpoly to match low-poly kits. The GLB stands on its base at the origin, like library models. Waits about 45 s, then returns job_id for get_job if it is not done. Calling again with the same arguments resumes the same job and never charges twice; pass a new idempotency_key to make another one.
| Argument | Type | Description |
|---|---|---|
| seed | integer | |
| image | string | A picture of one object: an https URL, a data: URI, an upload id from upload_file, or a job id. |
| model | string | Default trellis-2. See account for every model and its price. |
| style | string | From a prompt: lowpoly draws a flat-shaded, flat-colour game asset to match low-poly kits; stylized a hand-painted look. |
| prompt | string | A description of one object: "a weathered wooden barrel with iron bands". |
| max_faces | integer | Most triangles in the model, at no extra cost: 5,000-20,000 for game or web use (the default is 200,000). |
| image_model |
A seamless PBR texture set (base colour, normal, height, roughness, metallic at 2048 px) from a description, for flux-2-klein-material 2, muse-image-material 5, gpt-image-2-5-material 8 credits.
| Argument | Type | Description |
|---|---|---|
| seed | integer | |
| model | string | Default flux-2-klein-material. |
| prompt* | string | The surface: "mossy cobblestones", "brushed steel". |
| max_credits | integer | |
| wait_seconds | integer | |
| idempotency_key | string |
{
"type": "object",
"required": [
"prompt"
],
"properties": {
"seed": {
"type": "integer",
"minimum": 0
},
"model": {
"type": "string",
"description": "Default flux-2-klein-material."
},
"prompt": {
"type": "string",
"description": "The surface: \"mossy cobblestones\", \"brushed steel\"."
},
"max_credits": {
"type": "integer",
"minimum": 0
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 50,
"minimum": 0
},
"idempotency_key": {
"type": "string"
}
},
"additionalProperties": false
}Full details for one library asset: download URLs per format and resolution, size in metres, up axis and origin, texture maps, a credit line (credit, credit_html), related assets, and import notes for Godot, Unity, three.js and Blender. When you write credits or a README for a project using the asset, include its credit line. Read-only, free.
| Argument | Type | Description |
|---|---|---|
| id* | string | An asset id from search_assets, e.g. "ph:wooden_barrel_01". |
{
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "An asset id from search_assets, e.g. \"ph:wooden_barrel_01\"."
}
},
"additionalProperties": false
}Waits up to about 45 s for a job to finish, or reads where it stands. Safe to call again and again; never charges. When done: download URLs for every file, a preview picture, the model's size in metres and triangle count, and an asset id usable as input to the next step.
| Argument | Type | Description |
|---|---|---|
| job_id* | string | |
| wait_seconds | integer |
{
"type": "object",
"required": [
"job_id"
],
"properties": {
"job_id": {
"type": "string"
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 50,
"minimum": 0
}
},
"additionalProperties": false
}Search the free CC0 library of 3D models, PBR textures and HDRIs by meaning and filters. Every model is a GLB measured in metres, +Y up, origin at the base. Check size_m before placing an asset; use min_size_m >= 2 for floors and walls. previews (max 6) attaches thumbnails, which is cheaper than downloading the wrong asset. Each result has match (strong, good or weak); when none is better than weak the answer says so, and generate_model is the way to get the object. Read-only, free with a free account.
| Argument | Type | Description |
|---|---|---|
| q | string | What you need, in words: "wooden barrel", "mossy rock", "sci-fi crate". |
| maps | array | Must have all of these maps. |
| pack | string | A pack id from a result ("kn:mini-skate"): only assets from that kit, to keep a game in one style. |
| sort | string | |
| type | string | |
| limit | integer | |
| style | string | |
| cursor | string | next_cursor from the previous page. |
The server cannot read the user's disk. This returns an upload id and the exact curl command that sends a local file (a mesh or picture) to it; run that command, then pass the id as the image or mesh of another tool. Uploads last 24 hours.
| Argument | Type | Description |
|---|---|---|
| bytes* | integer | The file's size in bytes (ls -l or stat). |
| filename* | string | The file's name with its extension, e.g. "chest.glb". |
| content_type | string |
{
"type": "object",
"required": [
"filename",
"bytes"
],
"properties": {
"bytes": {
"type": "integer",
"minimum": 1,
"description": "The file's size in bytes (ls -l or stat)."
},
"filename": {
"type": "string",
"description": "The file's name with its extension, e.g. \"chest.glb\"."
},
"content_type": {
"type": "string"
}
},
"additionalProperties": false
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 6, 2026.
| string |
| The picture model for a prompt: flux-2-klein (default), muse-image, gpt-image-2-5. |
| max_credits | integer | Refuse the job if it would cost more. |
| wait_seconds | integer |
| idempotency_key | string | Only to make a second, different job from identical arguments. |
{
"type": "object",
"required": [],
"properties": {
"seed": {
"type": "integer",
"minimum": 0
},
"image": {
"type": "string",
"description": "A picture of one object: an https URL, a data: URI, an upload id from upload_file, or a job id."
},
"model": {
"type": "string",
"description": "Default trellis-2. See account for every model and its price."
},
"style": {
"enum": [
"realistic",
"lowpoly",
"stylized"
],
"type": "string",
"description": "From a prompt: lowpoly draws a flat-shaded, flat-colour game asset to match low-poly kits; stylized a hand-painted look."
},
"prompt": {
"type": "string",
"description": "A description of one object: \"a weathered wooden barrel with iron bands\"."
},
"max_faces": {
"type": "integer",
"maximum": 1000000,
"minimum": 5000,
"description": "Most triangles in the model, at no extra cost: 5,000-20,000 for game or web use (the default is 200,000)."
},
"image_model": {
"type": "string",
"description": "The picture model for a prompt: flux-2-klein (default), muse-image, gpt-image-2-5."
},
"max_credits": {
"type": "integer",
"minimum": 0,
"description": "Refuse the job if it would cost more."
},
"wait_seconds": {
"type": "integer",
"default": 45,
"maximum": 50,
"minimum": 0
},
"idempotency_key": {
"type": "string",
"description": "Only to make a second, different job from identical arguments."
}
},
"additionalProperties": false
}| format |
| string |
| A file format we serve it in. |
| rigged | boolean |
| source | string |
| min_res | string | Smallest texture resolution: 1k, 2k, 4k. |
| animated | boolean |
| category | string | A category slug; see the categories in the results. |
| max_tris | integer | At most this many triangles (models). |
| min_tris | integer | At least this many triangles (models). |
| previews | integer | Attach this many thumbnails as images, so you can look before downloading. |
| max_size_m | number | The largest side at most this many metres. |
| min_size_m | number | The largest side at least this many metres. Use 2 or more for floors and walls. |
| similar_to | string | An asset id: the nearest to it by meaning. |
{
"type": "object",
"required": [],
"properties": {
"q": {
"type": "string",
"description": "What you need, in words: \"wooden barrel\", \"mossy rock\", \"sci-fi crate\"."
},
"maps": {
"type": "array",
"items": {
"enum": [
"base_color",
"normal",
"roughness",
"metallic",
"ao",
"height",
"displacement"
],
"type": "string"
},
"description": "Must have all of these maps."
},
"pack": {
"type": "string",
"description": "A pack id from a result (\"kn:mini-skate\"): only assets from that kit, to keep a game in one style."
},
"sort": {
"enum": [
"relevance",
"popular",
"newest"
],
"type": "string"
},
"type": {
"enum": [
"model",
"texture",
"hdri"
],
"type": "string"
},
"limit": {
"type": "integer",
"default": 8,
"maximum": 20,
"minimum": 1
},
"style": {
"enum": [
"realistic",
"stylized",
"lowpoly",
"scan"
],
"type": "string"
},
"cursor": {
"type": "string",
"description": "next_cursor from the previous page."
},
"format": {
"enum": [
"glb",
"zip",
"hdr",
"exr",
"png",
"jpg"
],
"type": "string",
"description": "A file format we serve it in."
},
"rigged": {
"type": "boolean"
},
"source": {
"enum": [
"polyhaven",
"ambientcg",
"kenney",
"kaykit",
"quaternius",
"gobkit",
"smithsonian",
"met",
"khronos",
"openhdri",
"cgbookcase",
"texturecan"
],
"type": "string"
},
"min_res": {
"type": "string",
"description": "Smallest texture resolution: 1k, 2k, 4k."
},
"animated": {
"type": "boolean"
},
"category": {
"type": "string",
"description": "A category slug; see the categories in the results."
},
"max_tris": {
"type": "integer",
"minimum": 0,
"description": "At most this many triangles (models)."
},
"min_tris": {
"type": "integer",
"minimum": 0,
"description": "At least this many triangles (models)."
},
"previews": {
"type": "integer",
"default": 0,
"maximum": 6,
"minimum": 0,
"description": "Attach this many thumbnails as images, so you can look before downloading."
},
"max_size_m": {
"type": "number",
"minimum": 0,
"description": "The largest side at most this many metres."
},
"min_size_m": {
"type": "number",
"minimum": 0,
"description": "The largest side at least this many metres. Use 2 or more for floors and walls."
},
"similar_to": {
"type": "string",
"description": "An asset id: the nearest to it by meaning."
}
},
"additionalProperties": false
}