Tangibl3D APIfor agents & bots
live

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.

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.

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).

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 …