Leaderboard/io.github.nirholas/threews-3d-studio
MCP ServerScored via MCP protocol probing: initialize handshake, tools/list conformance, and ping + tool invocation performance.

io.github.nirholas/threews-3d-studio

Turn text or an image into an interactive, textured 3D model (GLB). By three.ws.

75/100
Operational Score
Score Breakdown
Availability30/30
Conformance30/30
Performance15/40
Key Metrics
Uptime 30d
100.0%
P95 Latency
197.8ms
Conformance
Pass
Trend
Stable
What's Being Tested
Availability
HTTP health check to the service endpoint
Responded with HTTP 402 in 72ms
Conformance
MCP initialize handshake + tools/list
Valid MCP server info returned, tools/list responded
Performance
MCP ping + zero-arg tool invocation benchmarking
P95 latency: 197ms, task completion: 0%
Skills
getting_started

FREE — start here. Returns an overview of the three.ws 3D Studio MCP server: every tool and what it does, how to access it, and useful links. No payment or account required. Call this first to orient.

text_to_3d

Turn a text description into a textured 3D model (GLB). Runs a fast text-to-image pass, then reconstructs a mesh from that image with the three.ws image engine. Returns a job_id (poll with generation_status) plus the intermediate preview image. Best results: a single, clearly described object — "a worn leather armchair", "a low-poly red fox", "a sci-fi helmet".

image_to_3d

Reconstruct a textured 3D model (GLB) from a reference image using the three.ws image engine. Pass a single image_url, or image_urls (2–4 views of the SAME object from different angles — front/back/left/right) for multi-view reconstruction, which removes the back-of-object hallucination of single-image reconstruction. Returns a job_id to poll with generation_status, plus how many views were fused and which engine handled it. The cleaner the inputs — one subject, plain background, even lighting — the better the mesh.

generation_status

Poll a text_to_3d or image_to_3d job by its job_id. While running it reports the status; when finished it returns the GLB download URL and an inline <model-viewer> artifact — display that text/html resource as an interactive 3D artifact.

capture_scene

Turn a video of a real space (a room, a street, an object walkaround) into an explorable 3D point cloud. A feed-forward streaming reconstructor (LingBot-Map) grounds coordinates, reads dense geometry, and corrects drift across the whole clip, then returns a coloured .ply point cloud. Pass a public https video URL (mp4/mov/webm). Returns a job_id — poll generation_status; when finished it returns the point-cloud URL and an inline viewer artifact. Best with steady, well-lit footage that orbits or walks through the space. This is geometry capture of a REAL scene — distinct from text_to_3d/image_to_3d, which synthesize a single object mesh.

preview_3d

Render any public GLB URL as an inline <model-viewer> HTML artifact — orbit controls, AR on mobile, auto-rotate. Display the returned text/html resource as an inline 3D artifact. Use it to view a generated model, or any GLB on the web.

remove_background

Strip the background from a photo or illustration with the three.ws background-removal engine. Returns a PNG with a transparent background — useful for preparing clean inputs before image_to_3d reconstruction.

remesh_model

Process an existing GLB/OBJ/STL/PLY mesh: fix holes and degenerate geometry, reduce face count via quadric decimation, or convert to a different format (including FBX with skeleton for Unity/Unreal — a convert of a rigged GLB keeps its bones, skin weights, and blendshapes). Returns a clean GLB (or the requested format) job_id to poll with generation_status.

stylize_model

Transform any GLB/OBJ/STL/PLY mesh into a stylized variant with a single geometry pass — no model inference, fast and cheap. Styles: "voxel" (blocky cubes on a grid), "brick" (voxels + studs, LEGO-like), "voronoi" (open strut-and-node lattice shell), "lowpoly" (decimated + hard flat-shaded facets). Source color is preserved where the style allows. Returns a job_id to poll with generation_status; typically completes in 10–40 seconds.

segment_model

Segment a GLB/OBJ/STL/PLY mesh into meaningful parts with clean boundaries — head/torso/limbs on a character, body/wheels on a vehicle. Splits at physically disconnected shells and at concave creases (the minima rule), then names each part by region and tints it a distinct colour. Returns a GLB whose nodes ARE the parts (so each can be hidden, recoloured, replaced, or exported on its own) plus a parts manifest. Poll with generation_status; the result lists every part with its id, name, face count, and colour. Pass only_part to export a single part on its own.

retexture_model

