Skip to content
MCPBytes
Available3D Models

3D Model Inspection

Know what is inside your model.

  • API
  • MCP
From 10 creditsMCP tool: inspect_3d_model
Exampleinspect_3d_model

Before

cube.glbOne cube mesh

After

8 vertices · 12 triangles
  • summary.txt
  • inspection.json
Cube fixture. Counts include every mesh instance; topology checks do not certify printability.

What it does

A model report your agent can read.

Inspect a model's counts, bounds, units, materials and texture references. Compare stored topology with an analysis copy that merges exactly coincident vertices. Get a short summary and a detailed JSON report, without changing or segmenting the model.

Formats
.glb .gltf .obj .ply .stl .off .blend
Outputs
inspection.json and summary.txt
Dimensions
World-space bounds; units unknown when unspecified
Topology
Components, boundary edges, non-manifold edges, degenerate faces and watertightness
Blender
Evaluated meshes; pack resources into the file

How it works

Inspect before you split.

  1. 01

    Send a model

    Upload a self-contained file, send it as the request body, or provide a public HTTPS URL.

  2. 02

    Read its report

    Get counts, dimensions and topology checks. Missing optional textures appear as warnings; missing geometry fails the job.

  3. 03

    Choose the next step

    Use the report to decide whether to split the model, reduce its complexity elsewhere, or supply missing resources.

Pricing

Pay per job, in credits.

Costs 10 credits up to 50,000 faces, 25 credits up to 200,000 faces. The price follows the size of the input, and 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
  • Charged per job, by the size of the input
  • A job that fails costs nothing

Price per job

Model Inspection

Up to 50,000 faces
10 credits
Up to 200,000 faces
25 credits

Limits

Inspection geometry
Up to 200,000 faces per model
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. No tool-specific options are needed.

Requestinspect.sh
curl "https://api.mcpbytes.com/v1/tools/inspect_3d_model/jobs?filename=cube.glb" \
  -H "Authorization: Bearer $MCPBYTES_API_KEY" \
  --data-binary @cube.glb
Response202 Accepted · trimmed
{
  "tool": "inspect_3d_model",
  "status": "queued",
  "options": {},
  "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
curl "https://api.mcpbytes.com/v1/jobs/$JOB_ID" \
  -H "Authorization: Bearer $MCPBYTES_API_KEY"

# Once status is succeeded, read the report
curl "https://api.mcpbytes.com/v1/jobs/$JOB_ID/files/inspection.json" \
  -H "Authorization: Bearer $MCPBYTES_API_KEY"
Response200 OK · trimmed
{
  "tool": "inspect_3d_model",
  "status": "succeeded",
  "result": {
    "schema_version": 1,
    "object_count": 1,
    "mesh_instance_count": 1,
    "vertex_count": 8,
    "face_count": 12,
    "details_truncated": false,
    "notes": []
  }
}

MCP

Connect once. Your agent calls inspect_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}"
      }
    }
  }
}
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
inspect_3d_model
Inspects a 3D model without segmentation or repair. Returns counts, bounds, units, resources and topology checks in inspection.json, with summary.txt inline. Compares stored topology with exactly coincident vertices merged per mesh. Supports .glb .gltf .obj .ply .stl .off .blend. Give upload_id or a public https url. Waits up to wait_seconds for the result. Costs 10 credits up to 50,000 faces, 25 credits up to 200,000 faces.
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.
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.

  • Asset intake

    Check the size and structure of an asset before processing it.

  • Agent workflows

    Give an agent a compact description of a model without loading a segmentation model.

  • Topology checks

    Distinguish vertex seams from open boundaries by comparing both analyses.

  • 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"