Documentation

Bake3D MCP server

Let a compatible assistant coordinate 3D generation, rigging, animation and export. Keep your project and job IDs to continue the same work across sessions.

Connection

Use Streamable HTTP at https://bake3d.ai/api/v1/mcp with Authorization: Bearer YOUR_API_KEY. Create a key in Account → API keys; API access requires Pro or Studio, and a Free account receives HTTP 403. Store the key in the client’s credential configuration or environment, not in a prompt.

The endpoint negotiates MCP versions 2025-06-18 and 2025-11-25, returns JSON responses and does not require a persistent session. Send one JSON-RPC message per request; batch arrays are not accepted. Calls share the REST API’s rate limit, counted per account across all its keys (60 requests per minute by default); a 429 response carries Retry-After. Read the complete workflow guide.

Set up your client

Set BAKE3D_API_KEY (or the variable shown) to your key first. Every client uses the same endpoint and bearer header.

Claude Code

Run once in a terminal. The shell substitutes the key from BAKE3D_API_KEY when the server is added.

Claude Code
claude mcp add --transport http bake3d https://bake3d.ai/api/v1/mcp \
  --header "Authorization: Bearer $BAKE3D_API_KEY"

Cursor

Add to ~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Cursor reads the key from the environment it starts in.

Cursor
{
  "mcpServers": {
    "bake3d": {
      "url": "https://bake3d.ai/api/v1/mcp",
      "headers": {
        "Authorization": "Bearer ${env:BAKE3D_API_KEY}"
      }
    }
  }
}

Codex

Add to ~/.codex/config.toml and set BAKE3D_API_KEY in the environment that starts Codex.

Codex
[mcp_servers.bake3d]
url = "https://bake3d.ai/api/v1/mcp"
bearer_token_env_var = "BAKE3D_API_KEY"

Claude Desktop

Add to claude_desktop_config.json (Settings → Developer → Edit Config), then restart Claude Desktop. mcp-remote bridges the HTTP server to Claude Desktop and needs Node.js 18 or newer.

Claude Desktop
{
  "mcpServers": {
    "bake3d": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://bake3d.ai/api/v1/mcp",
        "--header",
        "Authorization: Bearer ${BAKE3D_KEY}"
      ],
      "env": {
        "BAKE3D_KEY": "bk_live_YOUR_KEY"
      }
    }
  }
}

Available tools

ToolPurposeCost
bake3d_accountRead balance, plan and the credit cost of every action.Free
bake3d_list_projectsSearch your full library and page through project IDs.Free
bake3d_get_projectRead IDs, counts, animation names and signed downloads; detail="full" adds labels, motion programs and asset metadata.Free
bake3d_upload_imageUpload a local PNG, JPEG or WebP (base64, up to 12 MiB) and get an imageAssetId for generation.Free · uses storage
bake3d_generateStart from one image URL, up to four image URLs of the same subject (imageUrls), one or up to four uploaded image asset IDs, or a text prompt describing one subject.30/40/55 mesh by quality · +10 for 2–4 views · +25 rig · +14 faithful face (refunded when unused)
bake3d_initial_animationCreate or recover the current rig’s included introduction.Free · bounded retries
bake3d_get_jobRead progress and terminal status; a finished motion job names its animation.Free
bake3d_list_jobsList your newest jobs, or one project’s, to find a job ID again.Free
bake3d_rigStart a new rigging job for an existing mesh.25 credits
bake3d_list_animationsList a project’s saved animations with id, name, duration and kind.Free
bake3d_list_presetsList motion presets; with projectId, whether each is available on that rig and its fitted amplitude and stride.Free
bake3d_animateDescribe motion and save an animation on the project; answers within about 45 seconds, with a job to poll when the motion takes longer.10 credits
bake3d_exportRequest a rigged or animated GLB, FBX or USDZ download.Free
bake3d_delete_projectPermanently delete a project, its files and animations. Requires confirm=true and no running job.Free · irreversible
bake3d_feedbackRate a model, rig, animation or export with a thumbs up or down, reasons and a note. The team reviews every rating.Free
bake3d_cancel_jobCancel an active job and refund its charge before its result is in the project; reports a job that already finished or delivered.Free

Tool schemas, titles and field descriptions are returned by MCP tools/list. bake3d_generate, bake3d_rig and bake3d_animate spend credits, and a balance below the price is refused before anything starts. Pass an idempotencyKey (any unique string, such as a UUID): the key is bound to the job it paid for, so a retry with the same key within 24 hours never charges again. It returns the first result, or names the job while it still runs; only a job that failed and was refunded lets the key run again. An accepted job that fails refunds what it did not deliver: every credit before anything reaches the project, and the rig’s credits when a generation’s mesh is in the project but its rig could not be made. bake3d_cancel_job refunds a job in full until its mesh or rig is in the project; after that it answers that the character is already there, and the remaining steps finish on their own with nothing more charged. Invalid arguments come back as a tool error that names the field to fix, and an error about a job names its jobId. bake3d_delete_project is the only tool that removes data: it is owner-only, refuses a project while any job runs on it (the error names the job), requires confirm: true, and cannot be undone or refunded.

Find an existing project

Use bake3d_list_projects to search the full account by title or category. It accepts q, filter (all, active, ready, needs-work), sort (updated, created, name), and limit (1–100; default 24, as the REST API). Pass the returned nextCursor as cursor with the same search options to continue. Stop when it is null. Start without a cursor to refresh the library after projects change. bake3d_get_project returns a compact summary by default; request detail: "full" only when you need skeleton labels or motion programs.

bake3d_list_projects arguments
{
  "q": "vehicle",
  "filter": "ready",
  "sort": "name",
  "limit": 24
}