Generate a fresh texture for an untextured or poorly-textured GLB with the three.ws depth-guided multi-view texturing engine. Renders the mesh from 8 viewpoints, generates coherent texture views guided by your prompt, and back-projects them onto the UV atlas. Returns a job_id to poll with generation_status.

retexture_region

Surgically repaint ONLY a region of an existing texture from a prompt and/or colour, leaving the rest of the surface untouched and feathering the seam so the edit is invisible. Real UV-space texture inpainting — fix a seam, recolour one panel, add a logo to a chest plate. Supply mask_url: a UV-space mask PNG in the model's own UV layout where WHITE marks the area to repaint and black is preserved. Safe to run repeatedly — chain passes by feeding the previous result GLB back in as mesh_url. Returns a job_id to poll with generation_status.

auto_rig_model

Turn a static GLB mesh into an animation-ready character: adds a humanoid skeleton and per-vertex skin weights via the three.ws rig pipeline. Pairs with text_to_3d / image_to_3d — generate a mesh, then rig it, then drive it with apply_animation or pose_model. Returns a job_id; poll generation_status for the rigged GLB.

pose_model

Map a natural-language pose description to a deterministic pose-studio seed and the full Euler joint-rotation map for the three.ws humanoid mannequin, picked from the in-repo preset library. Returns the preset id, the complete pose (radians per joint), a stable seed, and a previewUrl on three.ws/pose. Deterministic and free — the same prompt always yields the same pose. Pair with auto_rig_model to pose a rigged character.

direct_prompt

Rewrite a rough idea into an optimized text_to_3d prompt using IBM Granite. Returns one clean single-subject description plus structured directives (subject, style, materials, colors, detail) that produce cleaner meshes. Run before text_to_3d when a prompt is vague, conflicting, or multi-subject. Requires IBM watsonx.ai credentials on the server.

generate_material

Generate a physically-based (PBR) glTF 2.0 material from a text description using IBM Granite — base color, metallic, roughness, and emissive factors. Returns a pbrMetallicRoughness material object you can attach to a generated mesh. Requires IBM watsonx.ai credentials on the server.

save_avatar

Persist a generated GLB (e.g. the glb_url returned by generation_status) as a durable avatar in your three.ws library. The mesh is copied into our own storage so it survives the provider URL expiring, then registered as a named avatar you own. Returns avatar_id, slug, model_url, and a view_url. This is the bridge from the studio to the avatar system: after saving, get_avatar, render_avatar_image, embeds, and on-chain identity all work on the result. Requires you to be signed in.

create_agent_persona

Turn a generated GLB into a NAMED, persistent agent body — a "persona" the agent reuses across turns and across sessions. The mesh is copied into durable storage so the body survives the provider URL expiring, then registered under a stable persona_id. The returned text/html resource renders the LIVING body inline: it idles between turns, and persona_say makes it lip-sync and emote a reply. The persona_id is the capability — keep it and pass it to get_agent_persona or persona_say later to bring the exact same body back. No sign-in required.

get_agent_persona

Bring back a previously minted persona by its persona_id — the SAME body and identity, in a fresh session. Returns the persona name, its GLB, accumulated turn count, and the inline living-body artifact. Use this at the start of a conversation when the user returns to a named agent.

persona_say

Make a persona PERFORM a reply: the body lip-syncs the text and shows the matching expression and body gesture. Pass the persona_id and the exact text the agent is saying this turn; the emotion is detected from the text automatically (or override it). The returned text/html resource animates the body for this turn — display it alongside the spoken reply. This is the turn-by-turn embodiment hook.

validate_spatial_response

Check whether a structured-content payload conforms to the open Spatial MCP artifact shape — the standard for returning a live, interactive 3D scene as a first-class MCP tool result (scene GLB, camera, environment, animation, AR handoff, interaction affordances). Returns valid/invalid plus actionable errors and warnings (each naming the field and the fix), not just a boolean. Spec version 0.1. Use it to conform a third-party 3D tool result to the shape so any Spatial-MCP renderer can display it.

export_ar

Turn a generated 3D model (GLB URL) into a one-tap "View in your space" AR experience. Returns a device-aware AR launch link (iOS Quick Look, Android Scene Viewer, desktop WebGL — branched on the viewer's device), the interactive viewer link, and a conformant Spatial MCP artifact with the AR handoff populated. Use it after generating a model so the user can place it on their desk through their phone. For a rigged avatar (an agent's body) pass kind:"avatar": the response then also carries irlUrl, a living-agent link that walks, animates, and talks with the user through their camera in their real room.

