Skip to content
MCPBytes
Available3D Models

3D Model Optimization

Any triangle count. Same look.

  • API
  • MCP
60 credits per jobMCP tool: optimize_3d_model
Exampleoptimize_3d_model

Before

model.glb936,844 triangles, one textured mesh

After

15,000 triangles · new 2048² textures
  • model.glb
  • generation.json
A create_3d_model output rebuilt for a phone on 2026-09-22: 4.0 MB GLB in 279 s of GPU time.

What it does

From a million triangles to a phone-sized asset.

Send a textured GLB and a triangle count between 1,000 and 200,000. The model is rebuilt at that count and gets new base-colour, metal/roughness and normal maps, tuned until it renders like the original from every side. Where simplification has to keep the original textures and stops at a quarter of the triangles or so, this goes all the way down. The result keeps the input's coordinates and scale. Start the job, keep its id and poll: it takes a few minutes.

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
Four to eight minutes; the job's deadline is one hour

Pick the count.

Anything from 1,000 to 200,000 triangles. The result lands on the count, or a few triangles under it.

New textures, same look.

Colour, surface and fine detail are baked into fresh maps, so the lighter model still reads like the original.

Drops into place.

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

Pricing

Pay per job, in credits.

Costs 60 credits per job. A job that fails costs nothing.

Pricing details

Start free

Available now

100free 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
  • A job that fails costs nothing

Price per job

Optimization

Per job
60 credits

Limits

Jobs
20 per rolling 24 hours
Model
Up to 50 MB and 2,000,000 triangles
At a time
1 job
Uploads
Up to 50 MB
Results
Kept for 24 hours

API

Call it from code or from an agent.

The same tool runs over the REST API and as MCP tools. One API key works for both.

Start a job

Send the file as the request body. Options such as target_faces go in the query string.

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 the job until it succeeds or fails, then download the files.

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: the model is decimated and given a new UV layout, then its shape and new base-colour, metallic-roughness and normal maps are optimised on a GPU until it renders 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.
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
Request cancellation when the job advertises can_cancel; 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.

From API key to first call in minutes.

Sign in with GitHub, create a key, and point your agent or code at MCPBytes. Your first 100 credits are free.

# Sign in with GitHub when prompted
claude mcp add --transport http mcpbytes \
  https://api.mcpbytes.com/mcp

# Or use an API key
claude mcp add --transport http mcpbytes \
  https://api.mcpbytes.com/mcp \
  --header "Authorization: Bearer $MCPBYTES_API_KEY"