Skip to content
MCPBytes

A fraction of the weight.The same look.

Shrink a detailed 3D model to the size you need, with new textures that keep it looking like the original.

60 credits per job300 free credits to start

Simplify or optimize?
Available
  • API
  • MCP
MCP tool: optimize_3d_model

Before

model.glb936,844 triangles, one textured mesh

After

15,000 triangles · new 2048² textures
  • model.glb
  • generation.json
A4Optimize a 3D modelA generated lounge chair, rebuilt for phones on 2026-09-22: 4.0 MB GLB in 279 s of processing time.

A million triangles in. Phone-ready out.

3D models are built from tiny triangles, and a generated one can have a million of them: heavy for a phone, AR or a web page. Pick a number from 1,000 to 200,000. The model is rebuilt at that count with fresh textures, so it still looks like the original from every side. It keeps its size and position, so you can swap the file and nothing moves. A job takes a few minutes.

A real job, before and after. Drag either model to turn it.

Interactive 3D model of the generated lounge chair before optimization

Before

  • 936,844 triangles
  • 40.8 MB
Interactive 3D model of the same lounge chair after optimization to 15,000 triangles

After

  • 15,000 triangles
  • 4.0 MB
  • new 2048² textures
A lounge chair from Create a 3D model, before and after optimize_3d_model at target_faces 15000. Sizes are the job's own files; the page shows web copies of both (Draco geometry, WebP textures) so they load quickly.
Formats
.glb (self-contained, uncompressed, one material)
Outputs
model.glb (three 2048² or 1024² textures) and generation.json
Targets
1,000 to 200,000 triangles; inputs up to 2,000,000
Duration
Asynchronous; one-hour deadline including queueing and execution

Choose the size.

Any count from 1,000 to 200,000 triangles, and a report of exactly what you got.

New textures. Same look.

Color, surface and fine detail are painted into brand-new textures, so the lighter model still looks like the original.

Drops into place.

Same coordinates and scale as the input: swap the file and nothing moves.

Download the example.

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

  • Before model

    The file used by the interactive preview. The comparison caption explains how this delivery copy relates to the original job output.

    GLB · 3.7 MB

  • After model

    The file used by the interactive preview. The comparison caption explains how this delivery copy relates to the original job output.

    GLB · 464 KB

Pay by the job.

Costs 60 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

Optimize a 3D model

Per job
60 credits

Limits

Model
Up to 2,000,000 triangles

Limits by account

Largest input
Free50 MB
Pay as you go100 MB
Monthly bundle100 MB
Jobs at once
Free3 jobs
Pay as you go5 jobs
Monthly bundle8 jobs
Results kept
Free1 day
Pay as you go7 days
Monthly bundle30 days
Largest upload
Free50 MB
Pay as you go100 MB
Monthly bundle100 MB

Free until your first purchase; any credit pack moves you to Pay as you go; a monthly bundle while it lasts. GPU tools like this one run up to 5 of your jobs at a time; the rest wait their turn. Compare accounts

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 target_faces go in the JSON options object, or the query string for a file body.

Requestoptimize.sh
# Idempotency-Key is required: repeating it returns the same job
curl "https://api.mcpbytes.com/v1/tools/optimize_3d_model/jobs?filename=model.glb&target_faces=15000&seed=42" \
  -H "Authorization: Bearer $MCPBYTES_API_KEY" \
  -H "Content-Type: application/octet-stream" \
  -H "Idempotency-Key: optimize-example-001" \
  --data-binary @model.glb
Response202 Accepted · trimmed
{
  "tool": "optimize_3d_model",
  "status": "queued",
  "input_kind": "file",
  "workflow": {
    "stage": "Optimizing",
    "deadline": "2026-09-22T22:23:09.206Z",
    "cancel_pending": false,
    "refund_pending": false
  },
  "capabilities": {
    "can_cancel": true
  },
  "options": {
    "target_faces": 15000,
    "texture_resolution": 2048,
    "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 the model from result.files[].url
curl -fsSLo model.glb "$MODEL_URL"
Response200 OK · trimmed
{
  "tool": "optimize_3d_model",
  "status": "succeeded",
  "result": {
    "files": [
      {
        "name": "model.glb",
        "bytes": 4143860,
        "content_type": "model/gltf-binary",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      },
      {
        "name": "generation.json",
        "bytes": 2218,
        "content_type": "application/json",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      }
    ],
    "notes": []
  },
  "compute_ms": 278600,
  "credits_charged": 60
}

MCP

Connect once. Your agent calls optimize_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
optimize_3d_model
Rebuilds a textured GLB at any triangle count from 1,000 to 200,000, for phones, AR, the web and games, with new base-colour, metallic-roughness and normal maps so it still looks like the original from every side. Keeps the input's coordinates and scale. Accepts one self-contained, uncompressed GLB with a single material, up to 2,000,000 triangles. Returns model.glb (textures embedded) and generation.json. This is an asynchronous job of a few minutes; use get_job to follow progress. A failed job is refunded. Costs 60 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.