Skip to content
MCPBytes
Available3D Models

Image to 3D Model

One picture in, a textured model out.

  • API
  • MCP
From 100 creditsMCP tool: create_3d_model_from_image
Examplecreate_3d_model_from_image

Before

T.pngOne 1024 × 1024 PNG with a transparent background

After

929,819 triangles · 2048² textures
  • model.glb
  • generation.json
The TRELLIS.2 example image, run against the live API on 2026-09-22: 45.9 MB GLB in 196 s of GPU time.

What it does

A reconstruction your agent can hand to a viewer, an engine or the splitter.

Send one image of an object and get back a self-contained glTF binary with PBR textures, plus a generation.json that records the exact profile, model revision, seeds, settings and validation counts. Runs on a dedicated GPU worker; jobs take minutes, so start them, keep the job id and poll. Geometry is unitless: no physical size, rigging, watertightness or print readiness is inferred from a picture.

Formats
.png .jpg .jpeg, up to 20 MB and 25 megapixels
Outputs
model.glb and generation.json
Quality
high: 2048 × 2048 textures, about one million faces after decimation
Background
Transparent PNGs are used as-is; opaque images are segmented first
Duration
About three to six minutes on a warm worker; the job's deadline is one hour

How it works

Start it, then come back for it.

  1. 01

    Send an image

    Upload a PNG or JPEG, send it as the request body, give a public HTTPS URL, or reference one of your own finished outputs with job_file. A transparent background gives the reconstruction the cleanest silhouette.

  2. 02

    Wait for the worker

    The job is accepted at once and charged when the GPU stage is authorized. Poll get_job or GET /v1/jobs/{id}; the job reports its stage and deadline, and can be canceled while it waits.

  3. 03

    Use the model

    Download model.glb from result.files, open it in any glTF viewer, or pass it to the splitter or the inspector as a job_file without downloading it.

Pricing

Pay per job, in credits.

quality: high, texture_resolution: 2048: 100 credits. 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

Image to 3D

quality: high · texture resolution: 2048
100 credits

Limits

Jobs
20 per rolling 24 hours
Image
Up to 20 MB and 25 megapixels
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 quality go in the query string.

Requestreconstruct.sh
# idempotency_key is required: repeating the same request returns the same job
curl https://api.mcpbytes.com/v1/tools/create_3d_model_from_image/jobs \
  -H "Authorization: Bearer $MCPBYTES_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://raw.githubusercontent.com/microsoft/TRELLIS.2/75fbf0183001ed9876c8dbb35de6b68552ee08bd/assets/example_image/T.png",
    "options": {"quality": "high", "seed": 42},
    "idempotency_key": "image-example-001"
  }'
Response202 Accepted · trimmed
{
  "tool": "create_3d_model_from_image",
  "status": "queued",
  "input_kind": "file",
  "options": {
    "quality": "high",
    "texture_resolution": 2048,
    "seed": 42
  },
  "workflow": {
    "stage": "model",
    "deadline": "2026-09-22T00:58:46.412Z",
    "cancel_pending": false,
    "refund_pending": false
  },
  "capabilities": {
    "can_cancel": true
  },
  "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": "create_3d_model_from_image",
  "status": "succeeded",
  "credits_charged": 100,
  "compute_ms": 196488,
  "result": {
    "engines": "trellis2",
    "files": [
      {
        "name": "model.glb",
        "bytes": 48154080,
        "content_type": "model/gltf-binary",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      },
      {
        "name": "generation.json",
        "bytes": 1694,
        "content_type": "application/json",
        "url": "https://api.mcpbytes.com/blob/dl/…"
      }
    ]
  }
}

MCP

Connect once. Your agent calls create_3d_model_from_image 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}"
      }
    }
  }
}
VS Code (GitHub Copilot)

.vscode/mcp.json, or "MCP: Open User Configuration". The top-level key is "servers". VS Code asks for the key once and stores it securely. Without the header, the client signs you in with GitHub or an email link (OAuth). VS Code docs

.vscode/mcp.json
{
  "inputs": [
    {
      "type": "promptString",
      "id": "mcpbytes-api-key",
      "description": "MCPBytes API key (mcpb_...)",
      "password": true
    }
  ],
  "servers": {
    "mcpbytes": {
      "type": "http",
      "url": "https://api.mcpbytes.com/mcp/3d",
      "headers": {
        "Authorization": "Bearer ${input:mcpbytes-api-key}"
      }
    }
  }
}
Gemini CLI

~/.gemini/settings.json or .gemini/settings.json. The key is "httpUrl" ("url" means the older SSE transport). Without the header, the client signs you in with GitHub or an email link (OAuth). Then sign in with /mcp auth. Gemini CLI docs

~/.gemini/settings.json
{
  "mcpServers": {
    "mcpbytes": {
      "httpUrl": "https://api.mcpbytes.com/mcp/3d",
      "headers": {
        "Authorization": "Bearer ${MCPBYTES_API_KEY}"
      }
    }
  }
}
OpenCode

opencode.json or ~/.config/opencode/opencode.json. Variables are written {env:NAME}. "oauth": false makes a wrong key an error instead of a sign-in; remove it and the headers to sign in with OAuth. OpenCode docs

opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mcpbytes": {
      "type": "remote",
      "url": "https://api.mcpbytes.com/mcp/3d",
      "enabled": true,
      "oauth": false,
      "headers": {
        "Authorization": "Bearer {env:MCPBYTES_API_KEY}"
      }
    }
  }
}
oh-my-pi (omp)

.omp/mcp.json (project) or ~/.omp/agent/mcp.json (user). Without the header, the client signs you in with GitHub or an email link (OAuth). Then run /mcp reauth mcpbytes in a session. omp also picks up servers already set up for Claude Code, Cursor, VS Code, Gemini CLI and Codex. oh-my-pi docs

.omp/mcp.json
{
  "mcpServers": {
    "mcpbytes": {
      "type": "http",
      "url": "https://api.mcpbytes.com/mcp/3d",
      "headers": {
        "Authorization": "Bearer ${MCPBYTES_API_KEY}"
      }
    }
  }
}
pi

pi has no MCP support, by design: its author recommends command-line tools described by a skill. Install the MCPBytes skill (it drives the REST API with a small script), or add MCP with the pi-mcp-adapter extension. pi docs

mkdir -p ~/.pi/agent/skills/mcpbytes
curl -fsSL https://mcpbytes.com/skills/mcpbytes/mcpbytes.tar.gz \
  | tar -xz -C ~/.pi/agent/skills/mcpbytes
DeepSeek

DeepSeek's API does not run MCP servers itself: the agent you use DeepSeek models in does (Claude Code, OpenCode, oh-my-pi, Cline: use that agent's entry here). DeepSeek's own agent, DeepSeek Harness (dsh, a developer preview), takes this patch in ~/.dsh/cordis.patch.yml; it supports headers, not OAuth. DeepSeek docs

~/.dsh/cordis.patch.yml
- insert:
    - id: mcp-mcpbytes
      name: '@deepseek-ai/dsh-mcp-client'
      config:
        serverName: mcpbytes
        transport: streamable-http
        url: https://api.mcpbytes.com/mcp/3d
        headers:
          Authorization: !!js '`Bearer ${process.env.MCPBYTES_API_KEY}`'
Windsurf

~/.codeium/windsurf/mcp_config.json. Without the header, the client signs you in with GitHub or an email link (OAuth). Cascade allows 100 tools in total, so a single-family endpoint helps. Windsurf docs

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "mcpbytes": {
      "serverUrl": "https://api.mcpbytes.com/mcp/3d",
      "headers": {
        "Authorization": "Bearer ${env:MCPBYTES_API_KEY}"
      }
    }
  }
}
Goose

~/.config/goose/config.yaml (Windows: %APPDATA%\Block\goose\config\config.yaml), or "goose configure" > Add Extension > Remote Extension (Streamable HTTP). The key is "uri". Without the header, the client signs you in with GitHub or an email link (OAuth). Goose docs

~/.config/goose/config.yaml
extensions:
  mcpbytes:
    type: streamable_http
    name: mcpbytes
    enabled: true
    uri: "https://api.mcpbytes.com/mcp/3d"
    headers:
      Authorization: "Bearer ${MCPBYTES_API_KEY}"
    env_keys:
      - MCPBYTES_API_KEY
    timeout: 300
Zed

settings.json, or Settings > AI > MCP Servers > Add Server > Add Remote Server. Zed's settings cannot read environment variables, so sign in instead of storing a key: with no Authorization header, Zed starts the OAuth sign-in. Zed docs

settings.json
{
  "context_servers": {
    "mcpbytes": {
      "url": "https://api.mcpbytes.com/mcp/3d"
    }
  }
}
Claude (desktop and web) and ChatGPT

These add remote servers as connectors and sign in with OAuth; there is no field for an API key. Claude: Customize > Connectors > Add custom connector. ChatGPT: turn on Developer mode in Settings, then create an app. Enter this URL: Claude docs

Connector URL
https://api.mcpbytes.com/mcp/3d
Any client that only starts local (stdio) servers

mcp-remote runs locally and forwards to the endpoint. The header is written without a space and takes its value from "env", because some clients on Windows break arguments that contain spaces. Use it for Cline too. Without the --header arguments and "env", mcp-remote signs you in with OAuth. Any client that only starts local docs

mcp-remote
{
  "mcpServers": {
    "mcpbytes": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote",
        "https://api.mcpbytes.com/mcp/3d",
        "--transport",
        "http-only",
        "--header",
        "Authorization:${MCPBYTES_AUTH}"
      ],
      "env": {
        "MCPBYTES_AUTH": "Bearer <your key>"
      }
    }
  }
}
MCP tools
create_3d_model_from_image
Reconstruct a textured model from a PNG or JPEG. Select an approved economy or high quality profile. Returns model.glb and generation.json; geometry has no inferred physical scale. quality: high, texture_resolution: 2048: 100 credits.
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.

Use cases

Where it fits.

  • Concept to asset

    Turn a product photo or a rendered concept into a placeholder asset an engine can load today.

  • Agent pipelines

    Chain image → model → split into parts without moving files through the conversation.

  • Catalog previews

    Give shoppers or reviewers a turntable of an item from one photograph.

  • Have a different workflow in mind?

    Read the docs

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"