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 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.
{
"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.
[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.
{
"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
| Tool | Purpose | Cost |
|---|---|---|
| bake3d_account | Read balance, plan and the credit cost of every action. | Free |
| bake3d_list_projects | Search your full library and page through project IDs. | Free |
| bake3d_get_project | Read IDs, counts, animation names and signed downloads; detail="full" adds labels, motion programs and asset metadata. | Free |
| bake3d_upload_image | Upload a local PNG, JPEG or WebP (base64, up to 12 MiB) and get an imageAssetId for generation. | Free · uses storage |
| bake3d_generate | Start 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_animation | Create or recover the current rig’s included introduction. | Free · bounded retries |
| bake3d_get_job | Read progress and terminal status; a finished motion job names its animation. | Free |
| bake3d_list_jobs | List your newest jobs, or one project’s, to find a job ID again. | Free |
| bake3d_rig | Start a new rigging job for an existing mesh. | 25 credits |
| bake3d_list_animations | List a project’s saved animations with id, name, duration and kind. | Free |
| bake3d_list_presets | List motion presets; with projectId, whether each is available on that rig and its fitted amplitude and stride. | Free |
| bake3d_animate | Describe 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_export | Request a rigged or animated GLB, FBX or USDZ download. | Free |
| bake3d_delete_project | Permanently delete a project, its files and animations. Requires confirm=true and no running job. | Free · irreversible |
| bake3d_feedback | Rate a model, rig, animation or export with a thumbs up or down, reasons and a note. The team reviews every rating. | Free |
| bake3d_cancel_job | Cancel 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.
{
"q": "vehicle",
"filter": "ready",
"sort": "name",
"limit": 24
}From job to playable animation
- Call
bake3d_generatewith exactly one source. For a local file, callbake3d_upload_imagefirst and pass itsimageAssetId(several uploaded views of the same subject go inimageAssetIds). PassimageUrls(one to four angles of the same subject, the first being the primary reference) when the user has several views; the job’soutput.viewssays 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.posePrepsays 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. PassposePrep: falseto keep the upload as it is, orgenerateViews: truewith 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 withmesh: "game". Onquality: "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. - Poll
bake3d_get_jobevery 3–5 seconds until succeeded, failed or canceled. Inspect an error before retrying. If a job ID gets lost,bake3d_list_jobslists your newest jobs, or one project’s. - Read the project and its
initialAnimationId, or callbake3d_list_animationsfor the saved clips with their IDs, durations and kinds (initial, described, preset, edited). The generation workflow attempts an included introductory motion;bake3d_initial_animationcan recover it. Usebake3d_animatewhen 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, withstatus: "running"and ajobId. Then pollbake3d_get_jobuntil it succeeds; itsoutput.animationIdnames the animation. Do not callbake3d_animateagain for the same motion: it was charged once, and a retry with the sameidempotencyKeywould only report the same job.bake3d_initial_animationis 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. - Call
bake3d_exportfor the included motion, or pass a specific saved animation ID. Download the signed URL before itsexpiresAt(two hours), or request a fresh export link.
{
"projectId": "YOUR_PROJECT_ID",
"prompt": "Turn the head slowly and wag the tail gently",
"durationSeconds": 4,
"loop": true,
"idempotencyKey": "5c1f0f8e-2d7b-4f7e-9d7a-1b2c3d4e5f60"
}{
"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.