From job to playable animation

  1. Call bake3d_generate with exactly one source. For a local file, call bake3d_upload_image first and pass its imageAssetId (several uploaded views of the same subject go in imageAssetIds). Pass imageUrls (one to four angles of the same subject, the first being the primary reference) when the user has several views; the job’s output.views says how many the geometry engine used, and a fallback engine keeps only the primary image. Rigged image bakes check the pose first: when limbs touch, cross or are cut off, the mesh is built from a prepared rig-ready picture of the same subject (included; output.posePrep says what happened). A reference sheet, collage, scene or text overlay is reduced to its main subject alone first. A subject caught mid-action or in a non-default posture (running, sitting, lying) is modelled in its default resting pose, and that action becomes the included animation (output.posePrep.state; a travelling action such as a run, gallop, crawl, slither or flight plays with the rig's own fitted gait when one fits); a text prompt that asks for an action works the same way. Extra views that show a different subject than the primary image are left out. Pass posePrep: false to keep the upload as it is, or generateViews: true with one image for generated side and back views. topology: "quads" ("Game-ready mesh") keeps the full-detail model and adds a rigged game-ready copy (about 7–10K faces, mostly quads, under 20K triangles) at the same price; export it with mesh: "game". On quality: "high", faithfulFace: true ("Faithful face") keeps eyes and face shape closer to the picture on people and human-like characters (an organic face with no muzzle, snout or beak) for 14 more credits, refunded when the subject has no such face or the standard High engine builds the mesh; it cannot be combined with quads. A text prompt must describe one 3D model (a character, creature, vehicle, machine, building, prop or prop set such as a chess set); a prompt for a whole game, an app, an open world or several unrelated characters returns error 422 before any charge, with a suggested single-subject prompt when the text has one. A picture or prompt that shows nudity or sexual content also returns 422 before any charge ("Bake3D doesn't accept nudity or sexual content…"); swimwear, armour, revealing costumes, creatures and stylised characters are fine. Rigged text bakes paint a rig-ready concept and check it the same way as an upload. Save the returned project ID and job ID.
  2. Poll bake3d_get_job every 3–5 seconds until succeeded, failed or canceled. Inspect an error before retrying. If a job ID gets lost, bake3d_list_jobs lists your newest jobs, or one project’s.
  3. Read the project and its initialAnimationId, or call bake3d_list_animations for the saved clips with their IDs, durations and kinds (initial, described, preset, edited). The generation workflow attempts an included introductory motion; bake3d_initial_animation can recover it. Use bake3d_animate when you want a different described action. It answers within about 45 seconds: with the saved animation (status: "succeeded"), or, while the motion is still being made, with status: "running" and a jobId. Then poll bake3d_get_job until it succeeds; its output.animationId names the animation. Do not call bake3d_animate again for the same motion: it was charged once, and a retry with the same idempotencyKey would only report the same job. bake3d_initial_animation is free and returns its own recovery job; while the bake or another job still runs on the project it answers with an error naming that job.
  4. Call bake3d_export for the included motion, or pass a specific saved animation ID. Download the signed URL before its expiresAt (two hours), or request a fresh export link.
bake3d_animate arguments
{
  "projectId": "YOUR_PROJECT_ID",
  "prompt": "Turn the head slowly and wag the tail gently",
  "durationSeconds": 4,
  "loop": true,
  "idempotencyKey": "5c1f0f8e-2d7b-4f7e-9d7a-1b2c3d4e5f60"
}
bake3d_export arguments
{
  "projectId": "YOUR_PROJECT_ID",
  "animationId": "YOUR_ANIMATION_ID",
  "fps": 30,
  "rootMotion": false,
  "heightMeters": 1.8
}

rootMotion: true (the default, except for USDZ) bakes planar travel and heading onto the ground-level motion_root joint, so an engine’s root-motion extraction moves the character while the hips keep bob and jump; rootMotion: false exports in place: motion_root stays still and horizontal travel is removed, while vertical motion such as a jump arc, and wheel roll, are kept. Export accepts 24, 30 or 60 fps. heightMeters scales the file so the character stands that tall. Every export stands on the ground plane, centred over the origin and facing +Z; its skeleton starts with an unweighted ground-level motion_root joint at the origin; and each clip records its fps, loop, rootMotion and duration in extras.bake3d. Choose a saved animationId or a presetId; omit both to use the included initial animation when available. Set restPose: true for an unanimated copy. Set format: "fbx" for a binary FBX 7.4 file (skeleton, skin weights with up to four influences per vertex, embedded base-colour, normal, roughness and metallic maps; verified in Blender 5.2 and Godot 4.7); pass animationIds instead of animationId to put several saved animations in one FBX, one take each. Set format: "usdz" for AR Quick Look and USD tools: one clip, in place unless rootMotion: true. Presets are fitted to the actual rig: bake3d_list_presets with projectId reports each preset as available with its amplitude and stride factors, unavailable with the reason, or pending while the fit is measured. Hand-authored gaits that a rig-fitted preset replaces are hidden unless you pass includeSuperseded: true. Included-motion recovery allows three jobs per rig per UTC day and six starts per account in 24 hours; it does not spend credits.

Editor import and limits

Bake3D returns the asset. An editor bridge, the Bake3D add-on or a manual import places it in your scene. See the Blender, Unity, Unreal and Godot instructions for setup and validation status. Signed download links need no API key and may be fetched from a browser or game engine on any origin.

Server animation export currently supports one skeleton, up to 256 joints, clips up to 30 seconds and source rigs up to 60 MiB (above 24 MiB, textures must be embedded in the GLB binary chunk). Motion composition accepts durations from 0.5 to 20 seconds. Review the rig and deformation before production use.