Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

dev.glbforge/glbforge

NPM · @GLBFORGE/MCP · SCANNED OCT 4

Make AI-generated 3D assets web-ready: budgets, SSIM-verified optimization, STL/USDZ export.

Available components

+1 this week 93 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security99
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 37 of 143 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency97
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to glbforge/glbforge). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 22 days ago).Pass
  • Disclosure check failed: no security disclosure policy was found in the source repository. See how to fix → Fail
Schema Quality & AI Usability76
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6332 tokens (~234/item across 27 items; 27 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management87
  • Stability observed for 26 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage95
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 82% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 27 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 27 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the dev.glbforge/glbforge MCP server?

dev.glbforge/glbforge runs locally as an npm package, launched with npx -y @glbforge/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @glbforge/mcp

# add to Claude Code
claude mcp add dev-glbforge-glbforge -- npx -y @glbforge/mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "dev-glbforge-glbforge": {
      "command": "npx",
      "args": [
        "-y",
        "@glbforge/mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "dev-glbforge-glbforge": {
      "command": "npx",
      "args": [
        "-y",
        "@glbforge/mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add dev-glbforge-glbforge -- npx -y @glbforge/mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-glbforge-glbforge": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@glbforge/mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add dev-glbforge-glbforge --command npx --arg -y --arg @glbforge/mcp
# ~/.hermes/config.yaml
mcp_servers:
  dev-glbforge-glbforge:
    command: "npx"
    args: ["-y", "@glbforge/mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "dev-glbforge-glbforge": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@glbforge/mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add dev-glbforge-glbforge -t stdio -c npx -a -y @glbforge/mcp
// mcp.json
{
  "mcpServers": {
    "dev-glbforge-glbforge": {
      "command": "npx",
      "args": [
        "-y",
        "@glbforge/mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Oct 26 −1
    • Stability: pass → 0.87 functional
  • 3 Oct 26 0
    • Stability: 0.97 → pass security
  • 2 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Sept 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Sept 26 −2
    • Stability: pass → 0.80 functional
  • 26 Sept 26 0
    • Stability: 0.97 → pass security
  • 25 Sept 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 7 Oct 2026 · Analysed npm/@glbforge/mcp@0.8.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem npm
Reason Verified
Discovered via Registry attestation endpoint
Source repo glbforge/glbforge
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/glbforge/glbforge/.github/workflows/release.yml@refs/tags/v0.8.0
Rekor log index 2799006367
Predicate type SLSA build provenance https://slsa.dev/provenance/v1
Subject digest sha512:13116b69b79eb01a692b7f91d9422cf2939f0bd178bc50daba3c0492c07dd2b56df76da8eb4bb9503f9a8b7a55e463b238b589dea1944dd1979986f91

Background: How many MCP packages publish verified provenance →

Dependencies 143 packages
Packages resolved 143
Stale 37
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 27 exposed · ~6,332 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
analyze_glb ~232

Analyze a GLB/glTF against a web performance budget. Returns a compact report card (score, pass/fail, key numbers, every error + top findings, nextActions) plus a rendered thumbnail; errors[] carries every finding with a code and prim_path. Call inspect_report for full findings/textures/topology, inspect_all for the format-agnostic view. Run before and after any optimization.

NameTypeReqDescription
pathstringyesAbsolute path to the .glb file
previewstring–Rendered PNG of the asset returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
profilestring–Budget profile: mobile-hero | desktop-hero | product-configurator; pin a version with name@N (e.g. mobile-hero@1)
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
topologyboolean–Run the (slower) weld/edge topology pass
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

analyze_performance ~240

Totals and estimates (triangles, vertices, draw calls, file size, GPU memory, prim count, scene depth, animation seconds), instancing_candidates, and a budget_check against a profile (ios_ar | visionos | web, a budget profile like mobile-hero, or custom_limits) — each overage names the metric, value, limit and worst_offender_prim_path. Use it to pick targetTriangles for optimize_glb.

NameTypeReqDescription
custom_limitsobject–Custom limits (override / replace the named profile): max_triangles, max_vertices, max_draw_calls, max_materials, max_textures, max_file_bytes, max_gpu_memory_mb, max_texture_size, max_texture_bytes,…
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
profilestring–Performance profile: ios_ar | visionos | web (documented in docs/performance-profiles.md), or a budget profile mobile-hero | desktop-hero | product-configurator[@N]
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

audit_directory ~106

Analyze every GLB in a directory against a budget profile in one call. Returns a per-file score table plus the failing list — then call optimize_glb on each failure (or ask before bulk-optimizing).

NameTypeReqDescription
dirstringyesAbsolute directory path
profilestring–Budget profile: mobile-hero | desktop-hero | product-configurator; pin a version with name@N (e.g. mobile-hero@1)
recursiveboolean––
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

capabilities ~97

What this GLBForge install can do right now: versions, which generation providers have keys (FAL_KEY → generate_image_to_3d; MESHY_API_KEY → meshy_*), whether a KTX2 encoder is installed (textureFormat=ktx2), profiles, and the working directory .env is read from. Call it before planning a generation or KTX2 route so you never hit a missing-key error mid-plan.

Input schema present but exposes no named parameters.

NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

compare_glb ~261

Measure how faithfully a candidate GLB matches a reference: visual SSIM over four fixed cameras (gated on the profile floor) plus geometric alignment (point-to-surface chamfer, F-scores, proportion IoU). Returns a reference | candidate | change-heatmap sheet for the weakest view. Use it to judge any optimization, a regenerated asset against the original, or two generators against each other.

NameTypeReqDescription
candidatestringyesAbsolute path to the candidate .glb (e.g. the optimized file)
geometryboolean–Also run the geometric alignment score (chamfer, F-scores, IoU). Costs seconds on 100k-tri meshes and up to a minute on multi-million-tri inputs; the visual score alone takes ~5s
minSsimnumber–Override the SSIM floor
profilestring–Budget profile: mobile-hero | desktop-hero | product-configurator; pin a version with name@N (e.g. mobile-hero@1)
referencestringyesAbsolute path to the reference .glb (e.g. the original)
sizeinteger––
texturesboolean–Include base-color textures in the renders
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

diff ~338

What changed between two versions of an asset — including what the edit BROKE by accident. Call it after an edit, with the file you started from and the file you produced, before deciding whether to keep the change. Reports per-part size deltas ("'legs' is 30% narrower along X"), triangle and shell deltas, topology regressions (was watertight, now has 3 open loops), origin drift relative to the geometry, node transform changes, meshes added or removed, and with visual=true a front / side / top / iso render delta (SSIM per view, cameras fixed to the before framing so a size change reads as a change). Read `summary` first; it is written as a change note with regressions first. Findings are diff@1 rules (regressions at warning, neutral changes at info) with causes and fixes, mirrored into errors[]. For a single file, call inspect.

NameTypeReqDescription
afterstringyesAbsolute path to the later version
beforestringyesAbsolute path to the earlier version
lineagestring–Optional id naming the asset across renames, for the local opt-in usage counter (never sent anywhere)
profilestring–Rule profile for severities: authoring or a budget profile
sizeinteger–Pixels per view for visual=true
topologyboolean–Welded topology pass on both files (shells, watertight, open loops, non-manifold deltas)
visualboolean–Render four canonical views of both and score SSIM per view (~150 ms per file at 128 px)
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

export_stl ~223

Export a GLB as binary STL for 3D printing — scaled to millimeters, rotated z-up (both reported as AXIS_CONVERTED / SCALE_CONVERTED). Reports watertightness (glbforge-extruded assets are watertight by construction; simplified AI meshes usually are too). Returns a thumbnail of the exported geometry. dry_run=true writes nothing.

NameTypeReqDescription
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
outstringyesAbsolute output path for the .stl
pathstringyesAbsolute path to the .glb
previewstring–Rendered PNG of the exported geometry returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
sizeMmnumber–Largest printed dimension in millimeters
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

export_usdz ~311

Export a GLB as USDZ for iOS AR Quick Look: binary usdc layer, UsdPreviewSurface materials, PNG/JPEG textures (WebP is transcoded; KTX2 is rejected), store-only 64-byte-aligned zip. Skinned assets get a UsdSkel skeleton with the first clip sampled at 30 fps; morph targets become UsdSkel blend shapes. Use on the optimized .web.glb. Returns the packed files, diff, post_validation (validate of the written usdz: packaging + AR Quick Look compatibility), every export-time change as a coded entry in errors[], and a thumbnail. dry_run=true writes nothing.

NameTypeReqDescription
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
formatstring–Layer encoding: binary crate (default, small) or ASCII usda (debugging)
jpegboolean–Encode opaque color textures as JPEG (smaller) instead of PNG
outstringyesAbsolute output path for the .usdz
pathstringyesAbsolute path to the .glb
previewstring–Rendered PNG of the exported asset returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

extrude_image ~492

Deterministic 2D graphic -> extruded 3D GLB (no AI, no credits, instant). Traces the image silhouette and projects the source image back on as texture. USE THIS instead of generation for flat artwork: logos, wordmarks, icons, stickers. Use generation for photographic or dimensional subjects. Supports a signage-style bevel on the rims. Returns the mesh stats, diff (the prims created), post_validation, and a thumbnail of the forged piece. dry_run=true writes nothing.

NameTypeReqDescription
bevelnumber–Bevel radius in meters (signage look; try depth*0.25)
bevelSegmentsinteger––
colorstring–Hex color when texture=false, e.g. "#ff2266"
depthnumber–Extrusion depth in meters (default width*0.08)
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
embossnumber–Luminance micro-relief in meters — bright artwork rises (try depth*0.15)
layersinteger–Layered color extrusion: quantize into N color layers at stepped depths (the "layered acrylic" look)
metallicnumber––
modestring–Solid-pixel test: alpha (transparent bg) | luma (white bg). Auto-detected.
outstringyesAbsolute output path for the .glb
pathstringyesAbsolute path to a PNG/JPEG/WebP with transparent or white background
pillownumber–Puffy-sticker dome height in meters (e.g. 0.04); supersedes bevel
presetstring–Material preset for the forged piece
previewstring–Rendered PNG of the forged piece returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
roughnessnumber––
simplifynumber–Contour tolerance in trace pixels
textureboolean–Project source image as baseColor
thresholdinteger––
widthnumber–World width in meters
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

generate_image_to_3d ~123

True volumetric 3D from a single image via open models on fal.ai GPU inference (needs FAL_KEY — check capabilities first): hunyuan (Hunyuan3D-2, highest quality), trellis (balanced), triposr (fastest). Cheaper than Meshy for most subjects; use Meshy for the richest PBR texturing. Returns a request id — poll generation_status, then download.

NameTypeReqDescription
imagestringyesLocal path or http(s) URL of the source image
modelstring––
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

generation_status ~192

Check an open-model generation (from generate_image_to_3d); when COMPLETED, pass download=true with an out path to save the GLB — the result then includes post_validation and a thumbnail of what was generated. dry_run=true skips writing.

NameTypeReqDescription
downloadboolean––
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
modelstringyes–
outstring–Absolute output path for the .glb when downloading
previewstring–Rendered PNG of the downloaded model returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
requestIdstringyes–
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

inspect ~586

Call this after EVERY edit to a mesh — each bpy script, boolean, join, export — before deciding what to do next. In one sub-second call it answers what is easy to get wrong blind: is it one connected shell or several floating pieces; is it a closed solid (watertight) or are there holes / overlapping faces; how big it is in real metres; which way is up; where the origin sits (base centre, centre, or floating off the object); whether node transforms are applied or mirrored. Read `summary` first. Every finding names a versioned rule (e.g. topo/open-edges from core-geometry@1), says whether it was measured, and carries a likely cause with its confidence plus a concrete fix; the same findings appear in errors[] with alias codes. `front` is always unknown (no honest heuristic exists) unless you declare it. Pass `expect` with what you meant to make ("chair, Z-up, meters, single-shell, 0.4-1.2m tall, front -Y, watertight, origin base") and it is checked as a contract: shell count, watertight, size range, origin are measured and fail as errors; a bare category gives a plausibility warning from a size table with a confidence. profile decides severities: authoring (default: topology problems are warnings, because they are most likely the last edit's doing) or a web budget such as mobile-hero (topology is informational). For per-mesh detail behind a finding use inspect_geometry; for materials, animation and budgets use inspect_all.

NameTypeReqDescription
expect––What you meant to make, free text ("chair, Z-up, single-shell, 0.4-1.2m tall, front -Y") or structured. Adds the intent@1 pack; unparsed tokens are reported
lineagestring–Optional id naming the asset across renames, for the local opt-in usage counter (never sent anywhere)
packsarray–Rule packs to run instead of the profile's: core-geometry | core-scene | intent (pin with @N)
paramsobject–Pack param overrides, e.g. { "core-geometry": { "fragmentFraction": 0.02 } }
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
profilestring–Rule profile: authoring or a budget profile mobile-hero | desktop-hero | product-configurator (pin with @N)
topologyboolean–Welded-space topology pass (shells, watertight, non-manifold). ~70 ms per 150k triangles; when false the topology rules are listed in `skipped`
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

inspect_all ~228

Everything at once for an UNFAMILIAR asset you did not author: validate + inspect_geometry + inspect_animation + inspect_materials + analyze_performance merged into one response, errors deduplicated. Call it once when a file arrives (a download, a generation result). While editing a mesh, call `inspect` instead after each change — it is the fast, rule-based read.

NameTypeReqDescription
custom_limitsobject–Custom limits (override / replace the named profile): max_triangles, max_vertices, max_draw_calls, max_materials, max_textures, max_file_bytes, max_gpu_memory_mb, max_texture_size, max_texture_bytes,…
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
profilestring–Performance profile: ios_ar | visionos | web (documented in docs/performance-profiles.md), or a budget profile mobile-hero | desktop-hero | product-configurator[@N]
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

inspect_animation ~147

Does anything actually move? Clips with time range / fps / duration, animated prims and which properties animate, skeletons (joint_count, bound_meshes, max_influences_per_vertex, unbound_vertex_count), blend shapes with is_driven, root motion. Codes: SKELETON_UNBOUND, MESH_NOT_DEFORMING, BLENDSHAPE_UNDRIVEN, ANIMATION_ZERO_LENGTH, ANIMATION_NO_MOTION. Call it before render_animation_strip or export_usdz on any rigged asset.

NameTypeReqDescription
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

inspect_geometry ~220

Per-mesh drill-down behind an `inspect` finding (for the edit loop itself call `inspect`: faster, semantic, named rules). Keyed by prim_path: vertex/face/triangle counts, is_manifold, degenerate faces, normals authored|missing and inverted-normal count, UV sets with out-of-range flags, world bounding box in metres; scene-level bounds, pivot position (pivot_at_base for AR placement) and scale warnings (largest dimension < small_scale or > large_scale). Use it to decide whether an asset needs normals, rescaling or re-pivoting before export.

NameTypeReqDescription
large_scalenumber–Metres; SCALE_TOO_LARGE above this
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
small_scalenumber–Metres; SCALE_TOO_SMALL below this
topologyboolean–Run the manifold / degenerate edge pass (O(n); skip for speed on huge meshes)
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

inspect_materials ~160

Materials with shader_type and bound_meshes, unbound_meshes, every texture (resolved, resolution, format, size_bytes, channel, color_space, used_by material+input, memory estimate), missing_textures, texture_memory_estimate_mb, non_power_of_two and oversized (threshold configurable). Codes: TEXTURE_UNRESOLVED, MATERIAL_UNBOUND, MESH_NO_MATERIAL, TEXTURE_OVERSIZED, TEXTURE_NPOT, TEXTURE_FORMAT_UNSUPPORTED.

NameTypeReqDescription
oversized_thresholdinteger–Pixels; TEXTURE_OVERSIZED above this on either axis
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

inspect_report ~162

Drill into an analysis: full findings (with fix suggestions and rule data), per-texture stats, materials, welded-space topology, geometry per primitive, scene/generator facts, or the whole report. Re-analyzes deterministically, so it works on any file at any time.

NameTypeReqDescription
pathstringyesAbsolute path to the .glb file
profilestring–Budget profile: mobile-hero | desktop-hero | product-configurator; pin a version with name@N (e.g. mobile-hero@1)
ruleIdstring–findings only: exact rule id or prefix, e.g. "tex" or "perf/file-size"
sectionstring––
severitystring–findings only
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

list_profiles ~91

List the web performance budget profiles: triangle/draw-call/texture/file-size/GPU-memory caps, the minimum visual-fidelity SSIM an optimization must keep, the profile version to pin in CI, and (with rationale=true) why each cap is what it is. (AR targets — ios_ar, visionos — live in analyze_performance.)

NameTypeReqDescription
rationaleboolean–Include the per-cap methodology text
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

meshy_create_task ~226

Start a Meshy generation task (needs MESHY_API_KEY — check capabilities first). kind "image-to-3d" takes a local image path or URL; kind "text-to-3d" takes a prompt (geometry preview stage — pass refine_from to texture a finished preview). Returns a task id immediately; poll meshy_task_status (generation takes minutes).

NameTypeReqDescription
enable_pbrboolean––
imagestring–image-to-3d: local path or http(s) URL
input_task_idstring–remesh/retexture: the SUCCEEDED task to operate on
kindstringyes–
promptstring–text-to-3d: what to generate; retexture: the style prompt
refine_fromstring–text-to-3d: preview task id to refine (texture stage)
should_textureboolean–image-to-3d: run the texture stage
target_polycountinteger––
topologystring–remesh: output topology
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

meshy_download ~163

Download a finished Meshy task's GLB to a local path; returns post_validation and a thumbnail of the model. dry_run=true skips writing.

NameTypeReqDescription
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
kindstringyes–
outstringyesAbsolute output path for the .glb
previewstring–Rendered PNG of the downloaded model returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
taskIdstringyes–
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

meshy_task_status ~43

Check a Meshy task: status, progress %, and (when finished) model URLs.

NameTypeReqDescription
kindstringyes–
taskIdstringyes–
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

optimize_glb ~439

Optimize a GLB for web delivery: weld, simplify to the profile triangle budget (bone-aware for skinned/morphing meshes), fill smooth normals, resize/re-encode textures to WebP, meshopt-compress. Writes the optimized file and returns a before/after diff (prims added/removed, properties changed), the measured visual-fidelity SSIM, the compact report, post_validation of the output, a sha256, and a thumbnail — or a reference | result | change sheet when SSIM fails. Every change the pipeline makes on its own (joined prims, generated normals, re-encoded textures) is listed in errors[] with a code. dry_run=true computes everything and writes nothing. Typically 90%+ smaller.

NameTypeReqDescription
compressboolean––
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
lodsarray–Extra LOD triangle targets, e.g. [40000, 10000]
outstring–Output path (default: <input>.web.glb)
pathstringyesAbsolute path to the input .glb
previewstring–thumbnail | turntable | compare (reference | result | change heatmap of the weakest view) | none. A failing SSIM always returns the comparison sheet.
profilestring–Budget profile: mobile-hero | desktop-hero | product-configurator; pin a version with name@N (e.g. mobile-hero@1)
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
targetTrianglesinteger––
textureFormatstring–webp = smallest file; ktx2 = GPU-resident compression, ~8x less video memory (needs basisu/toktx installed)
texturesboolean––
verifyboolean–Perceptual verification: SSIM of fixed-camera renders before vs after, gated on the profile floor; a failing SSIM fails the report
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

render ~306

Deterministic software render (no GPU) of any GLB / USDZ / USD: view=front (one straight-on view), thumbnail (one 3/4 view), turntable (N angles tiled into one contact sheet, default 8), or custom (explicit camera position/target/fov). Pass time (seconds) or frame (index at fps) to pose an animated asset. Returns the PNG plus the camera(s) used so you know what you are looking at. Optionally saves the PNG.

NameTypeReqDescription
anglesinteger–turntable: number of azimuths
animationinteger–Clip index when the asset has several
cameraobject–custom: eye position (world metres), look-at target (default scene centre), vertical fov in degrees (default 40)
fpsnumber–Frame rate used to convert frame → time (USD files use their own timeCodesPerSecond)
frameinteger–Animation frame index at fps (alternative to time)
outstring–Absolute path to also save the PNG
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
sizeinteger–Pixels per view/tile
texturesboolean–Sample base-color textures
timenumber–Animation time in seconds (posed render)
viewstring––
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

render_animation_strip ~269

Contact sheet of an animated asset at the requested frames (stills, labelled with frame and time) so you can verify that it moves the way it should. frames are indices at fps (or pass times in seconds). include_clip=true also writes an animated GIF next to the sheet for human reviewers. Run inspect_animation first to learn the clip range.

NameTypeReqDescription
animationinteger–Clip index
cameraobject––
columnsinteger––
fpsnumber–Frame rate for frame → time (USD files use their own timeCodesPerSecond)
framesarray–Frame indices at fps, e.g. [0, 10, 20, 30]. Default: 8 evenly spaced frames over the clip
include_clipboolean–Also write an animated GIF (<out or path>.strip.gif)
outstring–Absolute path to save the contact sheet PNG
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
sizeinteger–Pixels per tile
texturesboolean––
timesarray–Times in seconds (alternative to frames)
viewstring––
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

render_preview ~124

Render a GLB with the deterministic software rasterizer (no GPU): one thumbnail or a 2x2 turntable of four angles. Use it to look at an asset before deciding, or to verify a result. Optionally saves the PNG. (For front / N-angle / custom cameras, animation frames, and USD inputs use `render`.)

NameTypeReqDescription
outstring–Absolute path to also save the PNG
pathstringyesAbsolute path to the .glb
sizeinteger–Pixels per view
viewstring––
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

ship_asset ~367

One call from anything to web-ready. A .glb is optimized to the budget and gated. An image is routed: flat artwork forges instantly (free); photographic input returns a routing instruction to call generate_image_to_3d (then optimize_glb the result). Returns the compact report, a geometric fidelity bound, the measured visual-fidelity SSIM (fixed-camera renders before vs after), a sha256 of the output, diff + post_validation, and a thumbnail — or a reference | result | change sheet when SSIM fails. dry_run=true returns the diff without writing.

NameTypeReqDescription
dry_runboolean–Compute everything in memory and return the diff it would apply; write nothing
inputstringyesAbsolute path: .glb or image (png/jpg/webp/svg)
lodsarray–Extra geometry-only LOD files, e.g. [40000, 10000]
outstring–Output path (default: <input>.web.glb)
previewstring–Rendered PNG of the shipped asset returned with the result: thumbnail (one 3/4 view) | turntable (4 angles tiled 2x2) | none
profilestring–Budget profile: mobile-hero | desktop-hero | product-configurator; pin a version with name@N (e.g. mobile-hero@1)
renderboolean–Checkpoint render: true = attach a thumbnail even if preview=none, false = no image (overrides preview)
targetTrianglesinteger–Override the profile triangle target
textureFormatstring––
verifyboolean–Perceptual (SSIM) verification; a failing SSIM fails the report
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

validate ~186

Does the asset open, and is it well-formed for its target? Returns format, USDZ packaging compliance (stored entries, 64-byte alignment, allowed file types), layer metadata (default_prim, up_axis, meters_per_unit, layer_stack), schema errors, and AR Quick Look compatibility with arkit_issues — every issue with a stable code and prim_path. mode=quick (default) runs no renders and finishes well under a second; mode=full adds analyze_performance and a front render. Call it first on any file, and after every mutation.

NameTypeReqDescription
modestring––
pathstringyesAbsolute path to a .glb, .gltf, .usdz, .usda, .usdc or .usd file
profilestring–mode=full only: performance profile for the budget check (default ios_ar)
NameTypeReqDescription
data–yes–
duration_msintegeryes–
errorsarrayyesEvery diagnostic (error, warning, info), errors first
okbooleanyesfalse only when the tool could not run; an asset with errors in it is still ok:true
summarystringyesOne line, human-readable

No examples provided.

Common questions

What is the dev.glbforge/glbforge MCP server?

dev.glbforge/glbforge is an MCP server listed in the public MCP registry as dev.glbforge/glbforge. Make AI-generated 3D assets web-ready: budgets, SSIM-verified optimization, STL/USDZ export. This page covers its npm package (@glbforge/mcp).

Is the dev.glbforge/glbforge MCP server safe to use?

dev.glbforge/glbforge scores 93 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 4 October 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the dev.glbforge/glbforge MCP server expose?

dev.glbforge/glbforge exposes 27 tools: inspect, diff, validate, inspect_geometry, inspect_animation, and 22 more. Their descriptions and schemas cost roughly 6,332 tokens of context every time the server is loaded.

Is the dev.glbforge/glbforge MCP server still maintained?

dev.glbforge/glbforge is still listed as active in the MCP registry. We last reached this channel on 4 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the dev.glbforge/glbforge MCP server under?

dev.glbforge/glbforge declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.