shotops-mcp 0.9.6 → 0.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -13
- package/dist/local.js +2099 -709
- package/harness-dist/assets/index-D7fH-FSG.js +1 -0
- package/harness-dist/assets/{three-addons-CvX38LO6.js → three-addons-zF8BveTt.js} +1 -1
- package/harness-dist/assets/{three-webgl-DCw804Ic.js → three-webgl-BAyyruEx.js} +2 -2
- package/harness-dist/index.html +3 -3
- package/package.json +5 -2
- package/widget-dist/bundle.js +4 -4
- package/widget-dist/panels.js +5 -5
- package/harness-dist/assets/index-MiEp7Ev8.js +0 -1
package/README.md
CHANGED
|
@@ -56,9 +56,10 @@ The key is never copied, printed, or sent to ShotOps, and no release tool is ins
|
|
|
56
56
|
|------|--------------|------------|
|
|
57
57
|
| `render_strip` | Preferred focused render: turn raw screenshots into mocked-up per-panel PNGs without creating or updating a project | `screenshots`, `panelPresetId?`, `clip?`, `style?` **+** `look?` (they compose) / `useSavedLook?`, `project?`, `version?`, `locale?`, `preview?`, `output?` |
|
|
58
58
|
| `emit_bundle` | `render_strip` (or pre-rendered `panels` — refs or local `{ path }`, or a saved `project`'s own screenshots) + a `fastlane deliver` zip (+ optional share link) | `screenshots` or `panels` or `project` (bundles what that project holds), `bundleId`, `clip?`, `outputs?` (target devices — one bundle for several sizes; omit and a `project`'s saved outputs are used), `locale?`, `locales?` (multi-locale bundle), `projectName?`, `share?`, `output?` (+ the same styling params) |
|
|
59
|
-
| `save_project` | Save the strip as an editable Studio project (structure + look only — does NOT render, so it never hits the render timeout); always returns an `openUrl`. Authenticated saves also return `projectId`; unsigned local saves return a seven-day pending claim the user owns after opening the link and signing in | `screenshots`, `project?` (update in place only when explicitly targeted and authenticated; omit to create a new project or pending claim), `projectName?`, `outputs?`, `panelPresetId?`, `style?` / `look?` / `useSavedLook?`, `version?`, `locale?`, `sourceDir?` |
|
|
59
|
+
| `save_project` | Save the strip as an editable Studio project (structure + look only — does NOT render, so it never hits the render timeout); always returns an `openUrl`. Authenticated saves also return `projectId`; unsigned local saves return a seven-day pending claim the user owns after opening the link and signing in | `screenshots`, `project?` (update in place only when explicitly targeted and authenticated; omit to create a new project or pending claim), `projectName?`, `appListing?` (an App Store URL, numeric app ID or bundle ID — the project takes the real app's name, bundle ID, languages and devices), `outputs?`, `panelPresetId?`, `style?` / `look?` / `useSavedLook?`, `version?`, `locale?`, `sourceDir?` |
|
|
60
60
|
| `read_look` | Return a project's saved ShotOps look (styling only), with its latest version, the held version, the `versions` history, and the `layout` template it is composed on (derived from its values, never stored) | `project?` (default: your most recently edited project) |
|
|
61
|
-
| `read_project` | Return a project's FULL current state as an opaque `ProjectFile` — frame order, per-locale caption words, locale list, styling — plus the derived `layout` and a `screenshots.cells` report for every shot × target-family × locale. Each cell says whether pixels resolve, where they resolved from, and which axes inherited | `project?` (default: your most recently edited project) |
|
|
61
|
+
| `read_project` | Return a project's FULL current state as an opaque `ProjectFile` — frame order, per-locale caption words, locale list, styling — plus the derived `layout` and a `screenshots.cells` report for every shot × target-family × locale. Each cell says whether pixels resolve, where they resolved from, and which axes inherited. `linkedApp` names the App Store app the project is linked to, when it has one | `project?` (default: your most recently edited project) |
|
|
62
|
+
| `search_app_listing` | Find the user's app on the App Store so a save can carry its real identity: each result carries the app's name, seller, icon, bundle ID and numeric app ID, plus the App Store Connect languages and iPhone devices ShotOps would apply. Free, renders nothing, writes nothing; needs an account. Finding a public listing proves nothing about who owns the app | `term`, `country?` (two-letter storefront, default `us`) |
|
|
62
63
|
| `render_project` | Render a SAVED project. By default it renders the screenshots **the project already holds** — pass none at all, no upload needed — into **every supported device the project targets**. Pixels resolve independently for each device family + locale through the shared manifest; genuine fallback is reported in `shots[].inherited` and `note` | `project?`, `screenshots?` (**optional** — omit to use what the project holds; else a FLAT list matched by original `name`, with optional `variant: { family?, locale? }` per cell), `outputs?` (override the project's saved devices for this call), `locale?`, `preview?`, `output?` |
|
|
63
64
|
| `refine_project` | Run one bounded Agent turn against a saved project. A supported request commits once and returns the actual diff; ambiguity, missing input, unsupported intent, conflict, and failure return a typed no-write outcome | `project?`, `instruction`, `focus?` |
|
|
64
65
|
| `save_look` | Persist a composed look on a project (styling only — appends a new version) | `look`, `project?`, `sourceName?` |
|
|
@@ -71,7 +72,7 @@ The key is never copied, printed, or sent to ShotOps, and no release tool is ins
|
|
|
71
72
|
| `production_operation` | Reconnect to one durable paid Hosted render or rendering bundle, report persisted progress, request cooperative cancellation, or mint fresh result download grants without rerendering or charging again | `action` (`get`, `cancel`, or `result`), `operationId` |
|
|
72
73
|
| `delete_assets` | Permanently delete private uploaded screenshots, rendered panels, or generated bundles owned by the signed-in account | `refs` (1–50 ShotOps refs) |
|
|
73
74
|
|
|
74
|
-
- **`panelPresetId`** — App Store size: `r69` (default, 6.9″ iPhone
|
|
75
|
+
- **`panelPresetId`** — App Store size: `r69` (default, 6.9″ iPhone 1320×2868), `r65`, `r55`.
|
|
75
76
|
**iPhone sizes only** — the iPad presets are deliberately not offered, because no iPad device
|
|
76
77
|
model exists yet and rendering one would put an iPhone body in an iPad-shaped canvas. The
|
|
77
78
|
accepted set is `RENDERABLE_PANEL_PRESET_IDS` in `shotops-mcp/src/render/panelCatalog.ts`, a subset of
|
|
@@ -86,11 +87,14 @@ The key is never copied, printed, or sent to ShotOps, and no release tool is ins
|
|
|
86
87
|
`text` (and a single caption's `subtitle`) is per-RENDER input (never stored — a look carries
|
|
87
88
|
styling only). Captions auto-layout in a band at the top of the panel, and the device does NOT
|
|
88
89
|
move to make room.
|
|
89
|
-
- **`style.layout`** — the panel **composition** in one word: `"standard"`, `"bleed"`,
|
|
90
|
-
`"
|
|
91
|
-
roll together. `standard` (the shipped default) puts
|
|
92
|
-
under a 2-line region — about 36 characters — and crops nothing; `bleed` reserves
|
|
93
|
-
characters) and runs the device 10% off the bottom edge. The
|
|
90
|
+
- **`style.layout`** — the panel **composition** in one word: `"standard"`, `"bleed"`, `"top-bleed"`,
|
|
91
|
+
`"lean-right"`, `"lean-left"`, `"swipe"` or `"corner-bleed"`. It settles the headline's reserved
|
|
92
|
+
region, device placement, camera pose, and roll together. `standard` (the shipped default) puts
|
|
93
|
+
the whole device under a 2-line region — about 36 characters — and crops nothing; `bleed` reserves
|
|
94
|
+
4 lines (~72 characters) and runs the device 10% off the bottom edge. The last four run it off a
|
|
95
|
+
SIDE edge instead, into the neighbouring screenshot, so the set reads as one continuous swipe —
|
|
96
|
+
pick one for **every** panel or none, and never mirror `lean-right` against `lean-left`, which
|
|
97
|
+
puts two devices into the same seam. The region is **reserved, not fitted**:
|
|
94
98
|
it is held at full size whether or not the headline fills it, which is what makes every panel in
|
|
95
99
|
a swiped set land on the same line. **Precedence** — the template expands *first*, then any
|
|
96
100
|
explicit `shotLook` composition field or caption layout field you also pass **overrides** it
|
|
@@ -292,8 +296,8 @@ screenshot unavailable; public privacy disclosures must accurately state this re
|
|
|
292
296
|
shown once — copy it then.
|
|
293
297
|
2. **Supabase service env** (already in the repo's `.env.local` for local dev): `SUPABASE_URL`
|
|
294
298
|
and `SUPABASE_SERVICE_ROLE_KEY`. The server loads `../.env.local` automatically.
|
|
295
|
-
3. Playwright's Chromium
|
|
296
|
-
|
|
299
|
+
3. Playwright's Chromium. The first render downloads it automatically into Playwright's cache if
|
|
300
|
+
it's missing; run `npx playwright install chromium` first to skip that one-time wait.
|
|
297
301
|
|
|
298
302
|
## Run it
|
|
299
303
|
|
|
@@ -303,7 +307,8 @@ npm install
|
|
|
303
307
|
npm run dev # boots on http://localhost:8788/mcp (override with MCP_PORT)
|
|
304
308
|
```
|
|
305
309
|
|
|
306
|
-
Chromium boots lazily on the first `render_strip` / `emit_bundle` call, so startup is fast
|
|
310
|
+
Chromium boots lazily on the first `render_strip` / `emit_bundle` call, so startup is fast — and
|
|
311
|
+
that first render also installs Chromium if it isn't cached yet, adding ~20-25s to that one call.
|
|
307
312
|
`GET /health` is an unauthenticated liveness probe.
|
|
308
313
|
|
|
309
314
|
## Connect ChatGPT (Developer Mode)
|
|
@@ -419,13 +424,26 @@ the transport and a few account-shaped tools differ.
|
|
|
419
424
|
claude mcp add shotops -- npx -y shotops-mcp
|
|
420
425
|
```
|
|
421
426
|
|
|
422
|
-
|
|
423
|
-
it
|
|
427
|
+
Chromium isn't bundled in the npm package (it's ~150MB). The first render on a machine without
|
|
428
|
+
Playwright's Chromium installs it automatically into Playwright's cache, then renders. That first
|
|
429
|
+
render takes ~20-25s longer, and its result `note` says so. Install it ahead of time to skip the wait:
|
|
424
430
|
|
|
425
431
|
```bash
|
|
426
432
|
npx playwright install chromium
|
|
427
433
|
```
|
|
428
434
|
|
|
435
|
+
Offline, that automatic download fails and the first render refuses with `upstream_unavailable`
|
|
436
|
+
until you're back online.
|
|
437
|
+
|
|
438
|
+
### Claude Desktop (macOS and Windows)
|
|
439
|
+
|
|
440
|
+
The same local server ships as a Claude Desktop extension, no terminal needed. Download
|
|
441
|
+
**<https://shotops.dev/download/shotops.mcpb>** (always the latest version; a specific one is
|
|
442
|
+
`shotops-mcp-<version>.mcpb` beside it) and double-click it. Leave the **ShotOps API token**
|
|
443
|
+
setting empty to preview free without an account, or paste a token from the Studio app → account
|
|
444
|
+
menu → **API tokens** to save projects and looks. The extension bundles everything except
|
|
445
|
+
Chromium, which the first render downloads once as described above.
|
|
446
|
+
|
|
429
447
|
**Screenshots are read straight off your disk** — no upload dance. Pass a local file path
|
|
430
448
|
instead of `{ ref }`/`{ url }`:
|
|
431
449
|
|