@productmaker/mcp 12.3.0 → 12.4.0

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 (3) hide show
  1. package/dist/http.js +164 -102
  2. package/dist/stdio.js +164 -102
  3. package/package.json +3 -3
package/dist/http.js CHANGED
@@ -2380,6 +2380,12 @@ var DEFAULT_PRICING = {
2380
2380
  ourCostCents: 7,
2381
2381
  userPriceCents: 10.5
2382
2382
  },
2383
+ // Sync 2.0 on Fal: $3/minute, standard lipsync-2. Used only after PixVerse
2384
+ // moderation; recovery settlement caps retail at the frozen primary price.
2385
+ "fal:lipsync-sync-v2-persec": {
2386
+ ourCostCents: 5,
2387
+ userPriceCents: 10
2388
+ },
2383
2389
  "sync_so:lipsync": {
2384
2390
  ourCostCents: 8.3,
2385
2391
  userPriceCents: 10
@@ -6100,6 +6106,11 @@ var LANDING_STRATEGIES = [
6100
6106
  "lifestyle_identity"
6101
6107
  ];
6102
6108
  var LandingStrategySchema = z14.enum(LANDING_STRATEGIES);
6109
+ var SELECTABLE_LANDING_STRATEGIES = [
6110
+ "classic",
6111
+ "social_proof"
6112
+ ];
6113
+ var SelectableLandingStrategySchema = z14.enum(SELECTABLE_LANDING_STRATEGIES);
6103
6114
  var EffectiveLandingStrategySchema = LandingStrategySchema.exclude([
6104
6115
  "auto"
6105
6116
  ]);
@@ -11482,6 +11493,16 @@ var CreativeEngineCompositionRepairSchema = z38.object({
11482
11493
  manifestHash: hash,
11483
11494
  compositionOperationId: id2
11484
11495
  }).strict();
11496
+ var CreativeEngineRetainedSceneCandidateBindingSchema = z38.object({
11497
+ owner: CreativeEngineOwnerSchema,
11498
+ context: CreativeEngineContextBindingSchema,
11499
+ planHash: hash,
11500
+ planRevision: z38.number().int().positive(),
11501
+ scene: CreativeEngineSceneSchema,
11502
+ preparedInputs: CreativeEnginePreparedInputsSchema,
11503
+ candidates: z38.array(CreativeEngineCandidateSchema),
11504
+ reviews: z38.array(CreativeEngineReviewSchema)
11505
+ }).strict();
11485
11506
  var CreativeEngineStateSchema = z38.object({
11486
11507
  schemaVersion: z38.union([
11487
11508
  z38.literal(1),
@@ -11512,6 +11533,8 @@ var CreativeEngineStateSchema = z38.object({
11512
11533
  reviews: z38.array(CreativeEngineReviewSchema),
11513
11534
  preparedInputs: z38.array(CreativeEnginePreparedInputsSchema),
11514
11535
  candidates: z38.array(CreativeEngineCandidateSchema),
11536
+ /** Domain-minted same-owner custody across an unchanged sibling repair. */
11537
+ retainedSceneCandidates: z38.array(CreativeEngineRetainedSceneCandidateBindingSchema).optional(),
11515
11538
  inheritedSceneOutputs: z38.array(CreativeEngineInheritedSceneOutputSchema).optional(),
11516
11539
  speechRoutings: z38.array(CreativeEngineSpeechRoutingSchema).optional(),
11517
11540
  speechWindowRepair: z38.object({
@@ -22494,6 +22517,23 @@ var ProductControlDailyCountsSchema = z100.object({
22494
22517
  "dropi"
22495
22518
  ])
22496
22519
  });
22520
+ var ProductControlCampaignEvidenceSchema = z100.object({
22521
+ provider: z100.literal("meta"),
22522
+ accountId: z100.string(),
22523
+ campaignId: z100.string(),
22524
+ date: z100.string(),
22525
+ currency: z100.string().nullable(),
22526
+ spend: z100.number().finite().nonnegative().nullable(),
22527
+ purchases: z100.number().finite().nonnegative().nullable(),
22528
+ dailyBudget: z100.number().finite().positive().nullable(),
22529
+ timeZone: z100.string().nullable(),
22530
+ budgetSource: z100.enum([
22531
+ "campaign",
22532
+ "adsets"
22533
+ ]).nullable(),
22534
+ /** Exact current provider day, compatible currency and operation timezone. */
22535
+ budgetVerified: z100.boolean()
22536
+ });
22497
22537
  var ProductControlRowSchema = z100.object({
22498
22538
  /** `null` hasta que la vendedora toca el producto por primera vez. */
22499
22539
  productControlId: z100.string().nullable(),
@@ -22533,6 +22573,7 @@ var ProductControlRowSchema = z100.object({
22533
22573
  accountId: z100.string(),
22534
22574
  campaignId: z100.string()
22535
22575
  })),
22576
+ campaignEvidence: z100.array(ProductControlCampaignEvidenceSchema).optional(),
22536
22577
  status: DailyControlStatusSchema,
22537
22578
  statusMessage: z100.string().nullable(),
22538
22579
  light: DailyControlLightSchema,
@@ -22601,6 +22642,9 @@ var ProductControlRateDefaultsSchema = z100.object({
22601
22642
  var ProductControlListResponseSchema = z100.object({
22602
22643
  since: z100.string(),
22603
22644
  until: z100.string(),
22645
+ /** Server calendar; absent on older API revisions. Today is always partial. */
22646
+ today: z100.string().optional(),
22647
+ timeZone: z100.string().nullable().optional(),
22604
22648
  rows: z100.array(ProductControlRowSchema),
22605
22649
  /** Nullable, NO opcional: ausente y «no hay de dónde heredar» tienen que
22606
22650
  * distinguirse, o la pantalla no sabe si preguntar o esperar. */
@@ -23164,7 +23208,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23164
23208
  // MCP 8.6.0: + storyteller narrative family and animationStyle axis.
23165
23209
  // MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
23166
23210
  // MCP 9.1.0: combine current animated-video controls and initial GIF choice.
23167
- "b44e4945c1d3d63d06ecf46295a6ac273df20e059edcf72bfb8f88149f28e12a",
23211
+ // MCP 12.4.0: landingStrategy narrowed to classic + social_proof.
23212
+ "c35f8c65762db3ea077b09f5f165e5571abea0f40250e4c096d1ef7cad7e5f7a",
23168
23213
  "credit_consuming",
23169
23214
  "creative",
23170
23215
  [
@@ -23607,105 +23652,117 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23607
23652
  ]
23608
23653
  }
23609
23654
  ]),
23610
- defineCapability("generate_landing", "14c537cf4ccaf25277f896aa58c64aef06ef4e6cba2ae8029437a732f8df71db", "credit_consuming", "creative", [
23655
+ defineCapability(
23656
+ "generate_landing",
23657
+ // MCP 12.4.0: guided landingStrategy narrowed to classic + social_proof.
23658
+ "d3ef2376273a5a1b987c79182e63ff00a03de322e1a13e0dc69f7ffa8330536e",
23611
23659
  "credit_consuming",
23612
- "state_change"
23613
- ], [
23614
- slot("product_reference", true, [
23615
- "images",
23616
- "winnerReference"
23617
- ], [
23618
- "imageMessageIds",
23619
- "imageAssetIds",
23620
- "projectId",
23621
- "productUrl"
23622
- ]),
23623
- slot("locale", true, [
23624
- "language",
23625
- "country"
23626
- ]),
23627
- slot("initial_landing_gif", false, [
23628
- "includeInitialLandingGif"
23629
- ], []),
23630
- slot("sales_context", false, [
23631
- "salesAngle",
23632
- "buyerPersona"
23633
- ]),
23634
- slot("commercial_offer", false, [
23635
- "price",
23636
- "compareAtPrice",
23637
- "offer"
23638
- ], [
23639
- "price",
23640
- "offer",
23641
- "compareAtPrice",
23642
- "paymentMethods"
23643
- ]),
23644
- slot("product_context", false, [
23645
- "productLabel",
23646
- "isCombo"
23647
- ], [
23648
- "productContext",
23649
- "productLabel",
23650
- "isCombo"
23651
- ]),
23652
- slot("brand_direction", false, [
23653
- "brandId"
23654
- ], [
23655
- "brandId",
23656
- "creativeDirection",
23657
- "headline",
23658
- "subheadline"
23659
- ]),
23660
- slot(
23661
- "landing_options",
23662
- // Required by the direct MCP schema, optional for the WhatsApp adapter.
23663
- false,
23664
- [
23665
- "creativeSetup"
23666
- ],
23667
- [
23668
- "competitorScanEnabled",
23669
- "landingStrategy",
23670
- "landingImageFormat",
23671
- "pauseForAngleReview"
23672
- ]
23673
- )
23674
- ], [
23675
- "product_reference"
23676
- ], [
23677
- "task",
23678
- "product",
23679
- "landing"
23680
- ], SHARED_CHANNEL_EXPOSURE, [
23681
- {
23682
- slot: "product_reference",
23683
- askBeforePaidExecution: true,
23684
- explicitOmissionAllowed: false,
23685
- fieldCompletion: "any"
23686
- },
23687
- {
23688
- slot: "locale",
23689
- askBeforePaidExecution: true,
23690
- explicitOmissionAllowed: false,
23691
- fieldCompletion: "all"
23692
- },
23693
- {
23694
- slot: "sales_context",
23695
- askBeforePaidExecution: true,
23696
- explicitOmissionAllowed: true,
23697
- fieldCompletion: "any",
23698
- completionFields: [
23699
- "salesAngle"
23700
- ]
23701
- },
23702
- {
23703
- slot: "commercial_offer",
23704
- askBeforePaidExecution: true,
23705
- explicitOmissionAllowed: true,
23706
- fieldCompletion: "all"
23707
- }
23708
- ]),
23660
+ "creative",
23661
+ [
23662
+ "credit_consuming",
23663
+ "state_change"
23664
+ ],
23665
+ [
23666
+ slot("product_reference", true, [
23667
+ "images",
23668
+ "winnerReference"
23669
+ ], [
23670
+ "imageMessageIds",
23671
+ "imageAssetIds",
23672
+ "projectId",
23673
+ "productUrl"
23674
+ ]),
23675
+ slot("locale", true, [
23676
+ "language",
23677
+ "country"
23678
+ ]),
23679
+ slot("initial_landing_gif", false, [
23680
+ "includeInitialLandingGif"
23681
+ ], []),
23682
+ slot("sales_context", false, [
23683
+ "salesAngle",
23684
+ "buyerPersona"
23685
+ ]),
23686
+ slot("commercial_offer", false, [
23687
+ "price",
23688
+ "compareAtPrice",
23689
+ "offer"
23690
+ ], [
23691
+ "price",
23692
+ "offer",
23693
+ "compareAtPrice",
23694
+ "paymentMethods"
23695
+ ]),
23696
+ slot("product_context", false, [
23697
+ "productLabel",
23698
+ "isCombo"
23699
+ ], [
23700
+ "productContext",
23701
+ "productLabel",
23702
+ "isCombo"
23703
+ ]),
23704
+ slot("brand_direction", false, [
23705
+ "brandId"
23706
+ ], [
23707
+ "brandId",
23708
+ "creativeDirection",
23709
+ "headline",
23710
+ "subheadline"
23711
+ ]),
23712
+ slot(
23713
+ "landing_options",
23714
+ // Required by the direct MCP schema, optional for the WhatsApp adapter.
23715
+ false,
23716
+ [
23717
+ "creativeSetup"
23718
+ ],
23719
+ [
23720
+ "competitorScanEnabled",
23721
+ "landingStrategy",
23722
+ "landingImageFormat",
23723
+ "pauseForAngleReview"
23724
+ ]
23725
+ )
23726
+ ],
23727
+ [
23728
+ "product_reference"
23729
+ ],
23730
+ [
23731
+ "task",
23732
+ "product",
23733
+ "landing"
23734
+ ],
23735
+ SHARED_CHANNEL_EXPOSURE,
23736
+ [
23737
+ {
23738
+ slot: "product_reference",
23739
+ askBeforePaidExecution: true,
23740
+ explicitOmissionAllowed: false,
23741
+ fieldCompletion: "any"
23742
+ },
23743
+ {
23744
+ slot: "locale",
23745
+ askBeforePaidExecution: true,
23746
+ explicitOmissionAllowed: false,
23747
+ fieldCompletion: "all"
23748
+ },
23749
+ {
23750
+ slot: "sales_context",
23751
+ askBeforePaidExecution: true,
23752
+ explicitOmissionAllowed: true,
23753
+ fieldCompletion: "any",
23754
+ completionFields: [
23755
+ "salesAngle"
23756
+ ]
23757
+ },
23758
+ {
23759
+ slot: "commercial_offer",
23760
+ askBeforePaidExecution: true,
23761
+ explicitOmissionAllowed: true,
23762
+ fieldCompletion: "all"
23763
+ }
23764
+ ]
23765
+ ),
23709
23766
  defineCapability(
23710
23767
  "generate_video_creative",
23711
23768
  // MCP 8.6.0: + storyteller narrative family and animationStyle axis.
@@ -30923,7 +30980,7 @@ var ApiClient = class {
30923
30980
  };
30924
30981
 
30925
30982
  // src/index.ts
30926
- var MCP_VERSION = "12.3.0";
30983
+ var MCP_VERSION = "12.4.0";
30927
30984
 
30928
30985
  // src/meta-upload-app.ts
30929
30986
  import { readFileSync } from "fs";
@@ -31917,7 +31974,7 @@ __name(resolveMediaRef, "resolveMediaRef");
31917
31974
  import { z as z133 } from "zod";
31918
31975
  var Lang = z133.string().regex(/^[a-z]{2}(?:[-_][a-zA-Z]{2})?$/, "Usa un c\xF3digo de idioma BCP-47, por ejemplo es, en-US o pt-BR").max(10);
31919
31976
  var Country = z133.string().min(2).max(3);
31920
- var LandingStrategyEnum = LandingStrategySchema;
31977
+ var LandingStrategyEnum = SelectableLandingStrategySchema;
31921
31978
  var LandingImageFormatEnum = LandingImageFormatSchema;
31922
31979
  var VideoPresetEnum = VideoPreset.extract([
31923
31980
  "auto",
@@ -32260,6 +32317,9 @@ var McpErrorCode = {
32260
32317
  // Auth / API key
32261
32318
  INVALID_API_KEY: "INVALID_API_KEY",
32262
32319
  REVOKED_API_KEY: "REVOKED_API_KEY",
32320
+ // The session id has no account row (a linked account moved it); signing
32321
+ // in again runs the user sync that restores it.
32322
+ USER_NOT_PROVISIONED: "USER_NOT_PROVISIONED",
32263
32323
  // Rate limit / quota
32264
32324
  RATE_LIMITED: "RATE_LIMITED",
32265
32325
  CREDIT_ADMISSION_UNAVAILABLE: "CREDIT_ADMISSION_UNAVAILABLE",
@@ -32540,6 +32600,7 @@ var CODE_MESSAGES = {
32540
32600
  PRODUCT_RESEARCH_IDEMPOTENCY_CONFLICT: "A product research run with the same country and category is already running. Check it with `list_product_research_runs` instead of starting a new paid run.",
32541
32601
  // API key
32542
32602
  INVALID_API_KEY: "Invalid API key. Check your PM_API_KEY in the MCP client configuration.",
32603
+ USER_NOT_PROVISIONED: "This ProductMaker session points to an account that moved to another sign-in method. Sign in to ProductMaker again (reconnect the MCP or log in at productmaker.app), then retry. Do not change the API key.",
32543
32604
  REVOKED_API_KEY: "API key revoked. Generate a new one at https://productmaker.app/account/api-keys.",
32544
32605
  // Rate
32545
32606
  RATE_LIMITED: "Too many requests. Wait a few seconds.",
@@ -32698,6 +32759,7 @@ var INVALID_PARAM_CODES = /* @__PURE__ */ new Set([
32698
32759
  McpErrorCode.NO_META_AD_ACCOUNTS
32699
32760
  ]);
32700
32761
  var PASSTHROUGH_CODES = /* @__PURE__ */ new Set([
32762
+ McpErrorCode.USER_NOT_PROVISIONED,
32701
32763
  McpErrorCode.CREDIT_ADMISSION_UNAVAILABLE,
32702
32764
  McpErrorCode.INSUFFICIENT_CREDITS,
32703
32765
  McpErrorCode.TASK_QUOTA_EXCEEDED,
@@ -34779,7 +34841,7 @@ var CreateProductTaskInput = z138.object({
34779
34841
  creativeDirection: z138.string().max(500).optional().describe('Opcional. Direcci\xF3n creativa en texto libre (colores, mood, estilo) que aplica a los outputs de IMAGEN y LANDING (no al video \u2014 el estilo/ambiente del video se dirige con scriptNotes). M\xC1XIMA PRIORIDAD: anula marca, colores y estilo por defecto. Ej. "amarillo y azul, minimalista". M\xE1x 500 caracteres.'),
34780
34842
  headline: z138.string().max(120).optional().describe("Opcional. Titular EXACTO a renderizar. Se imprime tal cual: la IA no lo reescribe, no lo acorta y no lo traduce. Se aplica a las IM\xC1GENES y a la portada de la landing de esta task (el video no lo usa; para el video usa scriptNotes). \xDAsalo cuando el copy es de marca y no es negociable. M\xE1x 120 caracteres. Si lo omites, la IA escribe el titular."),
34781
34843
  subheadline: z138.string().max(160).optional().describe("Opcional. Subt\xEDtulo EXACTO a renderizar, misma regla que headline. Independiente: puedes fijar solo el subt\xEDtulo. M\xE1x 160 caracteres."),
34782
- landingStrategy: LandingStrategyEnum.optional().describe('Opcional. Estructura de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "classic" (estructura original probada y recomendada; default del primer rollout), "auto" (la IA decide; experimental), "pain_solution", "social_proof" (Landing Viral: UGC, WhatsApp, Instagram y evidencia social), "benefits_clarity", "offer_value" o "lifestyle_identity". Default "classic".'),
34844
+ landingStrategy: LandingStrategyEnum.optional().describe('Opcional. Estructura de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "classic" (Landing cl\xE1sica de ProductMaker: estructura original probada y recomendada) o "social_proof" (Landing Viral: UGC, WhatsApp, Instagram y evidencia social). Default "classic".'),
34783
34845
  landingImageFormat: LandingImageFormatEnum.default("9:16").describe('Opcional. Formato/relaci\xF3n de aspecto de las im\xE1genes de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "9:16" (vertical, por defecto), "4:5" (vertical compacto para feed) o "1:1" (cuadrado). Default "9:16".')
34784
34846
  }).strict();
34785
34847
  var CreateServiceVideoInput = z138.object({
package/dist/stdio.js CHANGED
@@ -2155,6 +2155,12 @@ var DEFAULT_PRICING = {
2155
2155
  ourCostCents: 7,
2156
2156
  userPriceCents: 10.5
2157
2157
  },
2158
+ // Sync 2.0 on Fal: $3/minute, standard lipsync-2. Used only after PixVerse
2159
+ // moderation; recovery settlement caps retail at the frozen primary price.
2160
+ "fal:lipsync-sync-v2-persec": {
2161
+ ourCostCents: 5,
2162
+ userPriceCents: 10
2163
+ },
2158
2164
  "sync_so:lipsync": {
2159
2165
  ourCostCents: 8.3,
2160
2166
  userPriceCents: 10
@@ -5875,6 +5881,11 @@ var LANDING_STRATEGIES = [
5875
5881
  "lifestyle_identity"
5876
5882
  ];
5877
5883
  var LandingStrategySchema = z14.enum(LANDING_STRATEGIES);
5884
+ var SELECTABLE_LANDING_STRATEGIES = [
5885
+ "classic",
5886
+ "social_proof"
5887
+ ];
5888
+ var SelectableLandingStrategySchema = z14.enum(SELECTABLE_LANDING_STRATEGIES);
5878
5889
  var EffectiveLandingStrategySchema = LandingStrategySchema.exclude([
5879
5890
  "auto"
5880
5891
  ]);
@@ -11257,6 +11268,16 @@ var CreativeEngineCompositionRepairSchema = z38.object({
11257
11268
  manifestHash: hash,
11258
11269
  compositionOperationId: id2
11259
11270
  }).strict();
11271
+ var CreativeEngineRetainedSceneCandidateBindingSchema = z38.object({
11272
+ owner: CreativeEngineOwnerSchema,
11273
+ context: CreativeEngineContextBindingSchema,
11274
+ planHash: hash,
11275
+ planRevision: z38.number().int().positive(),
11276
+ scene: CreativeEngineSceneSchema,
11277
+ preparedInputs: CreativeEnginePreparedInputsSchema,
11278
+ candidates: z38.array(CreativeEngineCandidateSchema),
11279
+ reviews: z38.array(CreativeEngineReviewSchema)
11280
+ }).strict();
11260
11281
  var CreativeEngineStateSchema = z38.object({
11261
11282
  schemaVersion: z38.union([
11262
11283
  z38.literal(1),
@@ -11287,6 +11308,8 @@ var CreativeEngineStateSchema = z38.object({
11287
11308
  reviews: z38.array(CreativeEngineReviewSchema),
11288
11309
  preparedInputs: z38.array(CreativeEnginePreparedInputsSchema),
11289
11310
  candidates: z38.array(CreativeEngineCandidateSchema),
11311
+ /** Domain-minted same-owner custody across an unchanged sibling repair. */
11312
+ retainedSceneCandidates: z38.array(CreativeEngineRetainedSceneCandidateBindingSchema).optional(),
11290
11313
  inheritedSceneOutputs: z38.array(CreativeEngineInheritedSceneOutputSchema).optional(),
11291
11314
  speechRoutings: z38.array(CreativeEngineSpeechRoutingSchema).optional(),
11292
11315
  speechWindowRepair: z38.object({
@@ -22269,6 +22292,23 @@ var ProductControlDailyCountsSchema = z100.object({
22269
22292
  "dropi"
22270
22293
  ])
22271
22294
  });
22295
+ var ProductControlCampaignEvidenceSchema = z100.object({
22296
+ provider: z100.literal("meta"),
22297
+ accountId: z100.string(),
22298
+ campaignId: z100.string(),
22299
+ date: z100.string(),
22300
+ currency: z100.string().nullable(),
22301
+ spend: z100.number().finite().nonnegative().nullable(),
22302
+ purchases: z100.number().finite().nonnegative().nullable(),
22303
+ dailyBudget: z100.number().finite().positive().nullable(),
22304
+ timeZone: z100.string().nullable(),
22305
+ budgetSource: z100.enum([
22306
+ "campaign",
22307
+ "adsets"
22308
+ ]).nullable(),
22309
+ /** Exact current provider day, compatible currency and operation timezone. */
22310
+ budgetVerified: z100.boolean()
22311
+ });
22272
22312
  var ProductControlRowSchema = z100.object({
22273
22313
  /** `null` hasta que la vendedora toca el producto por primera vez. */
22274
22314
  productControlId: z100.string().nullable(),
@@ -22308,6 +22348,7 @@ var ProductControlRowSchema = z100.object({
22308
22348
  accountId: z100.string(),
22309
22349
  campaignId: z100.string()
22310
22350
  })),
22351
+ campaignEvidence: z100.array(ProductControlCampaignEvidenceSchema).optional(),
22311
22352
  status: DailyControlStatusSchema,
22312
22353
  statusMessage: z100.string().nullable(),
22313
22354
  light: DailyControlLightSchema,
@@ -22376,6 +22417,9 @@ var ProductControlRateDefaultsSchema = z100.object({
22376
22417
  var ProductControlListResponseSchema = z100.object({
22377
22418
  since: z100.string(),
22378
22419
  until: z100.string(),
22420
+ /** Server calendar; absent on older API revisions. Today is always partial. */
22421
+ today: z100.string().optional(),
22422
+ timeZone: z100.string().nullable().optional(),
22379
22423
  rows: z100.array(ProductControlRowSchema),
22380
22424
  /** Nullable, NO opcional: ausente y «no hay de dónde heredar» tienen que
22381
22425
  * distinguirse, o la pantalla no sabe si preguntar o esperar. */
@@ -22939,7 +22983,8 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
22939
22983
  // MCP 8.6.0: + storyteller narrative family and animationStyle axis.
22940
22984
  // MCP 8.10.0: storyteller family blocked (BLOCKED_NARRATIVE_STYLES).
22941
22985
  // MCP 9.1.0: combine current animated-video controls and initial GIF choice.
22942
- "b44e4945c1d3d63d06ecf46295a6ac273df20e059edcf72bfb8f88149f28e12a",
22986
+ // MCP 12.4.0: landingStrategy narrowed to classic + social_proof.
22987
+ "c35f8c65762db3ea077b09f5f165e5571abea0f40250e4c096d1ef7cad7e5f7a",
22943
22988
  "credit_consuming",
22944
22989
  "creative",
22945
22990
  [
@@ -23382,105 +23427,117 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
23382
23427
  ]
23383
23428
  }
23384
23429
  ]),
23385
- defineCapability("generate_landing", "14c537cf4ccaf25277f896aa58c64aef06ef4e6cba2ae8029437a732f8df71db", "credit_consuming", "creative", [
23430
+ defineCapability(
23431
+ "generate_landing",
23432
+ // MCP 12.4.0: guided landingStrategy narrowed to classic + social_proof.
23433
+ "d3ef2376273a5a1b987c79182e63ff00a03de322e1a13e0dc69f7ffa8330536e",
23386
23434
  "credit_consuming",
23387
- "state_change"
23388
- ], [
23389
- slot("product_reference", true, [
23390
- "images",
23391
- "winnerReference"
23392
- ], [
23393
- "imageMessageIds",
23394
- "imageAssetIds",
23395
- "projectId",
23396
- "productUrl"
23397
- ]),
23398
- slot("locale", true, [
23399
- "language",
23400
- "country"
23401
- ]),
23402
- slot("initial_landing_gif", false, [
23403
- "includeInitialLandingGif"
23404
- ], []),
23405
- slot("sales_context", false, [
23406
- "salesAngle",
23407
- "buyerPersona"
23408
- ]),
23409
- slot("commercial_offer", false, [
23410
- "price",
23411
- "compareAtPrice",
23412
- "offer"
23413
- ], [
23414
- "price",
23415
- "offer",
23416
- "compareAtPrice",
23417
- "paymentMethods"
23418
- ]),
23419
- slot("product_context", false, [
23420
- "productLabel",
23421
- "isCombo"
23422
- ], [
23423
- "productContext",
23424
- "productLabel",
23425
- "isCombo"
23426
- ]),
23427
- slot("brand_direction", false, [
23428
- "brandId"
23429
- ], [
23430
- "brandId",
23431
- "creativeDirection",
23432
- "headline",
23433
- "subheadline"
23434
- ]),
23435
- slot(
23436
- "landing_options",
23437
- // Required by the direct MCP schema, optional for the WhatsApp adapter.
23438
- false,
23439
- [
23440
- "creativeSetup"
23441
- ],
23442
- [
23443
- "competitorScanEnabled",
23444
- "landingStrategy",
23445
- "landingImageFormat",
23446
- "pauseForAngleReview"
23447
- ]
23448
- )
23449
- ], [
23450
- "product_reference"
23451
- ], [
23452
- "task",
23453
- "product",
23454
- "landing"
23455
- ], SHARED_CHANNEL_EXPOSURE, [
23456
- {
23457
- slot: "product_reference",
23458
- askBeforePaidExecution: true,
23459
- explicitOmissionAllowed: false,
23460
- fieldCompletion: "any"
23461
- },
23462
- {
23463
- slot: "locale",
23464
- askBeforePaidExecution: true,
23465
- explicitOmissionAllowed: false,
23466
- fieldCompletion: "all"
23467
- },
23468
- {
23469
- slot: "sales_context",
23470
- askBeforePaidExecution: true,
23471
- explicitOmissionAllowed: true,
23472
- fieldCompletion: "any",
23473
- completionFields: [
23474
- "salesAngle"
23475
- ]
23476
- },
23477
- {
23478
- slot: "commercial_offer",
23479
- askBeforePaidExecution: true,
23480
- explicitOmissionAllowed: true,
23481
- fieldCompletion: "all"
23482
- }
23483
- ]),
23435
+ "creative",
23436
+ [
23437
+ "credit_consuming",
23438
+ "state_change"
23439
+ ],
23440
+ [
23441
+ slot("product_reference", true, [
23442
+ "images",
23443
+ "winnerReference"
23444
+ ], [
23445
+ "imageMessageIds",
23446
+ "imageAssetIds",
23447
+ "projectId",
23448
+ "productUrl"
23449
+ ]),
23450
+ slot("locale", true, [
23451
+ "language",
23452
+ "country"
23453
+ ]),
23454
+ slot("initial_landing_gif", false, [
23455
+ "includeInitialLandingGif"
23456
+ ], []),
23457
+ slot("sales_context", false, [
23458
+ "salesAngle",
23459
+ "buyerPersona"
23460
+ ]),
23461
+ slot("commercial_offer", false, [
23462
+ "price",
23463
+ "compareAtPrice",
23464
+ "offer"
23465
+ ], [
23466
+ "price",
23467
+ "offer",
23468
+ "compareAtPrice",
23469
+ "paymentMethods"
23470
+ ]),
23471
+ slot("product_context", false, [
23472
+ "productLabel",
23473
+ "isCombo"
23474
+ ], [
23475
+ "productContext",
23476
+ "productLabel",
23477
+ "isCombo"
23478
+ ]),
23479
+ slot("brand_direction", false, [
23480
+ "brandId"
23481
+ ], [
23482
+ "brandId",
23483
+ "creativeDirection",
23484
+ "headline",
23485
+ "subheadline"
23486
+ ]),
23487
+ slot(
23488
+ "landing_options",
23489
+ // Required by the direct MCP schema, optional for the WhatsApp adapter.
23490
+ false,
23491
+ [
23492
+ "creativeSetup"
23493
+ ],
23494
+ [
23495
+ "competitorScanEnabled",
23496
+ "landingStrategy",
23497
+ "landingImageFormat",
23498
+ "pauseForAngleReview"
23499
+ ]
23500
+ )
23501
+ ],
23502
+ [
23503
+ "product_reference"
23504
+ ],
23505
+ [
23506
+ "task",
23507
+ "product",
23508
+ "landing"
23509
+ ],
23510
+ SHARED_CHANNEL_EXPOSURE,
23511
+ [
23512
+ {
23513
+ slot: "product_reference",
23514
+ askBeforePaidExecution: true,
23515
+ explicitOmissionAllowed: false,
23516
+ fieldCompletion: "any"
23517
+ },
23518
+ {
23519
+ slot: "locale",
23520
+ askBeforePaidExecution: true,
23521
+ explicitOmissionAllowed: false,
23522
+ fieldCompletion: "all"
23523
+ },
23524
+ {
23525
+ slot: "sales_context",
23526
+ askBeforePaidExecution: true,
23527
+ explicitOmissionAllowed: true,
23528
+ fieldCompletion: "any",
23529
+ completionFields: [
23530
+ "salesAngle"
23531
+ ]
23532
+ },
23533
+ {
23534
+ slot: "commercial_offer",
23535
+ askBeforePaidExecution: true,
23536
+ explicitOmissionAllowed: true,
23537
+ fieldCompletion: "all"
23538
+ }
23539
+ ]
23540
+ ),
23484
23541
  defineCapability(
23485
23542
  "generate_video_creative",
23486
23543
  // MCP 8.6.0: + storyteller narrative family and animationStyle axis.
@@ -29250,7 +29307,7 @@ var ApiClient = class {
29250
29307
  };
29251
29308
 
29252
29309
  // src/index.ts
29253
- var MCP_VERSION = "12.3.0";
29310
+ var MCP_VERSION = "12.4.0";
29254
29311
 
29255
29312
  // src/meta-upload-app.ts
29256
29313
  import { readFileSync } from "fs";
@@ -30248,7 +30305,7 @@ __name(resolveMediaRef, "resolveMediaRef");
30248
30305
  import { z as z132 } from "zod";
30249
30306
  var Lang = z132.string().regex(/^[a-z]{2}(?:[-_][a-zA-Z]{2})?$/, "Usa un c\xF3digo de idioma BCP-47, por ejemplo es, en-US o pt-BR").max(10);
30250
30307
  var Country = z132.string().min(2).max(3);
30251
- var LandingStrategyEnum = LandingStrategySchema;
30308
+ var LandingStrategyEnum = SelectableLandingStrategySchema;
30252
30309
  var LandingImageFormatEnum = LandingImageFormatSchema;
30253
30310
  var VideoPresetEnum = VideoPreset.extract([
30254
30311
  "auto",
@@ -30591,6 +30648,9 @@ var McpErrorCode = {
30591
30648
  // Auth / API key
30592
30649
  INVALID_API_KEY: "INVALID_API_KEY",
30593
30650
  REVOKED_API_KEY: "REVOKED_API_KEY",
30651
+ // The session id has no account row (a linked account moved it); signing
30652
+ // in again runs the user sync that restores it.
30653
+ USER_NOT_PROVISIONED: "USER_NOT_PROVISIONED",
30594
30654
  // Rate limit / quota
30595
30655
  RATE_LIMITED: "RATE_LIMITED",
30596
30656
  CREDIT_ADMISSION_UNAVAILABLE: "CREDIT_ADMISSION_UNAVAILABLE",
@@ -30871,6 +30931,7 @@ var CODE_MESSAGES = {
30871
30931
  PRODUCT_RESEARCH_IDEMPOTENCY_CONFLICT: "A product research run with the same country and category is already running. Check it with `list_product_research_runs` instead of starting a new paid run.",
30872
30932
  // API key
30873
30933
  INVALID_API_KEY: "Invalid API key. Check your PM_API_KEY in the MCP client configuration.",
30934
+ USER_NOT_PROVISIONED: "This ProductMaker session points to an account that moved to another sign-in method. Sign in to ProductMaker again (reconnect the MCP or log in at productmaker.app), then retry. Do not change the API key.",
30874
30935
  REVOKED_API_KEY: "API key revoked. Generate a new one at https://productmaker.app/account/api-keys.",
30875
30936
  // Rate
30876
30937
  RATE_LIMITED: "Too many requests. Wait a few seconds.",
@@ -31029,6 +31090,7 @@ var INVALID_PARAM_CODES = /* @__PURE__ */ new Set([
31029
31090
  McpErrorCode.NO_META_AD_ACCOUNTS
31030
31091
  ]);
31031
31092
  var PASSTHROUGH_CODES = /* @__PURE__ */ new Set([
31093
+ McpErrorCode.USER_NOT_PROVISIONED,
31032
31094
  McpErrorCode.CREDIT_ADMISSION_UNAVAILABLE,
31033
31095
  McpErrorCode.INSUFFICIENT_CREDITS,
31034
31096
  McpErrorCode.TASK_QUOTA_EXCEEDED,
@@ -33264,7 +33326,7 @@ var CreateProductTaskInput = z137.object({
33264
33326
  creativeDirection: z137.string().max(500).optional().describe('Opcional. Direcci\xF3n creativa en texto libre (colores, mood, estilo) que aplica a los outputs de IMAGEN y LANDING (no al video \u2014 el estilo/ambiente del video se dirige con scriptNotes). M\xC1XIMA PRIORIDAD: anula marca, colores y estilo por defecto. Ej. "amarillo y azul, minimalista". M\xE1x 500 caracteres.'),
33265
33327
  headline: z137.string().max(120).optional().describe("Opcional. Titular EXACTO a renderizar. Se imprime tal cual: la IA no lo reescribe, no lo acorta y no lo traduce. Se aplica a las IM\xC1GENES y a la portada de la landing de esta task (el video no lo usa; para el video usa scriptNotes). \xDAsalo cuando el copy es de marca y no es negociable. M\xE1x 120 caracteres. Si lo omites, la IA escribe el titular."),
33266
33328
  subheadline: z137.string().max(160).optional().describe("Opcional. Subt\xEDtulo EXACTO a renderizar, misma regla que headline. Independiente: puedes fijar solo el subt\xEDtulo. M\xE1x 160 caracteres."),
33267
- landingStrategy: LandingStrategyEnum.optional().describe('Opcional. Estructura de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "classic" (estructura original probada y recomendada; default del primer rollout), "auto" (la IA decide; experimental), "pain_solution", "social_proof" (Landing Viral: UGC, WhatsApp, Instagram y evidencia social), "benefits_clarity", "offer_value" o "lifestyle_identity". Default "classic".'),
33329
+ landingStrategy: LandingStrategyEnum.optional().describe('Opcional. Estructura de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "classic" (Landing cl\xE1sica de ProductMaker: estructura original probada y recomendada) o "social_proof" (Landing Viral: UGC, WhatsApp, Instagram y evidencia social). Default "classic".'),
33268
33330
  landingImageFormat: LandingImageFormatEnum.default("9:16").describe('Opcional. Formato/relaci\xF3n de aspecto de las im\xE1genes de la landing cl\xE1sica cuando landing est\xE1 entre outputs: "9:16" (vertical, por defecto), "4:5" (vertical compacto para feed) o "1:1" (cuadrado). Default "9:16".')
33269
33331
  }).strict();
33270
33332
  var CreateServiceVideoInput = z137.object({
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@productmaker/mcp",
3
- "version": "12.3.0",
3
+ "version": "12.4.0",
4
4
  "type": "module",
5
5
  "private": false,
6
6
  "description": "ProductMaker MCP server — cost products, generate landing pages, UGC videos, and ad creatives, and publish to Shopify, Meta Ads, and TikTok Ads.",
@@ -67,8 +67,8 @@
67
67
  "typescript": "^7.0.2",
68
68
  "vitest": "5.0.3",
69
69
  "@packages/product-economics": "0.1.0",
70
- "@packages/utils": "0.1.0",
71
- "@packages/types": "0.1.0"
70
+ "@packages/types": "0.1.0",
71
+ "@packages/utils": "0.1.0"
72
72
  },
73
73
  "publishConfig": {
74
74
  "access": "public"