← Presidium Shape Studio

Shape Studio for agents

Shape Studio is an MCP server as well as an app. Claude, Cursor, VS Code and any other Model Context Protocol client can turn a picture into a GLB or OBJ mesh on your own machine, offline, with the same rules as the window: quality is a setting, never a consequence; every estimate is measured or says it is not; nothing is uploaded.

Install once: pipx install presidium-shapestudio, then point your client at the command shapestudio serve. The Windows app is the same server: ShapeStudio.exe cli serve (the exact path is shown under Settings → About in the app).

Client configuration

ClientWhereConfig
Claude Desktopclaude_desktop_config.json (Windows: %APPDATA%\Claude, macOS: ~/Library/Application Support/Claude)
{ "mcpServers": { "shapestudio":
    { "command": "shapestudio", "args": ["serve"] } } }
Claude Codein the project
claude mcp add shapestudio -- shapestudio serve
Cursor.cursor/mcp.json
{ "mcpServers": { "shapestudio":
    { "command": "shapestudio", "args": ["serve"] } } }
VS Code (agent mode).vscode/mcp.json
{ "servers": { "shapestudio":
    { "type": "stdio", "command": "shapestudio", "args": ["serve"] } } }

Tools

ToolWhat it does
capabilities()hardware, PyTorch runtime (CPU or CUDA), both tiers with download and fit state, presets with expected times (labelled "not measured yet" until a run), policy, licences, exclusions
plan(tier?, preset, resolution?)dry run: model, device, grid, estimate with its basis, load meter, fit note and warnings; explains a refusal before anything is queued
reconstruct(image, tier?, preset, resolution?, remove_background, foreground_ratio?)queue a job for a PNG/JPEG/WebP path; returns the job id and estimate at once
job_status(job_id)phase, progress, one honest summary line, ETA or null, paths and counts when done
job_result(job_id, as_base64?, format)GLB (default) or OBJ path, turntable PNG, vertex and face counts; the bytes on request
jobs(), cancel_job(job_id)list and cancel
download_model(name, consent)files, sizes, SHA-256 and licence first; the download only with consent=true. The only tool that touches the network.

A typical flow

  1. capabilities() once. If TripoSR is missing, tell the user the size (1.56 GiB) and licence (MIT) and call download_model("triposr", consent=true); likewise isnet-general-use (170 MB) for the background cutout.
  2. reconstruct(image). Quote the returned estimate and its basis to the user; on a CPU the first run is "not measured yet".
  3. Poll job_status every 10 to 15 seconds. Never wait inside one call.
  4. job_result for the GLB path; format="obj" for the OBJ. Both carry vertex colours.

Who runs the jobs

Only one process runs jobs at a time (a lock in the data folder). The first studio to start takes the worker role; a client that launches shapestudio serve first becomes the worker and the window shows its queue. Pause holds every submitter, including agents.

What to tell users about time

Nothing has been measured by this project on real hardware yet, so quote capabilities() for the machine you are on, after its benchmark or first run, and say "not measured yet" when the studio does.