Tangibl3D APIfor agents & bots
live

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.

Recipes, not verticesBoxes, spheres, tori, cylinders, lathe profiles, extruded polygons. The server builds watertight control meshes.
Doo-Sabin or hard-edgesoftedge objects are smooth subdivision cages (organic), hardedge objects are exact polymeshes (CAD-like).
Blueprints with real dimensionsCars by class, power drills, office chairs, fridges, ergonomic mannequins — reference bodies from DIN/EN/SAE/IEC norms.
Links, not filesEvery change is saved as a new version. t3d_scene_share returns a viewer URL anyone can open.
Base URL 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"
ChatGPT / claude.ai web connectors currently require OAuth for custom connectors; header-based keys work with Claude Code, Claude Desktop (mcp-remote), Cursor, Windsurf, Continue and any HTTP MCP client. OAuth support is on the roadmap.

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.

StatusMeaning
401Missing, unknown or revoked key.
403No access to that project, or the project is currently locked by another editor session (retry in ~90 s).
429Rate 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

kindparametersnotes
boxcenter [x,y,z], size [w,h,d]Axis-aligned box.
spherecenter, diameter, res 1–4Quad sphere; as softedge it becomes perfectly round.
toruscenter, ringRadius, tubeRadius, axis x|y|zRings, tyres, handles.
cylindercenter, radius, height, sidesCentered on center.
latheposition, profile [[radius,height],…] bottom→top, segmentsVases, bottles, knobs, wheels.
prismposition, points [[x,z],…], heightExtruded 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

  1. t3d_scene_list or t3d_scene_create — get a project id.
  2. t3d_object_add with a handful of recipes — keep parts coarse; subdivision does the rounding.
  3. t3d_scene_describe — read back indices, bounding boxes, closedness.
  4. Refine with t3d_mesh_extrude / collapse / heal / t3d_object_transform; describe again after each step.
  5. 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)

kindparametersnotes
rectx y w h, cornerRadiusTop-left corner at x,y.
ellipsex y w hBounding box; w = h gives a circle.
linepoints [[x1,y1],[x2,y2]]Stroke only.
polygonpoints [[x,y],…]Closed, ≥ 3 points.
pathd (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).
textx y w h text font fontSize align bold italic lineHeight modeflow = 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).
imagex y w h urlhttp(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

  1. d2_doc_create — preset a4, letter, sq1080 (social), hd …, optional pages.
  2. 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.
  3. d2_doc_describe — read back indices and bounding boxes; d2_doc_svg gives a quick rendering (no flow-text wrapping, no effects).
  4. Adjust with d2_node_update (text, fonts, colours), d2_node_transform (to, width, scale, rotate), d2_node_order, d2_node_group.
  5. 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 an editor deep link.
Not covered by tools yet: tables, linked text frames across pages, master pages, importing whole SVG files. Open the document in the editor for those; the editor and the tools share the same file.

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

WhereShapeTypical causes
HTTP401 / 403 / 429Key, access, quota — see Authentication.
JSON-RPC error{"error":{"code":-32601}} / -32602Unknown 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 429 and a Retry-After header; the response also carries X-RateLimit-Limit / X-RateLimit-Remaining for the per-minute window and X-Quota-Remaining for the day.
  • Only tools/call requests count against the daily quota; initialize, ping and tools/list are free.
  • Payload caps: max parts per t3d_object_add, max vertices per t3d_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 …