@productmaker/mcp 11.2.2 → 11.3.1

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.
Files changed (4) hide show
  1. package/README.md +14 -2
  2. package/dist/http.js +3644 -2699
  3. package/dist/stdio.js +3633 -2688
  4. package/package.json +1 -1
package/README.md CHANGED
@@ -138,6 +138,9 @@ separate release step.
138
138
  | `list_tasks` | List recent tasks |
139
139
  | `edit_task_draft` | Edit angle / pain point / persona before generation |
140
140
  | `create_service_video` | **Hidden from the MCP since 9.0.0** (owner decision 2026-10-08, still on WhatsApp): use `create_animated_video` for a service video. |
141
+ | `create_brand` | Service journey, step 1. Brand analysis of a **service business or personal brand** from its Instagram (`@handle` works), Facebook, TikTok or website — never for dropshipping products. `action=start` without `confirmed` only prices it; with `confirmed=true` it starts (`businessNotes` = what the user told about prices, WhatsApp or area, sent as a text document). Poll `action=status` with `brandId` until `ready` (analysis summary) or `failed` (plain reason). `action=list` reuses an existing brand. A retried confirmed start of the same address returns the brand already extracting instead of charging again. |
142
+ | `create_service_landing` | Service journey, step 2. Landing page of that brand: `action=prepare` (free) creates or resumes the brand's page and prices both paid steps; `action=build` with `confirmed=true` and the accepted `maxCredits` first reads the business data, then (called again) creates the page; `action=status` follows the step; `action=publish` publishes it at `/p/<slug>` and returns `publicUrl`, which feeds `create_animated_video`. The MCP handles revisions and idempotency keys itself, so a retry never pays twice. |
143
+ | `create_service_images` | Service journey, images. Ad images for a **service business** from its brand (`brandId` from `create_brand`), with no product photo — never for dropshipping products (`generate_image_creatives`). Without `confirmed` it only quotes (the web form's `image-creative` estimate with `subject: "service"`); with `confirmed=true` it sends `POST /v1/creatives/images` with `serviceBrief` (`instruction` or `delegateToAi`), `brandId`, `format` (4:5, 9:16, 1:1), `count` (1-3), `quality` and `language`. Follow the `taskId` with `get_task_status`. |
141
144
  | `create_animated_video` | Prepare a service URL for free with `action=prepare` (default); poll `status` or `cancel` using `websiteCaptureId`. Show its ready preview, format, duration, language and price range, then request explicit confirmation before `action=generate` with that ID and `confirmed=true`. Generation reuses the capture and may mix motion graphics with AI clips (including people speaking, in the narrator's voice) and a voice-over, up to the duration-based clip cap. Optional `hookVariants` (1-3 versions of the opening for A/B) and `music` (false = no music bed, same price). The maximum price is charged at generation; unused AI clips, an unused voice-over, unused narrator lip syncs and undelivered hook versions are refunded at completion, and failure refunds everything. No uploaded files on MCP. Follow the returned `taskId` with `get_task_status` for progress and MP4. A blocked page requires another public URL; never request passwords. |
142
145
  | `generate_video_creative` | Standalone UGC video creative |
143
146
  | `generate_free_video` | One free-form video from an exact prompt/script, optionally with a reference image (async: returns a `taskId`) |
@@ -191,7 +194,7 @@ separate release step.
191
194
  | `get_actor_voice_capabilities` | Read whether custom voice cloning is enabled for an actor and which countries/presentations the draft may use. Read-only, free — call before `quote_actor_voice` |
192
195
  | `quote_actor_voice` | Quote the paid custom-voice preview for an actor from a voice `draft` (prompt, country, presentation, tone…). Read-only, free |
193
196
  | `generate_actor_voice_preview` | Start the paid contextual voice preview for a quoted draft (Gemini TTS reference → voice clone). Requires the fresh `acceptedQuoteId` and a unique `requestKey` for retry safety. Costs credits |
194
- | `get_actor_voice_preview` | Poll a voice preview `candidateId` until it is `ready` and returns the playable preview. Free |
197
+ | `get_actor_voice_preview` | Poll a voice preview `candidateId` until it is `ready` and returns the playable preview. Recovery can submit the first paid generation under the already accepted quote; it is idempotent |
195
198
  | `approve_actor_voice` | Bind a ready preview candidate as the actor's approved voice. Optimistic-lock: pass `expectedRevision` (candidate) and `expectedApprovedRevision` (current approved voice, or null). Videos using the actor then narrate in this voice |
196
199
 
197
200
  An animated video's capture ID plus its format, duration and language identifies
@@ -279,7 +282,7 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
279
282
 
280
283
  ## Downloading results
281
284
 
282
- `get_task_status` returns short-lived (1 h) `mcp.productmaker.app/assets/...` URLs for every image and video. They stream R2 content through the MCP origin so clients with strict allowlists (claude.ai web, ChatGPT) can fetch them. Markdown image URLs auto-render in every major MCP client; videos are clickable download links.
285
+ `get_task_status` retains short-lived (1 h) `mcp.productmaker.app/assets/...` download URLs for every image and video when the asset proxy is enabled. A completed ad also returns one bounded native image preview, fetched internally from the original owner-scoped storage URL. Only the native image block is added; preview helpers cannot expose the raw storage URL in resource or text fallbacks. The existing proxy-backed JSON and Markdown links remain the download fallback. Markdown rendering depends on the host. If the preview cannot be retrieved, the completed task and its download links remain available. Videos are clickable download links.
283
286
 
284
287
  ## Environment variables
285
288
 
@@ -300,6 +303,15 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
300
303
 
301
304
  ## Version history
302
305
 
306
+ ### 11.3.0 — Recorrido de servicio: marca → landing → video e imágenes
307
+
308
+ - Nuevas herramientas `create_brand` y `create_service_landing` (solo MCP; WhatsApp sin adaptador). Un usuario puede decir «toma mi Instagram, hazme el análisis de marca, una landing y un video» y completarlo por MCP: `create_brand` → `create_service_landing` (publica en `/p/<slug>`) → `create_animated_video` con ese enlace.
309
+ - Cada paso pagado tiene una llamada gratis que lo cotiza y solo corre con `confirmed=true`; la landing además exige el `maxCredits` aceptado y no inicia una etapa cuyo precio lo supere.
310
+ - El modelo nunca maneja revisiones ni claves de idempotencia: el MCP relee `draftRevision` y deriva las claves de página + etapa + revisión.
311
+ - Nueva `create_service_images`: las imágenes de servicio de #2248 (`serviceBrief` + `brandId` en `POST /v1/creatives/images`), herramienta aparte para no mezclar el schema de producto de `generate_image_creatives`.
312
+ - Las instrucciones del servidor separan el recorrido de servicio del de dropshipping.
313
+ - La API acepta API keys en `/v1/brands*` (se quitó un `JwtAuthGuard` de ruta sobrante; el guard global ya autentica JWT o API key).
314
+
303
315
  ### 10.5.0 — Video animado: clips hablados con la voz del narrador y opción sin música
304
316
 
305
317
  - `create_animated_video` acepta `music` opcional (booleano, por defecto `true`): `false` hace el video sin música de fondo (quedan la voz y los efectos), al mismo precio. Se valida con `MotionGraphicsRequestSchema`; con `true` no se envía (el valor por defecto de la API) y la clave de idempotencia no cambia; con `false` entra en la clave, porque es otro video. La confirmación lo dice y `animatedVideo` trae `music`.