shotops-mcp 0.9.1 → 0.9.2

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 CHANGED
@@ -14,7 +14,7 @@ spine the Studio web app and the `mockup-mcp` CLI use, driving headless Chromium
14
14
  Ships as **two doors, one engine**: an `npx shotops-mcp` **local stdio server** that renders on
15
15
  your own machine, no account needed to preview (see [Local](#local--npx-shotops-mcp) below), and a
16
16
  **hosted** server on Vercel with an account, saved looks, and share links (see [Hosted](#hosted)
17
- below, or the public [`/connect`](https://shotops.dev/connect) page in the studio app).
17
+ below, or the public [MCP docs](https://shotops.dev/docs/mcp)).
18
18
 
19
19
  ## Preview free, export store-ready with Pro
20
20
 
@@ -28,16 +28,17 @@ The two limits are independent and neither substitutes for the other:
28
28
 
29
29
  - **Entitlement** is permission to create store-ready files. One server-owned decision answers it
30
30
  for Studio, hosted and local alike, so no door can be talked into a different answer. Free and
31
- anonymous callers are refused before a credit is reserved, a screenshot is read or a file is
31
+ anonymous callers are refused before a cloud credit is reserved, a screenshot is read or a file is
32
32
  written — a refused call costs nothing and leaves nothing behind.
33
- - **Credits** price compute ShotOps supplies: 0.5 per hosted preview panel, 2 per hosted
33
+ - **Cloud credits** price compute ShotOps supplies: 1 per hosted preview panel, 4 per hosted
34
34
  full-resolution panel, plus AI. Rendering on your own machine spends none, on any plan. More
35
- credits never unlock store-ready output on Free.
35
+ cloud credits never unlock store-ready output on Free.
36
36
 
37
- Free accounts get 40 credits a month and 2 synced projects. Every new account starts with a 7-day
38
- Pro trial; after that Pro is €9/month or €90/year. Without any account, the hosted server allows 3
39
- preview strips per rolling 30 days, at most 5 panels each. Call `account_status` to see exactly
40
- where this connection stands — it spends no credits and none of that anonymous allowance.
37
+ Free accounts get 80 cloud credits a month and 2 synced projects. Every new account starts with a
38
+ 7-day Pro trial; after that Pro is €9/month or €90/year. Without any account, the hosted server
39
+ allows 3 preview strips per rolling 30 days, at most 5 panels each. Call `account_status` to see
40
+ exactly where this connection stands — it spends no cloud credits and none of that anonymous
41
+ allowance.
41
42
 
42
43
  ## Zero-custody
43
44
 
@@ -66,7 +67,7 @@ The key is never copied, printed, or sent to ShotOps, and no release tool is ins
66
67
  | `describe_look` | Five named design presets, three named layout templates, the user-intake script, and the full styling field catalog + defaults | *(none)* |
67
68
  | `request_screenshot_upload` | Mint signed upload slots for real screenshots; every returned slot carries its semantic screenshot `variant` | `count` (1–10), `names?`, `family?`, `locale?` |
68
69
  | `import_screenshot` | Get screenshots INTO ShotOps — several per call, each from one named source (`{ url }`, `{ file }`, or local-stdio `{ path }`), returning a render-ready ref per entry in input order | `screenshots` (1–10 source entries), `file?` (the ChatGPT top-level attachment), `name?`, `locale?` |
69
- | `account_status` | What THIS connection may do, for free: signed-in account, plan, trial, remaining ShotOps credits, what a preview costs here, and whether store-ready output (full-resolution renders, any `emit_bundle`) is allowed — with a machine-readable `nextStep`. Spends no credits, uses none of the free anonymous preview allowance, uploads and writes nothing | *(none)* |
70
+ | `account_status` | What THIS connection may do, for free: signed-in account, plan, trial, remaining ShotOps cloud credits, what a preview costs here, and whether store-ready output (full-resolution renders, any `emit_bundle`) is allowed — with a machine-readable `nextStep`. Spends no cloud credits, uses none of the free anonymous preview allowance, uploads and writes nothing | *(none)* |
70
71
  | `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` |
71
72
  | `delete_assets` | Permanently delete private uploaded screenshots, rendered panels, or generated bundles owned by the signed-in account | `refs` (1–50 ShotOps refs) |
72
73
 
@@ -364,10 +365,9 @@ claude mcp add --transport http shotops https://mcp.shotops.dev/mcp \
364
365
  --header "Authorization: Bearer shotops_…"
365
366
  ```
366
367
 
367
- The public [`/connect`](https://shotops.dev/connect) page in the studio
368
- app has the same instructions for Cursor/CI, plus a link to where to create a token — it's
369
- the one place an external agent user (not a repo collaborator) can find the connect story,
370
- since this repo is private.
368
+ The public [MCP docs](https://shotops.dev/docs/mcp) have the same
369
+ instructions for Cursor/CI, plus where to create a token — they're the one place an external
370
+ agent user (not a repo collaborator) can find the connect story, since this repo is private.
371
371
 
372
372
  ### Ops (this repo's maintainer only)
373
373
 
@@ -376,8 +376,8 @@ since this repo is private.
376
376
  — the notes here are only what is specific to this package.
377
377
 
378
378
  - **Deploy:** run the repo's deploy script from the repo root; deploys run locally, and a push to
379
- `main` is a production deploy. Do not hand-run a bare `vercel deploy`. Fly was retired (#68) —
380
- `flyctl` is history, not the live procedure.
379
+ `main` is a production deploy. Do not hand-run a bare `vercel deploy`. Vercel is the only hosted
380
+ target — the Fly app was destroyed in #68.
381
381
  - **Runtime env** lives on the `shotops-mcp` **Vercel project**, not in this repo:
382
382
  `SUPABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY`, and `MCP_PUBLIC_URL` (pins the public hostname as
383
383
  the OAuth issuer), plus `OPENAI_APPS_CHALLENGE_TOKEN` while verifying the MCP domain for public
@@ -439,7 +439,7 @@ reading an arbitrary server-side path there would be a local-file-inclusion hole
439
439
  **`emit_bundle` reads local panels off disk too** — an unsigned local server has no account, so it
440
440
  can't produce `output: "urls"` refs. Once you are signed in on a trial or Pro, pass the on-disk PNGs
441
441
  straight to `emit_bundle` (same local-only `{ path }` door as screenshots) to package a
442
- `fastlane deliver` zip with no upload and no credits:
442
+ `fastlane deliver` zip with no upload and no cloud credits:
443
443
 
444
444
  ```json
445
445
  { "bundleId": "com.acme.app", "panels": [{ "path": "/abs/panel-01.png" }, { "path": "/abs/panel-02.png" }] }
@@ -447,7 +447,7 @@ straight to `emit_bundle` (same local-only `{ path }` door as screenshots) to pa
447
447
 
448
448
  `emit_bundle` and full-resolution renders are the store-ready half of the offer, so they need that
449
449
  trial or Pro even here, where the compute is yours. Preview renders need neither an account nor
450
- credits. `account_status` reports which side of the line this process is on.
450
+ cloud credits. `account_status` reports which side of the line this process is on.
451
451
 
452
452
  **Saving without a token:** a new `save_project` made from local `{ path }` PNGs creates a private
453
453
  **pending claim**. It uploads only that saved project's byte-free record and raw source PNGs,
@@ -464,9 +464,9 @@ manifest through the Studio control plane, downloads only the resolved cells, an
464
464
 
465
465
  | | Local (`npx shotops-mcp`) | Hosted (`shotops_…` token) |
466
466
  |---|---|---|
467
- | Render compute | **your machine** ($0, no timeout, no credits on any plan) | our servers — spends your ShotOps credits: 0.5 per preview panel, 2 per full-resolution panel |
467
+ | Render compute | **your machine** ($0, no timeout, no cloud credits on any plan) | our servers — spends your ShotOps cloud credits: 1 per preview panel, 4 per full-resolution panel |
468
468
  | Preview render | free, no account | free on an account; 3 per 30 days, ≤5 panels, without one |
469
- | Full-resolution render, any `emit_bundle` | trial or Pro (costs no credits) | trial or Pro, and spends credits |
469
+ | Full-resolution render, any `emit_bundle` | trial or Pro (costs no cloud credits) | trial or Pro, and spends cloud credits |
470
470
  | Auth | none to preview; a token for account state and store-ready output | account + API token |
471
471
  | Saved looks / editable projects / project read+re-render / share links | new project: pending claim; existing/account state: token (below); share links: hosted | ✅ |
472
472
  | Screenshot input | local `{ path }` off disk | `request_screenshot_upload` → `{ ref }` |
@@ -474,7 +474,8 @@ manifest through the Studio control plane, downloads only the resolved cells, an
474
474
  ### Optional: bridge a local render into your hosted account
475
475
 
476
476
  Connect your account and `save_project` / `read_look` / `save_look` / `read_project` /
477
- `render_project` start working too — **rendering still happens locally and spends no credits**, and
477
+ `render_project` start working too — **rendering still happens locally and spends no cloud
478
+ credits**, and
478
479
  a trial or Pro account unlocks full-resolution output and `emit_bundle` on this machine. A
479
480
  deliberate save also uploads its local source PNGs privately so the project reopens with
480
481
  screenshots on another device; normal renders and exports never upload.
@@ -648,7 +649,7 @@ shotops-mcp/
648
649
  shareEmit.ts emit_bundle's server-side share-link creation (reuses Phase-2 modules)
649
650
  uploads.ts Phase 10 — upload slots, ref ownership check, output:'urls' storage
650
651
  screenshotInput.ts Phase 10 — resolves screenshots[] (inline/ref/url/path) to base64
651
- env.ts loads ../.env.local; MCP_PORT / STUDIO_ORIGIN / MCP_PUBLIC_URL
652
+ env.ts loads ../.env.local; MCP_PORT / STUDIO_ORIGIN / SHOTOPS_AUTH_ORIGIN / MCP_PUBLIC_URL
652
653
  local.ts the LOCAL npx entry point — stdio transport, no auth required to preview
653
654
  localDeps.ts the local ToolDeps fork — static-serve renderer, no-op/bridged persistence
654
655
  hostedBridge.ts local→hosted bridge (a real MCP client using your shotops_ token)
@@ -657,8 +658,6 @@ shotops-mcp/
657
658
  vite.harness.config.mjs the STATIC harness build (local mode's publish prerequisite) → harness-dist/
658
659
  build.mjs esbuild bundle of src/local.ts (+ @engine/@api inlined) → dist/local.js
659
660
  Dockerfile hosted image — Playwright's Chromium base + this repo's 3 npm installs
660
- fly.toml Fly app config — RETIRED (#68), kept only for the cold-deploy recipe;
661
- the running fly.dev machine is NOT a rollback
662
661
  verify-mcp.mjs post-deploy smoke test — real MCP round-trip against a hosted URL
663
662
  verify-mcp-local.ts local stdio smoke test (tsx src/local.ts, in-repo)
664
663
  static-parity.ts pixel-diffs the static-serve render against the Vite-dev render (must be 0)