Skip to content
MCPBytes

3D Models

Give it bones.See it bend.

Give a 3D character a skeleton so it can be posed and animated, with a report on how well it bends.

20 credits per job · 300 free credits to start

Rig preview of a cartoon knight: the skeleton from the front and side, each bone's area in its own colour, and a bend test
“A small cartoon knight in silver armor with a blue tabard, standing in a T-pose with arms straight out to the sides, full body.” Made with Create a 3D model, then rigged: 34 bones, every check passed.

What it does

A statue in. A posable model out.

A generated character is a statue: one shape that cannot move. Rigging puts a skeleton inside it and decides how strongly each bone pulls on each part of the surface, so the model can be posed and animated in Blender, Godot, three.js or any tool that reads glTF. Textures, size and position stay as they were. Every job also bends each bone and reports where the surface folds or stretches, with a picture of the skeleton, so you or your agent can decide whether the rig is good enough. A job takes a few minutes.

See the source character, its skeleton and bend preview, then open the resulting skinned GLB.

Interactive source model of the cartoon knight before rigging

Source model

The generated character before rigging. Drag to inspect the actual input mesh.

Knight skeleton, bone influence colours and a 45 degree bend test

Skeleton and bend check

The report preview: rest pose, bone influence colours and a 45° bend.

Interactive 3D model of the rigged cartoon knight

Rigged output

The resulting skinned GLB, with the skeleton and weights inside.

Read the actual report
Status
passed
Bones
34
Triangles
90,320
Vertices
75,912
Maximum influences
4 per vertex
Mirror overlap
0.978
Bend check
45° for every bone
Worst stretch
0.8618
Issues
none

This is one recorded job, not a promise that every character will pass. A successful report still needs a human review of the bends that matter to your project.

Formats
.glb (self-contained, uncompressed, one material, not already rigged or animated)
Outputs
model.glb (skinned, up to 4 bones per vertex), rig.json, rig_report.json, rig_preview.png and generation.json
Checks
Skeleton structure, far-reaching weights and a 45° bend test of every bone (folded triangles, stretch, volume)
Duration
Asynchronous; one-hour deadline including queueing and execution

Ready for your tools.

A standard skinned GLB for any tool that reads glTF, with the original textures, size and position.

Tested, not trusted.

Every bone is bent and measured. The report names the bone, what went wrong and by how much.

See it for yourself.

A preview shows the skeleton from two sides, which bone moves which part, and the worst bend.

Take a closer look

Download the example.

Inspect the files before running your own job. No sign-in required.

  • Source model

    Web delivery copy (model.web.glb) of the original Create a 3D model output used by this rigging job.

    GLB · 2.9 MB

  • Generation reference

    Original reference image from the same Create a 3D model job, not a render of the source mesh.

    PNG · 262 KB

  • Rigged model

    Web delivery copy of the rigging job's model.glb; Draco geometry and WebP textures.

    GLB · 1.5 MB

  • Skeleton data

    Original API rig.json output with the bone hierarchy, rest positions, and influenced vertex counts.

    JSON · 7 KB

  • Rig report

    Original API rig_report.json output, including every 45° bend check.

    JSON · 6 KB

  • Rig and bend preview

    Delivery re-encoding of the original API rig_preview.png for this page.

    WebP · 66 KB

Pricing

Pay by the job.

20 credits per job. A job that fails costs nothing.

Pricing details

Start free

Available now

300free credits when you sign up

  • Every MCPBytes tool, one credit balance
  • Sign in with GitHub or email, no card required
  • Each tool states its price before you run it
  • Failed API jobs cost nothing

Price per job

Rig a 3D model

Per job
20 credits

Limits

Jobs
20 per rolling 24 hours; 3 until your first credit purchase
Model
Up to 50 MB and 1,000,000 triangles
At a time
1 job
Uploads
Up to 50 MB
Results
24 hours by default

API

Your agent or your code.

Connect your agent and it can use this tool right away, or call it from your own code. One key works for both.

Start a job

Send a file body, or JSON containing an upload ID or public URL. Options such as seed go in the JSON options object, or the query string for a file body.

Requestrig.sh
# Idempotency-Key is required: repeating it returns the same job
curl "https://api.mcpbytes.com/v1/tools/rig_3d_model/jobs?filename=model.glb&seed=42" \
  -H "Authorization: Bearer $MCPBYTES_API_KEY" \
  -H "Content-Type: application/octet-stream" \
  -H "Idempotency-Key: rig-example-001" \
  --data-binary @model.glb
