Deterministic · Agent-first · No score
The QA gate between AI 3D generators and everything downstream.
POST a GLB or glTF. Get back a machine-readable report card — geometry defects, UV problems, performance-budget violations, plus rendered screenshots. Same file, same profile, same report, byte for byte. An instrument, not an oracle.
curl -X POST https://api.meshcheck.dev/v1/validate \
-H "X-Api-Key: mc_live_..." \
-F file=@barrel.glb \
-F profile=web
- SPEC-001glTF conformancepass
- GEO-002Open boundarieswarn
- MAT-002GPU texture memoryfail
- PERF-001Triangle countpass
What gets measured
Eight families of checks. Every result is a measurement.
Each check declares what it measures, its threshold, and a verdict — passwarn fail. Thresholds come from a budget profile you pick (web, mobile, pc, hero) and can be overridden per request. No 0–100 score — a rollup, and the numbers behind it.
SPEC-001 glTF spec conformance (Khronos validator)SPEC-003 External references resolvableSPEC-004 File size vs budgetGEO-002 Open boundaries (holes)GEO-003 Inconsistent winding / flipped normalsGEO-004 Degenerate trianglesXFM-001 Real-world scale sanityXFM-002 Origin / pivot placementXFM-003 Non-uniform node scaleUV-001 Missing UVs on textured meshUV-002 UV overlapUV-004 Texel stretchMAT-001 Texture resolution vs budgetMAT-002 Estimated GPU texture memoryMAT-004 Material countPERF-001 Triangle countPERF-002 Vertex countPERF-003 Draw call estimateRND-001 Renders without errorRND-002 Visible pixelsRND-003 Silhouette coverageTOP-001 Quad reconstructibilityTOP-002 Vertex valence regularityTOP-004 Hard-edge shareThe full catalog — every ID, method, and default severity — is in the Checks reference. Vision checks (VIS-*) are the one non-deterministic surface and live behind a separate /inspect endpoint, always labelled deterministic: false.
Live demo
Drop a model. Read the report.
This runs the real API on a rate-limited demo key. Screenshots are watermarked; uploaded bytes are deleted immediately after processing. Bring your own .glb/.gltf/.zip (up to 4.4 MB here), or try the bundled sample.
For agents
Built to be driven without a human.
Structured JSON, stable check IDs, a versioned schema, and one-fetch orientation. The meshcheck-mcp server hands any MCP client — Claude Code, Claude Desktop, Cursor — the four tools: validate_model, render_model, inspect_model, get_report. It reads models straight off disk by path.
Register in Claude Code
claude mcp add meshcheck -s project \
-e MESHCHECK_API_KEY=mc_live_... \
-- npx -y meshcheck-mcpOr drop into any MCP config
{
"mcpServers": {
"meshcheck": {
"command": "npx",
"args": ["-y", "meshcheck-mcp"],
"env": { "MESHCHECK_API_KEY": "mc_live_..." }
}
}
}Agent orientation in one fetch: llms.txt. Machine contract: openapi.json and the report JSON Schema. Full walkthrough in the MCP guide.
Pricing
Credits, not seats.
A full validation (checks + renderer) costs 2 credits; checks-only costs 1. Free is generous but limiting on purpose; paid plans run on Polar, our merchant of record. The free tier and the demo above need no card.
| Plan | Price | Credits/mo |
|---|---|---|
| Free | $0 | 300 |
| Indie | $10 | 3,000 |
| StudioMost teams | $39 | 10,000 |
| Scale | $139 | 40,000 |
Privacy is a feature
What we keep, and for how long.
These are product commitments — stated here, enforced in code, and repeated verbatim in llms.txt.
- Uploaded model bytesDeleted immediately after processing completes (success or failure). Never written to logs or backups. retention: 0
- Reports (JSON)Kept so you can re-fetch a stored report, then hard-deleted.retention: 30 days
- ScreenshotsServed only via signed URLs bound to report expiry.retention: 30 days