Build 3D scenes and print-ready pages 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. The same key and the same sandbox also drive 2Dream: “Lay out an A4 flyer in 2Dream with a dark header, title, three bullet points and our logo, then send me a link” — see 2Dream tools.
No account? Use the sandbox
For quick experiments there is a keyless endpoint: POST https://api.show-real.com/mcp/sandbox. Send a header X-Agent-Id: my-agent so your projects stay together (otherwise your IP is used as identity). Sandbox projects live in a shared system workspace, are visible only to the same agent id, and are deleted automatically after 24 hours, together with their viewer links. Limits are tight (see Limits, column sandbox).
claude mcp add --transport http tangibl3d-sandbox https://api.show-real.com/mcp/sandbox --header "X-Agent-Id: my-agent"
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).
2Dream — vector & page layout (d2_*)
2Dream is the 2D app of the Show-Real suite: multi-page documents, vector shapes, flow text, images, photo effects, PDF export, a flipbook viewer and Sign & Confirm. The d2_* tools edit documents headless on the same endpoint (and in the same sandbox) as the 3D tools. One server, both apps.
Units and addressing
All lengths are millimetres, origin top-left, y down (page coordinates). Stroke widths and font sizes are in pt. Objects are addressed by id, by name (case-insensitive, substring allowed) or by their 1-based index from d2_doc_describe, which lists every page's objects in stacking order (bottom → top).
Object kinds (d2_node_add)
| kind | parameters | notes |
|---|---|---|
rect | x y w h, cornerRadius | Top-left corner at x,y. |
ellipse | x y w h | Bounding box; w = h gives a circle. |
line | points [[x1,y1],[x2,y2]] | Stroke only. |
polygon | points [[x,y],…] | Closed, ≥ 3 points. |
path | d (SVG path data in mm) | M L H V C S Q T A Z, relative and absolute; arcs become cubic curves; several subpaths = holes/parts (even-odd). |
text | x y w h text font fontSize align bold italic lineHeight mode | flow = text frame that wraps (default), art = graphic text. Fonts: Arial, Verdana, Trebuchet MS, Segoe UI, Georgia, Times New Roman, Courier New, Impact (others fall back in the viewer). |
image | x y w h url | http(s) or data URL; the server fetches and embeds it (PNG, JPEG, GIF, WebP, SVG). Give w or h to keep the aspect ratio. |
Every kind accepts name, fill, stroke, strokeWidth (pt), opacity, rotation (degrees about the centre) and shadow. Colours are CSS colours or "none".
Workflow that works
d2_doc_create— preseta4,letter,sq1080(social),hd…, optionalpages.- Add the big shapes first (header bars, backgrounds), then text, then images; keep text frames generous — flow text wraps and may overflow a frame that is too small.
d2_doc_describe— read back indices and bounding boxes;d2_doc_svggives a quick rendering (no flow-text wrapping, no effects).- Adjust with
d2_node_update(text, fonts, colours),d2_node_transform(to,width,scale,rotate),d2_node_order,d2_node_group. d2_doc_share—view(PDF-like flipbook viewer),sign(recipient signs, a signed PDF copy comes back to the owner),sandbox(recipient edits a 24-hour copy in the full editor without an account — the right way to hand a draft to a human). Owners also get aneditordeep link.
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 …