Response202 Accepted · trimmed
{
  "tool": "rig_3d_model",
  "status": "queued",
  "input_kind": "file",
  "workflow": {
    "stage": "Rigging",
    "deadline": "2026-09-27T09:38:40.512Z",
    "cancel_pending": false,
    "refund_pending": false
  },
  "capabilities": {
    "can_cancel": true
  },
  "options": {
    "seed": 42
  },
  "result": null
}

Get the result

Poll until the status is final. Download files only after success.

Requestread.sh
# JOB_ID is the id from the create response; poll until status is final
curl "https://api.mcpbytes.com/v1/jobs/$JOB_ID" \
  -H "Authorization: Bearer $MCPBYTES_API_KEY"

# Once status is succeeded, download each file from result.files[].url
curl -fsSLo model.glb "$MODEL_URL"
Response200 OK · trimmed
{
  "tool": "rig_3d_model",
  "status": "succeeded",
  "result": {
    "notes": [],
    "bone_count": 34,
    "status": "passed",
    "issues": [],
    "files": [
      {
        "name": "model.glb",
        "bytes": 14968112,
        "content_type": "model/gltf-binary",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      },
      {
        "name": "rig.json",
        "bytes": 6549,
        "content_type": "application/json",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      },
      {
        "name": "rig_report.json",
        "bytes": 5224,
        "content_type": "application/json",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      },
      {
        "name": "rig_preview.png",
        "bytes": 215861,
        "content_type": "image/png",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      },
      {
        "name": "generation.json",
        "bytes": 2241,
        "content_type": "application/json",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      }
    ]
  },
  "compute_ms": 37404,
  "credits_charged": 20
}

MCP

Connect once. Your agent calls rig_3d_model and gets the download URLs back. This endpoint has only this tool's family, which keeps your agent's tool list short; one endpoint has every tool.

Claude Code

The first form signs in through the browser when you run /mcp. In .mcp.json (project root), ${MCPBYTES_API_KEY} is read from the environment when Claude Code connects. Claude Code docs

claude mcp add --transport http mcpbytes \
  https://api.mcpbytes.com/mcp/3d
Codex (CLI, IDE extension, ChatGPT desktop)

Codex reads the key from the environment variable each time it connects. The same table can go in ~/.codex/config.toml by hand; codex mcp add has no --header flag. Codex docs

codex mcp add mcpbytes --url https://api.mcpbytes.com/mcp/3d \
  --bearer-token-env-var MCPBYTES_API_KEY
Cursor

~/.cursor/mcp.json (all projects) or .cursor/mcp.json (one project). Remote servers take no "type". Without the header, the client signs you in with GitHub or an email link (OAuth). Cursor docs

~/.cursor/mcp.json
{
  "mcpServers": {
    "mcpbytes": {
      "url": "https://api.mcpbytes.com/mcp/3d",
      "headers": {
        "Authorization": "Bearer ${env:MCPBYTES_API_KEY}"
      }
    }
  }
}
11 more clients in the docs →
MCP tools
rig_3d_model
Adds a skeleton and skin weights to a static textured GLB (a character, animal or creature) so it can be posed and animated in Blender, Godot, Unity or three.js. Keeps the input's coordinates, scale and textures. Accepts one self-contained, uncompressed GLB with a single material and no skin, animation or morph targets, up to 1,000,000 triangles. Returns model.glb (skinned), rig.json (bones, hierarchy and rest positions), rig_report.json (structural checks and bend tests, status passed, needs_review or failed_checks) and rig_preview.png. A succeeded job means a valid rig was produced, not that it is ready to animate: read rig_report.json and look at rig_preview.png. This is an asynchronous job; use get_job to follow progress. A failed job is refunded. Costs 20 credits per job. Requires idempotency_key; retain it when retrying the same request.
create_upload
Returns a one-hour URL to PUT a local file to; then call the tool with the upload_id.
get_job
Status and results of a job; waits up to wait_seconds for it to finish.
cancel_job
Cancel a queued job or a workflow whose can_cancel is true; repeated calls never delete results.
list_jobs
Your most recent jobs, newest first.
read_job_file
Reads a text output (.txt .json .md .csv) of a succeeded job in chunks.
Full reference: inputs, options, outputs, limits and errors

Your first jobs are on us.

Start with 300 free credits. Sign in with GitHub or email and try a tool in your browser. No card required.