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.
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 | Where | Config |
|---|---|---|
| Claude Desktop | claude_desktop_config.json (Windows: %APPDATA%\Claude, macOS: ~/Library/Application Support/Claude) | { "mcpServers": { "shapestudio":
{ "command": "shapestudio", "args": ["serve"] } } } |
| Claude Code | in 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"] } } } |
| Tool | What 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. |
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.reconstruct(image). Quote the returned estimate and its basis to the user; on a CPU the first run is "not measured yet".job_status every 10 to 15 seconds. Never wait inside one call.job_result for the GLB path; format="obj" for the OBJ. Both carry vertex colours.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.
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.