The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the PicToSTL listing page.
Local stdio MCP server for pictostl.com. Generation runs on pictostl.com — this package uploads photos, starts 3D jobs, and writes GLB or STL files on the machine that hosts the MCP server.
Results are AI-reconstructed meshes for visualization and 3D printing experiments. They are not engineering drawings.
This is a local stdio MCP server distributed from its GitHub repository. pictostl.com does not host a remote MCP HTTP endpoint.
The MCP process runs locally and communicates with https://pictostl.com over HTTPS. Images, generation parameters, and the API key are sent to pictostl.com to upload inputs, create jobs, and retrieve results. GLB-to-STL conversion and final file writing happen locally on the machine running the MCP server.
There is no hosted PicToSTL MCP endpoint. MCP clients start this package locally over stdio; the local process then calls the hosted PicToSTL API.
By using the API or this MCP server you agree to the Terms of Service.
Website browser generation is separate from MCP. MCP always uses an API key.
Requires Node.js 20 or newer. The command below installs the repository through npm's Git support and runs its committed JavaScript build. It does not require a published npm package or a local TypeScript compiler.
Set PICTOSTL_API_KEY to a live key from https://pictostl.com/settings/api-keys.
Optional: PICTOSTL_API_BASE (default https://pictostl.com) for a local website.
Keep the API key in your MCP client's secret or user-level configuration. Do not commit a live key to source control.
For a pinned installation, append a Git tag or commit after the repository name, for example github:qduoduo-hwh/pictostl-mcp#v0.1.0.
Then configure the MCP client to run node with the absolute path to dist/index.js as its first argument.
Seven MCP tools:
| Tool | Purpose |
|---|---|
list_generation_options | Quality, texture, multi-view rules, and credit costs |
upload_image | Upload a local file or HTTPS URL; returns assetId |
generate_model | Start an async 3D job (sends clientRequestId even if you omit it) |
get_task | Fetch a generation by task id; optional waitSeconds (max 60) |
list_my_generations | List recent generations for this API key |
get_account | Remaining credits and Pro / Ultra paid-credit status |
download_model | Write original GLB, or a local binary STL, to a path |
Typical flow: upload_image → generate_model → get_task (repeat with the same task id if it takes more than 60 seconds) → download_model with that task id.
Do not pass an upload assetId to get_task or download_model.
download_model default is format=stl, longest edge 100 mm, converted locally from the original GLB (not the website preview mesh). STL has geometry only — no color or textures. format=glb writes the original file unchanged.
Reuse clientRequestId from a previous generate_model result when retrying the same job.
Improve tool descriptions so agents call the right tool with the right fields. Do not ask for internal fal prompts or provider payloads.
MIT