Turn a photo, drawing or text description into a textured 3D model (GLB, FBX, OBJ, USDZ, STL).
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.
Show example 3D models made with Wandy3D in the interactive 3D viewer — no sign-in, free. Lists the examples and opens one (the first, or model_id). Use it to show what the results look like before the user makes their own.
id of an example from the list (default: the first one)
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
Run in a terminal
claude mcp add --transport http wandy3d https://wandy3d.com/mcp
Show example 3D models made with Wandy3D in the interactive 3D viewer — no sign-in, free. Lists the examples and opens one (the first, or model_id). Use it to show what the results look like before the user makes their own.
| Argument | Type | Description |
|---|---|---|
| model_id | string | id of an example from the list (default: the first one) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"model_id": {
"type": "string",
"maxLength": 64,
"description": "id of an example from the list (default: the first one)"
}
}
}Will this model 3D-print? Free check of one of the user's models at a chosen size: verdict (ready / review / fix) with reasons, printed size, material and print time, supports, and the repairs made to get one closed printable solid. The print-ready file (3MF / STL) comes along with a Wandy3D plan, an unlocked model or an API-made model; otherwise the answer names its one-time price in credits — only after the user's yes call again with pay_credits: true. Takes 30 s – 2 min; may return a task_id for get_task.
| Argument | Type | Description |
|---|---|---|
| format | string | File format of the print file (default 3mf) |
| process | string | fdm = filament printer (default; minimum wall 1.2 mm) or resin (minimum wall 0.6 mm) |
| model_id* | string | model_id of one of the user's models (list_models / get_task) |
| length_mm | integer | Printed size of the model's longest side in millimetres (30–400, default 150) |
| pay_credits | boolean | true = buy the print-ready file with the user's credits at the price the previous answer named. Only after the user agreed. |
| wait_seconds | integer | How long to wait for the result before answering with a task_id (0–50 s, default 30) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id"
],
"properties": {
"format": {
"enum": [
"3mf",
"stl"
],
"type": "string",
"default": "3mf",
"description": "File format of the print file (default 3mf)"
},
"process": {
"enum": [
"fdm",
"resin"
],
"type": "string",
"default": "fdm",
"description": "fdm = filament printer (default; minimum wall 1.2 mm) or resin (minimum wall 0.6 mm)"
},
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id of one of the user's models (list_models / get_task)"
},
"length_mm": {
"type": "integer",
"default": 150,
"maximum": 400,
"minimum": 30,
"description": "Printed size of the model's longest side in millimetres (30–400, default 150)"
},
"pay_credits": {
"type": "boolean",
"default": false,
"description": "true = buy the print-ready file with the user's credits at the price the previous answer named. Only after the user agreed."
},
"wait_seconds": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 0,
"description": "How long to wait for the result before answering with a task_id (0–50 s, default 30)"
}
}
}Download link for a file of one of the user's models: glb, fbx, obj, usdz, stl or glb_draco. Free with a Wandy3D plan, an unlocked model or a model made with an API key; otherwise the answer names a one-time price in credits — tell the user, and only after their yes call again with pay_credits: true.
| Argument | Type | Description |
|---|---|---|
| format | string | glb (default), fbx (Unity / Unreal / Blender), obj (zip), usdz (Apple AR), glb_draco (smaller glb), stl (the mesh as it is — for a repaired, print-ready file use check_print) |
| model_id* | string | model_id from list_models or get_task |
| pay_credits | boolean | true = buy this model's files with the user's credits at the price the previous answer named. Only after the user agreed. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id"
],
"properties": {
"format": {
"enum": [
"glb",
"fbx",
"obj",
"usdz",
"stl",
"glb_draco"
],
"type": "string",
"default": "glb",
"description": "glb (default), fbx (Unity / Unreal / Blender), obj (zip), usdz (Apple AR), glb_draco (smaller glb), stl (the mesh as it is — for a repaired, print-ready file use check_print)"
},
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id from list_models or get_task"
},
"pay_credits": {
"type": "boolean",
"default": false,
"description": "true = buy this model's files with the user's credits at the price the previous answer named. Only after the user agreed."
}
}
}Turn one photo, render or drawing of an object into a textured 3D model. Paid — 30–60 credits by version (quality): tell the user the price and get their OK first. Returns a task_id; get_task shows the model when it is ready (a few minutes).
| Argument | Type | Description |
|---|---|---|
| quality | string | Wandy version: ultra = Wandy 2 (default, best for most objects; 60 credits), quality = Wandy 1.1 (best for cars; 50 credits), fast = Wandy 1 (cheapest and fastest, less detail; 30 credits) |
| image_url | string | https:// link to the image (JPEG, PNG or WebP up to 10 MB; one object on a plain background works best). Give this or image_base64. |
| image_base64 | string | The image as base64 or a data: URL. Give this or image_url. |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"quality": {
"enum": [
"ultra",
"quality",
"fast"
],
"type": "string",
"default": "ultra",
"description": "Wandy version: ultra = Wandy 2 (default, best for most objects; 60 credits), quality = Wandy 1.1 (best for cars; 50 credits), fast = Wandy 1 (cheapest and fastest, less detail; 30 credits)"
},
"image_url": {
"type": "string",
"maxLength": 4096,
"description": "https:// link to the image (JPEG, PNG or WebP up to 10 MB; one object on a plain background works best). Give this or image_base64."
},
"image_base64": {
"type": "string",
"maxLength": 15000000,
"description": "The image as base64 or a data: URL. Give this or image_url."
}
}
}Make a textured 3D model of one object from a text description, when there is no image. Paid — 10 credits for the internal reference picture plus the model price (30–60 credits, by quality): tell the user the price and get their OK first. Returns a task_id; get_task shows the model when it is ready (a few minutes).
| Argument | Type | Description |
|---|---|---|
| prompt | string | What to make, 3–500 characters: one object, its shape, colours and materials, e.g. "a red ceramic teapot with a bamboo handle" |
| quality | string | Wandy version: ultra = Wandy 2 (default, best for most objects; 60 credits), quality = Wandy 1.1 (best for cars; 50 credits), fast = Wandy 1 (cheapest and fastest, less detail; 30 credits) |
| concept_id | string | Returned when the picture was made but the model did not start: pass it to retry without paying for a new picture (no prompt needed) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"prompt": {
"type": "string",
"maxLength": 500,
"description": "What to make, 3–500 characters: one object, its shape, colours and materials, e.g. \"a red ceramic teapot with a bamboo handle\""
},
"quality": {
"enum": [
"ultra",
"quality",
"fast"
],
"type": "string",
"default": "ultra",
"description": "Wandy version: ultra = Wandy 2 (default, best for most objects; 60 credits), quality = Wandy 1.1 (best for cars; 50 credits), fast = Wandy 1 (cheapest and fastest, less detail; 30 credits)"
},
"concept_id": {
"type": "string",
"maxLength": 100,
"description": "Returned when the picture was made but the model did not start: pass it to retry without paying for a new picture (no prompt needed)"
}
}
}The user's own balance and plan: Wandy3D credits, or the US-dollar API balance with an API key. Free. (Prices without sign-in: get_prices.)
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Show one of the user's own models in the 3D viewer by model_id, with its name, preview and link. Free.
| Argument | Type | Description |
|---|---|---|
| model_id* | string | model_id from list_models or get_task |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id"
],
"properties": {
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id from list_models or get_task"
}
}
}What things cost on Wandy3D, live: a model per version, text to 3D, Low Poly, rig, crafts, files, and what a free account gets — in credits, or US dollars for an API key. No sign-in, free. (The user's own balance: get_credits.)
No arguments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {}
}Wait for a task_id and return its result: the finished model in the 3D viewer, or the report / files of a print, Low Poly, rig or craft job. Waits up to wait_seconds; call again while it is still running. Free: it never starts or pays for anything.
| Argument | Type | Description |
|---|---|---|
| task_id* | string | task_id returned by generate_from_image, generate_from_text or a model job tool |
| wait_seconds | integer | How long to wait for the result before answering (0–50 s, default 25) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"task_id"
],
"properties": {
"task_id": {
"type": "string",
"maxLength": 400,
"minLength": 1,
"description": "task_id returned by generate_from_image, generate_from_text or a model job tool"
},
"wait_seconds": {
"type": "integer",
"default": 25,
"maximum": 50,
"minimum": 0,
"description": "How long to wait for the result before answering (0–50 s, default 25)"
}
}
}The animation clips (names and seconds) of a rigged model; for a model that is not rigged, of its newest rigged version. Free.
| Argument | Type | Description |
|---|---|---|
| model_id* | string | model_id of one of the user's models (list_models / get_task) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id"
],
"properties": {
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id of one of the user's models (list_models / get_task)"
}
}
}The user's library, newest first: model_id, name, preview and what was saved with each model (print checks with their verdict, crafts, game packs), plus generations in progress. search finds a model by name; has_output finds the one prepared for printing or for a craft. Free.
| Argument | Type | Description |
|---|---|---|
| limit | integer | How many models to return (1–20, default 10) |
| search | string | Part of a model name to look for |
| has_output | string | Only models with a saved output of this kind, most recent first: print (a print check), papercraft, laser, bricks, flexi, game_pack or any |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "integer",
"default": 10,
"maximum": 20,
"minimum": 1,
"description": "How many models to return (1–20, default 10)"
},
"search": {
"type": "string",
"maxLength": 100,
"description": "Part of a model name to look for"
},
"has_output": {
"enum": [
"print",
"papercraft",
"laser",
"bricks",
"flexi",
"game_pack",
"any"
],
"type": "string",
"description": "Only models with a saved output of this kind, most recent first: print (a print check), papercraft, laser, bricks, flexi, game_pack or any"
}
}
}Turn one of the user's models into a craft to build by hand: papercraft (a PDF to print, cut and glue), laser (SVG layers for a laser cutter), bricks (building instructions and a parts list) or flexi (a print-in-place jointed toy; needs a rigged version from rig_model). Paid per new build — papercraft 10, laser 10, bricks 20, flexi 30 credits (a repeat or a failed build is not charged): tell the user the price and get their OK first. The files come as a ZIP. Takes 1–15 min; may return a task_id for get_task.
| Argument | Type | Description |
|---|---|---|
| kind* | string | papercraft, laser (laser-cut layers), bricks or flexi (print-in-place toy) |
| options | object | Optional settings of the chosen craft, e.g. {"size_cm": 25} — papercraft: detail simple|medium|detailed|expert, paper a4|letter, size_cm 8–45, color print|white; laser: height_cm 5–60, thickness 3|4|5|6, bed xtool_s1|glowforge|a4|a3|letter, kerf 0–0.4, holes none|3|5, guides true|false; bricks: size small|medium|large, palette full|basic, hollow true|false; flexi: length_cm 8–30, joints auto|few|many, clearance 0.25|0.35|0.45. Left out = the default. |
| model_id* | string | model_id of one of the user's models (list_models / get_task) |
| wait_seconds | integer | How long to wait for the result before answering with a task_id (0–50 s, default 30) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id",
"kind"
],
"properties": {
"kind": {
"enum": [
"papercraft",
"laser",
"bricks",
"flexi"
],
"type": "string",
"description": "papercraft, laser (laser-cut layers), bricks or flexi (print-in-place toy)"
},
"options": {
"type": "object",
"description": "Optional settings of the chosen craft, e.g. {\"size_cm\": 25} — papercraft: detail simple|medium|detailed|expert, paper a4|letter, size_cm 8–45, color print|white; laser: height_cm 5–60, thickness 3|4|5|6, bed xtool_s1|glowforge|a4|a3|letter, kerf 0–0.4, holes none|3|5, guides true|false; bricks: size small|medium|large, palette full|basic, hollow true|false; flexi: length_cm 8–30, joints auto|few|many, clearance 0.25|0.35|0.45. Left out = the default.",
"propertyNames": {
"type": "string"
},
"additionalProperties": {
"type": [
"string",
"number",
"boolean"
]
}
},
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id of one of the user's models (list_models / get_task)"
},
"wait_seconds": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 0,
"description": "How long to wait for the result before answering with a task_id (0–50 s, default 30)"
}
}
}Make a clean Low Poly version of one of the user's models for games, AR and the web: a closed triangle mesh at a triangle target with the textures baked on, saved as a new version and shown in the 3D viewer. Paid — 30 credits per new build (a repeat or a failed build is not charged): tell the user the price and get their OK first. Takes 1–6 min; may return a task_id for get_task.
| Argument | Type | Description |
|---|---|---|
| texture | string | Baked texture size: 1k, 2k (default) or 4k |
| model_id* | string | model_id of one of the user's models (list_models / get_task) |
| triangles | integer | Target triangle count, 300–300,000 (default 4,000; rounded to 100) |
| wait_seconds | integer | How long to wait for the result before answering with a task_id (0–50 s, default 30) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id"
],
"properties": {
"texture": {
"enum": [
"1k",
"2k",
"4k"
],
"type": "string",
"default": "2k",
"description": "Baked texture size: 1k, 2k (default) or 4k"
},
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id of one of the user's models (list_models / get_task)"
},
"triangles": {
"type": "integer",
"default": 4000,
"maximum": 300000,
"minimum": 300,
"description": "Target triangle count, 300–300,000 (default 4,000; rounded to 100)"
},
"wait_seconds": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 0,
"description": "How long to wait for the result before answering with a task_id (0–50 s, default 30)"
}
}
}Add a skeleton and ready-made animation clips to one of the user's models (auto-rig), saved as a new rigged version shown in the 3D viewer. Paid — 30 credits per new rig (a repeat or a failed rig is not charged): tell the user the price and get their OK first. Takes a few minutes; may return a task_id for get_task. Afterwards list_animations names the clips and export_model gives FBX or GLB.
| Argument | Type | Description |
|---|---|---|
| kind | string | auto (default: Wandy3D picks, free), humanoid (people and characters: idle, walk, run, jump, wave, dance …) or generic (four-legged animals walk and run, wheels turn, other objects get simple motions) |
| model_id* | string | model_id of one of the user's models (list_models / get_task) |
| wait_seconds | integer | How long to wait for the result before answering with a task_id (0–50 s, default 30) |
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"model_id"
],
"properties": {
"kind": {
"enum": [
"auto",
"humanoid",
"generic"
],
"type": "string",
"default": "auto",
"description": "auto (default: Wandy3D picks, free), humanoid (people and characters: idle, walk, run, jump, wave, dance …) or generic (four-legged animals walk and run, wheels turn, other objects get simple motions)"
},
"model_id": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "model_id of one of the user's models (list_models / get_task)"
},
"wait_seconds": {
"type": "integer",
"default": 30,
"maximum": 50,
"minimum": 0,
"description": "How long to wait for the result before answering with a task_id (0–50 s, default 30)"
}
}
}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 12, 2026.