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
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.
File & spec conformance
SPEC-001— glTF spec conformance (Khronos validator)SPEC-003— External references resolvableSPEC-004— File size vs budget
Geometry integrity
GEO-002— Open boundaries (holes)GEO-003— Inconsistent winding / flipped normalsGEO-004— Degenerate triangles
Transforms & scale
XFM-001— Real-world scale sanityXFM-002— Origin / pivot placementXFM-003— Non-uniform node scale
Texture coordinates
UV-001— Missing UVs on textured meshUV-002— UV overlapUV-004— Texel stretch
Materials & textures
MAT-001— Texture resolution vs budgetMAT-002— Estimated GPU texture memoryMAT-004— Material count
Performance budget
PERF-001— Triangle countPERF-002— Vertex countPERF-003— Draw call estimate
Render checks
RND-001— Renders without errorRND-002— Visible pixelsRND-003— Silhouette coverage
Topology & surface structure
TOP-001— Quad reconstructibilityTOP-002— Vertex valence regularityTOP-004— Hard-edge share
The full catalog — every ID, method, and default severity — is in theChecks 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. Themeshcheck-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 thereport JSON Schema. Full walkthrough in theMCP guide.
Pricing
Credits, not seats.
A full validation (checks + renderer) costs 2 credits; checks-only costs 1. Re-fetching a stored report, the account endpoint, and schema fetches are free.
| Plan | Price | Credits/mo | Rate limit | Max file |
|---|---|---|---|---|
| Free | $0 | 300 | 10/min | 25 MB |
| Indie | $10 | 3,000 | 30/min | 100 MB |
| Studio | $39 | 10,000 | 60/min | 250 MB |
| Scale | $139 | 40,000 | 120/min | 250 MB |
Free is generous but limiting on purpose: 300 credits is roughly 150 full validations a month — enough to wire a pipeline and feel the ceiling. Unused credits don't roll over. Scale is a hard cap at 40,000 credits a month — no metered overage in v1; larger volumes are handled directly. Paid plans run on Polar, our merchant of record: pick a plan, check out, and the month's credits land on your account. The free tier and the demo above need no card.
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 bytes: deleted immediately after processing completes (success or failure). Never written to logs or backups.
- Reports (JSON): 30 days, then hard-deleted.
- Screenshots: stored 30 days, served only via signed URLs bound to report expiry.