# inspect_3d_model

Check discovery first: this tool is available only on deployments that enable it.
Use it to understand a model before deciding whether to split it. Supports GLB,
glTF, OBJ, PLY, STL, OFF and self-contained Blender files. Files are uploaded to
MCPBytes. No segmentation or repair is performed.

Give `upload_id` or a public HTTPS `url` (with `filename` if needed), optional
`idempotency_key`, `wait_seconds` (default 20, at most 45), and `max_length` for the
inline summary (16–100,000 bytes, default 20,000). No tool-specific options.

Read `summary.txt` inline or with `read_job_file`. Download/read `inspection.json`
for counts, world-space bounds and dimensions, known units, resources, warnings,
and per-instance topology. Counts include every mesh instance. Unknown units are
null. Blender reports evaluated meshes after conversion to glTF.

Both stored and exactly-coincident-vertex-merged topology are included. Welding
is only an analysis copy, in each mesh's local coordinates; separate instances
are never welded. Components connect through shared vertices. Watertightness is
not proof of printability, absence of intersections, or consistent winding.
Missing optional textures produce warnings; missing geometry fails the job.
External resources are never fetched. Reports over 10 MiB omit detail and set
`details_truncated`; aggregate geometry counts remain available.

Free limits: 500 jobs per rolling 24 hours (50 until the account's first credit
purchase), 200,000 faces, existing account upload
and concurrency limits. Inspect then split may reuse the same upload ID, while
the upload remains available. Each operation counts as its own job.

Without MCP:

```bash
python scripts/mcpbytes.py run inspect_3d_model model.glb --out inspection/
python scripts/mcpbytes.py read j_... inspection.json
```

Handle `invalid_mesh`, `unsupported_feature`, `limit_exceeded` and `timeout`
using the returned hint. Do not repeat a failed input unchanged.
