# PicToSTL

**Category:** 💻 Developer Tools  
**Repository:** https://github.com/qduoduo-hwh/pictostl-mcp  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/pictostl

## Description
MCP server for pictostl.com image-to-3D generation

## Claude Desktop Quick Installation
Heuristic fallback — verify the package name and runner against the repository README before running it. Uses `npx` (confidence: low):

```json
"mcpServers": {
  "pictostl": {
    "command": "npx",
    "args": ["-y","pictostl"]
  }
}
```

## Documentation & README

# pictostl-mcp

Local stdio MCP server for [pictostl.com](https://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.

## Architecture and data flow

```text
MCP client → local pictostl-mcp process → pictostl.com API
                                      ← generation status and GLB
MCP client ← local GLB/STL file       ←
```

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.

## Get an API key

1. [Sign up](https://pictostl.com)
2. Create a key at [API keys](https://pictostl.com/settings/api-keys)
3. Buy credits on [Pricing](https://pictostl.com/pricing)

By using the API or this MCP server you agree to the [Terms of Service](https://pictostl.com/terms-of-service).

Website browser generation is separate from MCP. MCP always uses an API key.

## Install from GitHub

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.

## Claude / Cursor config

```json
{
  "mcpServers": {
    "pictostl": {
      "command": "npx",
      "args": [
        "-y",
        "--package=github:qduoduo-hwh/pictostl-mcp",
        "pictostl-mcp"
      ],
      "env": {
        "PICTOSTL_API_KEY": "ps_live_..."
      }
    }
  }
}
```

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

### Local development

```bash
git clone https://github.com/qduoduo-hwh/pictostl-mcp.git
cd pictostl-mcp
corepack enable
pnpm install --frozen-lockfile
pnpm build
```

Then configure the MCP client to run `node` with the absolute path to `dist/index.js` as its first argument.

## Tools

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.

## Contributing

Improve tool descriptions so agents call the right tool with the right fields. Do not ask for internal fal prompts or provider payloads.

## License

MIT