verify_provenance

Verify whether a 3D model (GLB) carries a genuine three.ws content credential and was not tampered with. Recomputes the model’s content hash, checks the signed credential and its on-chain anchor, and returns verified, tampered, or unknown — with who created it, from what prompt, by which model, and when. Free and public: no account, no payment. Pass glb_url (an https .glb) or a known content hash.

anchor_provenance

Issue a signed content credential for a generated 3D model (GLB) and anchor its hash on Solana, so anyone can later verify authenticity and tampering for free with verify_provenance. Records creator, prompt, model/provider, lineage, timestamp, and the GLB content hash. Real signature, real on-chain anchor.

persona_identity

Read a persona's real on-chain identity: its deterministic Solana wallet address, live SOL/USDC balance, ERC-8004-style reputation (verified feedback + validation record), token holdings, and a resolved SNS nameplate if it holds a verified .sol name. Also returns the visual tiers (reputation tier, holdings tier, muted-balance flag, verified name) the embodiment viewer maps onto the body — aura, cosmetic, muted state, nameplate. Every persona has a wallet the moment it exists; a fresh persona legitimately reads as zero balance / unranked reputation until it is funded or interacted with. No sign-in required.

persona_tip

Send a small USDC tip FROM a persona's own wallet to a destination Solana address — e.g. tipping another agent for a good answer or hiring result. Real, irreversible on-chain settlement, hard-capped at $1/call and $5 cumulative per session. Amounts over $0.25 require confirm:true. Fails cleanly with the exact reason (insufficient balance, over cap, confirmation required) — never a silent no-op.

persona_send

Send USDC FROM a persona's own wallet to a destination Solana address — the general-purpose value op behind persona-initiated payments (settling a hire, paying an invoice, funding another wallet). Real, irreversible on-chain settlement, hard-capped at $1/call and $5 cumulative per session. Amounts over $0.25 require confirm:true. USDC is the only settlement asset here — any other mint is out of scope for this tool.

inspect_model

Parse a remote GLB or glTF and return structural stats: scene/node/mesh counts, vertex and triangle totals, material and texture summaries, extensions used. Pure inspection — no optimization advice.

optimize_model

Inspect the model and return actionable suggestions for reducing size and draw-call overhead: triangle budget, Draco/Meshopt compression, oversized textures, KTX2 transcoding, non-indexed primitives, redundant materials, and more.

list_animations

List the curated, retargetable animation presets in the three.ws library — name, label, category, and whether the clip loops. Use this to discover valid `animation` values for apply_animation.

apply_animation

Retarget a curated animation preset onto a caller-supplied rigged humanoid GLB. Returns the retargeted three.js AnimationClip JSON (keyed to the rig's actual bone names, hip translation rescaled to its proportions) plus a retarget report — load it alongside the model and play. Set format="glb" to also bake an animated GLB server-side (best-effort: textured rigs may exceed the headless bake budget and fall back to clip JSON — the /pose gallery is the guaranteed GLB export). SSRF-hardened: only public https model URLs are fetched.

text_to_animation

Generate a brand-new motion from a natural-language prompt (e.g. "waving confidently", "a slow tai-chi sweep") with a motion-diffusion model, then retarget it onto a caller-supplied rigged humanoid GLB — the same retarget engine apply_animation uses. Returns the retargeted three.js AnimationClip JSON (or a baked animated GLB) plus a report. Unlike preset libraries, the motion does not pre-exist: it is synthesized for the prompt. Requires the text2motion worker configured on the deployment.

Tools
32 tools verified via live probe
verified 1d ago
Server: three-ws-3d-studioVersion: 1.0.0Protocol: 2025-06-18
Recent Probe Results
TimestampStatusLatencyConformance
Jul 17, 2026success72.2msPass
Jul 14, 2026success47.6msPass
Jul 12, 2026success197.8msPass
Jul 8, 2026success72.2msPass
Jul 8, 2026success843.5msPass
Jul 3, 2026success146.3msPass
Jun 30, 2026success127.7msPass
Jun 27, 2026success177.7msPass
Jun 25, 2026success212.3msPass
Jun 24, 2026success453.3msPass
Source Registries
mcp-registry
First Seen
Jun 2, 2026
Last Seen
Jul 17, 2026
Last Probed
Jul 17, 2026