Build 3D scenes from any LLM.
Tangibl3D exposes its modelling actions as an MCP server (Model Context Protocol) and a plain JSON-RPC API. An agent creates a project, places objects from recipes or dimensioned blueprints, extrudes, collapses and heals faces, and finally returns a link to a live 3D scene — no file download, no Python scripting, no raw vertex lists.
softedge objects are smooth subdivision cages (organic), hardedge objects are exact polymeshes (CAD-like).t3d_scene_share returns a viewer URL anyone can open.https://api.show-real.com · MCP endpoint POST https://api.show-real.com/mcp · This reference is generated from the live tool registry, so it is always in sync with the server.Quickstart
1. Get an API key
Sign in to app.show-real.com, open any project, go to Settings → MCP · API keys and create a key. Copy it once — the server only stores a hash. Keys look like t3d_….
2. Connect your agent
Claude Code
claude mcp add --transport http tangibl3d https://api.show-real.com/mcp --header "Authorization: Bearer t3d_YOUR_KEY"
Claude Desktop (via the mcp-remote bridge, in claude_desktop_config.json)
{
"mcpServers": {
"tangibl3d": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://api.show-real.com/mcp", "--header", "Authorization: Bearer t3d_YOUR_KEY"]
}
}
}
Any client / curl — plain JSON-RPC 2.0 over HTTPS:
curl -s https://api.show-real.com/mcp \
-H "Authorization: Bearer t3d_YOUR_KEY" -H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"t3d_scene_create","arguments":{"title":"Espresso machine","meshType":"softedge"}}}'
3. Say what you want
With the server connected, a prompt like “Build an espresso machine in Tangibl3D from recipes and give me the link” is enough. The agent will create a scene, add parts, describe the result and return the viewer URL.
Authentication
Send the key as a bearer token: Authorization: Bearer t3d_… (or x-api-key: t3d_…). Keys are bound to your user and all workspaces you belong to. Revoke a key in the app at any time; revoked keys fail with 401 immediately.
| Status | Meaning |
|---|---|
401 | Missing, unknown or revoked key. |
403 | No access to that project, or the project is currently locked by another editor session (retry in ~90 s). |
429 | Rate limit or daily quota exceeded — see Limits. Honour Retry-After. |
Concepts
Coordinates
Left-handed, X right, Y up, Z depth, units in meters. The ground plane is y = 0; objects should stand on it. Positive Z is away from the default camera.
Scenes, objects, faces
A project holds one scene. A scene is a list of objects, each a polygon mesh (control cage) with a type: softedge (Doo-Sabin subdivision, level 0–4) or hardedge (rendered as is). Objects are addressed by name (case-insensitive, substring allowed) or by their 1-based index from t3d_scene_describe. Faces are addressed by 0-based index into the object's face list. Every mutating call saves a new version of the scene and returns a compact description of what changed.
Recipes
| kind | parameters | notes |
|---|---|---|
box | center [x,y,z], size [w,h,d] | Axis-aligned box. |
sphere | center, diameter, res 1–4 | Quad sphere; as softedge it becomes perfectly round. |
torus | center, ringRadius, tubeRadius, axis x|y|z | Rings, tyres, handles. |
cylinder | center, radius, height, sides | Centered on center. |
lathe | position, profile [[radius,height],…] bottom→top, segments | Vases, bottles, knobs, wheels. |
prism | position, points [[x,z],…], height | Extruded floor plan / outline (concave OK). |
Every part accepts name and color [r,g,b] (0–255). Set softedge: true on the call to create smooth cages instead of hard-edge polymeshes.
Blueprints
Blueprints are reference bodies with real-world dimensions from norms (SAE J1100, DIN 33402, EN 1335, IEC 60335 …). t3d_blueprint_list returns keys, question options and dimension ranges; t3d_blueprint_place drops semi-transparent helper bodies (wheels, doors, seats, steering wheel, grips …) at a ground position so a designer can model around them. Override any dimension with dims.
Agent workflow that works
t3d_scene_listort3d_scene_create— get a project id.t3d_object_addwith a handful of recipes — keep parts coarse; subdivision does the rounding.t3d_scene_describe— read back indices, bounding boxes, closedness.- Refine with
t3d_mesh_extrude/collapse/heal/t3d_object_transform; describe again after each step. t3d_scene_share— hand the user the viewer link (and the editor link if they own the project).
Protocol
The endpoint implements MCP Streamable HTTP (spec 2025-06-18) with JSON responses: POST one JSON-RPC message (or a batch) to /mcp; requests get a JSON reply, notifications get 202 Accepted. No session ids are required; GET /mcp answers 405 (no server-initiated streams). Supported methods: initialize, ping, tools/list, tools/call (plus empty resources/list, prompts/list).
POST /mcp
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"my-agent","version":"1.0"}}}
→ {"jsonrpc":"2.0","id":1,"result":{"protocolVersion":"2025-06-18","capabilities":{"tools":{}},"serverInfo":{"name":"tangibl3d",…}}}
Tool results come back twice: as content[0].text (JSON string, for clients that only read text) and as structuredContent (the same object). Tool failures are returned as isError: true with a human-readable message — not as JSON-RPC errors — so agents can recover.
Tool reference
Loading the live tool registry from /mcp/docs.json …
Errors
| Where | Shape | Typical causes |
|---|---|---|
| HTTP | 401 / 403 / 429 | Key, access, quota — see Authentication. |
| JSON-RPC error | {"error":{"code":-32601}} / -32602 | Unknown method / unknown tool name. |
| Tool result | {"isError":true,"content":[{"type":"text","text":"⚠ …"}]} | Object not found (use t3d_scene_describe), invalid face indices, empty recipe, scene size cap. |
Limits & fair use
Tangibl3D is free to try. To keep the service fast for everyone, calls are metered per key and per user. The numbers below come from the live server:
Loading limits …
- Limits are enforced with
429and aRetry-Afterheader; the response also carriesX-RateLimit-Limit/X-RateLimit-Remainingfor the per-minute window andX-Quota-Remainingfor the day. - Only
tools/callrequests count against the daily quota;initialize,pingandtools/listare free. - Payload caps: max parts per
t3d_object_add, max vertices pert3d_scene_import, max objects and faces per scene. Oversized requests fail with a clear message instead of degrading the service. - Accounts are invite-based; keys can be revoked by the owner at any time, and abusive keys are suspended. Need more? support@show-real.com.
Import / export
The app imports OBJ+MTL, STL (binary/ASCII, incl. colour attributes), PLY, glTF/GLB, 3DS (with material colours) and Collada, and exports OBJ+MTL, GLB, STL and PLY — the GLB round trip is the bridge to Blender, Three.js, Unity and Godot. Over the API, use t3d_scene_import for arbitrary polygon meshes (vertices + faces) when a recipe can't express the geometry; export tools are on the roadmap.
Roadmap
- Live mode — tool calls applied inside the user's open editor session (visible, undoable), via the collaboration relay.
- OAuth for claude.ai and ChatGPT custom connectors.
- Snapshots — server-side render preview per call.
- Export tools (GLB/OBJ/STL) and vehicle/animation tools.
- Groups, layers, materials exposed as first-class parameters.
Changelog
Loading …