@productmaker/mcp 11.5.0 → 11.5.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.
- package/README.md +5 -0
- package/dist/http.js +29 -6
- package/dist/stdio.js +29 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -303,6 +303,11 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
|
|
|
303
303
|
|
|
304
304
|
## Version history
|
|
305
305
|
|
|
306
|
+
### 11.5.1 — Copy junto a cada pieza de servicios
|
|
307
|
+
|
|
308
|
+
Los resultados de videos e imágenes de servicios incluyen texto para publicar
|
|
309
|
+
junto a cada pieza. Los formatos y controles de generación existentes se conservan.
|
|
310
|
+
|
|
306
311
|
### 11.5.0 — El WhatsApp de la marca
|
|
307
312
|
|
|
308
313
|
- `create_brand` `status`/`list`: el resumen de la marca incluye `whatsapp` (E.164) cuando el negocio lo dio en la marca o el análisis lo encontró en su página. Una landing creada desde esa marca ya empieza con ese WhatsApp como canal de contacto: el modelo no debe volver a pedirlo.
|
package/dist/http.js
CHANGED
|
@@ -5351,9 +5351,20 @@ var AdCreative = z23.object({
|
|
|
5351
5351
|
/** One-to-one with `variants`: null for ProductMaker-original images and the
|
|
5352
5352
|
* evidence tier for the competitor-reference variant. */
|
|
5353
5353
|
variantSignals: z23.array(ImageWinnerSignal.nullable()).optional(),
|
|
5354
|
+
/** Caption for each delivered service image, aligned with variants. */
|
|
5355
|
+
adCopies: z23.array(z23.string().trim().min(1)).optional(),
|
|
5354
5356
|
createdAt: z23.string().datetime().optional(),
|
|
5355
5357
|
adCopy: z23.string().optional()
|
|
5356
5358
|
}).superRefine((creative, ctx) => {
|
|
5359
|
+
if (creative.adCopies !== void 0 && creative.adCopies.length !== creative.variants?.length) {
|
|
5360
|
+
ctx.addIssue({
|
|
5361
|
+
code: z23.ZodIssueCode.custom,
|
|
5362
|
+
path: [
|
|
5363
|
+
"adCopies"
|
|
5364
|
+
],
|
|
5365
|
+
message: "adCopies must align one-to-one with variants"
|
|
5366
|
+
});
|
|
5367
|
+
}
|
|
5357
5368
|
if (creative.variantSignals !== void 0 && (creative.variants === void 0 || creative.variantSignals.length !== creative.variants.length)) {
|
|
5358
5369
|
ctx.addIssue({
|
|
5359
5370
|
code: z23.ZodIssueCode.custom,
|
|
@@ -5375,6 +5386,7 @@ var ImageCreativeCopy = z23.object({
|
|
|
5375
5386
|
}).partial();
|
|
5376
5387
|
var ImageCreativeVariant = z23.object({
|
|
5377
5388
|
id: z23.string(),
|
|
5389
|
+
adCopy: z23.string().optional(),
|
|
5378
5390
|
url: z23.string().url(),
|
|
5379
5391
|
downloadUrl: z23.string().url().optional()
|
|
5380
5392
|
});
|
|
@@ -18981,7 +18993,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
18981
18993
|
], [
|
|
18982
18994
|
"service_landing"
|
|
18983
18995
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
18984
|
-
defineCapability("create_service_images", "
|
|
18996
|
+
defineCapability("create_service_images", "c36653d6744c38aa43cd7ddad34481526651a09590de5bb62d1061e39dd537c3", "credit_consuming", "creative", [
|
|
18985
18997
|
"credit_consuming",
|
|
18986
18998
|
"state_change"
|
|
18987
18999
|
], [
|
|
@@ -24146,7 +24158,7 @@ var ApiClient = class {
|
|
|
24146
24158
|
};
|
|
24147
24159
|
|
|
24148
24160
|
// src/index.ts
|
|
24149
|
-
var MCP_VERSION = "11.5.
|
|
24161
|
+
var MCP_VERSION = "11.5.1";
|
|
24150
24162
|
|
|
24151
24163
|
// src/meta-upload-app.ts
|
|
24152
24164
|
import { readFileSync } from "fs";
|
|
@@ -25873,9 +25885,13 @@ async function fetchTaskOutputs(api, taskId, options) {
|
|
|
25873
25885
|
const variants = raw.adCreative?.variants ?? [];
|
|
25874
25886
|
const hasVariants = variants.some((v) => typeof v === "string");
|
|
25875
25887
|
if (hasVariants) {
|
|
25876
|
-
for (const variant of variants) {
|
|
25888
|
+
for (const [index, variant] of variants.entries()) {
|
|
25889
|
+
const adCopy = raw.adCreative?.adCopies?.[index];
|
|
25877
25890
|
if (typeof variant === "string") images.push({
|
|
25878
|
-
url: variant
|
|
25891
|
+
url: variant,
|
|
25892
|
+
...adCopy ? {
|
|
25893
|
+
adCopy
|
|
25894
|
+
} : {}
|
|
25879
25895
|
});
|
|
25880
25896
|
}
|
|
25881
25897
|
} else if (raw.adCreative?.url) {
|
|
@@ -25914,6 +25930,7 @@ function renderOutputsMarkdown(outputs) {
|
|
|
25914
25930
|
outputs.images.forEach((img, i) => {
|
|
25915
25931
|
parts.push(``);
|
|
25916
25932
|
parts.push(`[\u2B07 Descargar v${i}](${img.url})`);
|
|
25933
|
+
if (img.adCopy) parts.push(`Copy: ${img.adCopy}`);
|
|
25917
25934
|
});
|
|
25918
25935
|
}
|
|
25919
25936
|
if (outputs.adCopy) {
|
|
@@ -26844,6 +26861,8 @@ var AnimatedVideoResultSchema = z114.object({
|
|
|
26844
26861
|
]),
|
|
26845
26862
|
serviceMode: z114.literal("motion_graphics"),
|
|
26846
26863
|
finalMp4Url: z114.string().optional(),
|
|
26864
|
+
adCopy: z114.string().optional(),
|
|
26865
|
+
adCopies: z114.array(z114.string()).optional(),
|
|
26847
26866
|
error: z114.string().optional(),
|
|
26848
26867
|
motionGraphics: z114.object({
|
|
26849
26868
|
stage: MotionGraphicsStageSchema,
|
|
@@ -26956,10 +26975,14 @@ function renderAnimatedVideoStatus(result) {
|
|
|
26956
26975
|
const label = variantUrls.length > 0 ? "Gancho 1" : "Video final";
|
|
26957
26976
|
lines.push(`${label} (MP4): ${result.finalMp4Url}`);
|
|
26958
26977
|
lines.push(`[Descargar ${label.toLowerCase()}](${result.finalMp4Url})`);
|
|
26978
|
+
const copy = result.adCopies?.[0] || result.adCopy;
|
|
26979
|
+
if (copy) lines.push(`Copy: ${copy}`);
|
|
26959
26980
|
}
|
|
26960
26981
|
variantUrls.forEach((url, index) => {
|
|
26961
26982
|
lines.push(`Gancho ${index + 2} (MP4): ${url}`);
|
|
26962
26983
|
lines.push(`[Descargar gancho ${index + 2}](${url})`);
|
|
26984
|
+
const copy = result.adCopies?.[index + 1] || result.adCopy;
|
|
26985
|
+
if (copy) lines.push(`Copy: ${copy}`);
|
|
26963
26986
|
});
|
|
26964
26987
|
const delivered = (result.finalMp4Url ? 1 : 0) + variantUrls.length;
|
|
26965
26988
|
if (orderedHooks > delivered) {
|
|
@@ -29110,7 +29133,7 @@ var CreateServiceImagesInput = z119.object({
|
|
|
29110
29133
|
"en",
|
|
29111
29134
|
"pt"
|
|
29112
29135
|
]).optional().describe("Idioma de los textos de la imagen (por defecto es)."),
|
|
29113
|
-
adCopy: z119.boolean().optional().describe("
|
|
29136
|
+
adCopy: z119.boolean().optional().describe("Compatibilidad con clientes anteriores: el copy para publicar siempre est\xE1 incluido en cada imagen de servicios."),
|
|
29114
29137
|
confirmed: z119.boolean().optional().describe("Solo true despu\xE9s de mostrar el precio y que el usuario acepte. Sin confirmed, solo cotiza y no cobra.")
|
|
29115
29138
|
}).strict();
|
|
29116
29139
|
function serviceImageModel(quality) {
|
|
@@ -29144,7 +29167,7 @@ function registerServiceImageTools(server, api, options = {}) {
|
|
|
29144
29167
|
throw mcp(McpErrorCode.INVALID_INPUT, `${tierError} Usa quality="standard" o otro formato. No se cobr\xF3 nada.`);
|
|
29145
29168
|
}
|
|
29146
29169
|
const language = LANGUAGE_TAGS[input.language ?? "es"];
|
|
29147
|
-
const adCopy =
|
|
29170
|
+
const adCopy = true;
|
|
29148
29171
|
const estimate = await api.postJson("/v1/billing/estimate", {
|
|
29149
29172
|
type: "image-creative",
|
|
29150
29173
|
options: {
|
package/dist/stdio.js
CHANGED
|
@@ -5373,9 +5373,20 @@ var AdCreative = z23.object({
|
|
|
5373
5373
|
/** One-to-one with `variants`: null for ProductMaker-original images and the
|
|
5374
5374
|
* evidence tier for the competitor-reference variant. */
|
|
5375
5375
|
variantSignals: z23.array(ImageWinnerSignal.nullable()).optional(),
|
|
5376
|
+
/** Caption for each delivered service image, aligned with variants. */
|
|
5377
|
+
adCopies: z23.array(z23.string().trim().min(1)).optional(),
|
|
5376
5378
|
createdAt: z23.string().datetime().optional(),
|
|
5377
5379
|
adCopy: z23.string().optional()
|
|
5378
5380
|
}).superRefine((creative, ctx) => {
|
|
5381
|
+
if (creative.adCopies !== void 0 && creative.adCopies.length !== creative.variants?.length) {
|
|
5382
|
+
ctx.addIssue({
|
|
5383
|
+
code: z23.ZodIssueCode.custom,
|
|
5384
|
+
path: [
|
|
5385
|
+
"adCopies"
|
|
5386
|
+
],
|
|
5387
|
+
message: "adCopies must align one-to-one with variants"
|
|
5388
|
+
});
|
|
5389
|
+
}
|
|
5379
5390
|
if (creative.variantSignals !== void 0 && (creative.variants === void 0 || creative.variantSignals.length !== creative.variants.length)) {
|
|
5380
5391
|
ctx.addIssue({
|
|
5381
5392
|
code: z23.ZodIssueCode.custom,
|
|
@@ -5397,6 +5408,7 @@ var ImageCreativeCopy = z23.object({
|
|
|
5397
5408
|
}).partial();
|
|
5398
5409
|
var ImageCreativeVariant = z23.object({
|
|
5399
5410
|
id: z23.string(),
|
|
5411
|
+
adCopy: z23.string().optional(),
|
|
5400
5412
|
url: z23.string().url(),
|
|
5401
5413
|
downloadUrl: z23.string().url().optional()
|
|
5402
5414
|
});
|
|
@@ -19003,7 +19015,7 @@ var PRODUCTMAKER_CAPABILITY_REGISTRY = deepFreeze([
|
|
|
19003
19015
|
], [
|
|
19004
19016
|
"service_landing"
|
|
19005
19017
|
], MCP_ONLY_CHANNEL_EXPOSURE),
|
|
19006
|
-
defineCapability("create_service_images", "
|
|
19018
|
+
defineCapability("create_service_images", "c36653d6744c38aa43cd7ddad34481526651a09590de5bb62d1061e39dd537c3", "credit_consuming", "creative", [
|
|
19007
19019
|
"credit_consuming",
|
|
19008
19020
|
"state_change"
|
|
19009
19021
|
], [
|
|
@@ -22475,7 +22487,7 @@ var ApiClient = class {
|
|
|
22475
22487
|
};
|
|
22476
22488
|
|
|
22477
22489
|
// src/index.ts
|
|
22478
|
-
var MCP_VERSION = "11.5.
|
|
22490
|
+
var MCP_VERSION = "11.5.1";
|
|
22479
22491
|
|
|
22480
22492
|
// src/meta-upload-app.ts
|
|
22481
22493
|
import { readFileSync } from "fs";
|
|
@@ -24255,9 +24267,13 @@ async function fetchTaskOutputs(api, taskId, options) {
|
|
|
24255
24267
|
const variants = raw.adCreative?.variants ?? [];
|
|
24256
24268
|
const hasVariants = variants.some((v) => typeof v === "string");
|
|
24257
24269
|
if (hasVariants) {
|
|
24258
|
-
for (const variant of variants) {
|
|
24270
|
+
for (const [index, variant] of variants.entries()) {
|
|
24271
|
+
const adCopy = raw.adCreative?.adCopies?.[index];
|
|
24259
24272
|
if (typeof variant === "string") images.push({
|
|
24260
|
-
url: variant
|
|
24273
|
+
url: variant,
|
|
24274
|
+
...adCopy ? {
|
|
24275
|
+
adCopy
|
|
24276
|
+
} : {}
|
|
24261
24277
|
});
|
|
24262
24278
|
}
|
|
24263
24279
|
} else if (raw.adCreative?.url) {
|
|
@@ -24296,6 +24312,7 @@ function renderOutputsMarkdown(outputs) {
|
|
|
24296
24312
|
outputs.images.forEach((img, i) => {
|
|
24297
24313
|
parts.push(``);
|
|
24298
24314
|
parts.push(`[\u2B07 Descargar v${i}](${img.url})`);
|
|
24315
|
+
if (img.adCopy) parts.push(`Copy: ${img.adCopy}`);
|
|
24299
24316
|
});
|
|
24300
24317
|
}
|
|
24301
24318
|
if (outputs.adCopy) {
|
|
@@ -25226,6 +25243,8 @@ var AnimatedVideoResultSchema = z113.object({
|
|
|
25226
25243
|
]),
|
|
25227
25244
|
serviceMode: z113.literal("motion_graphics"),
|
|
25228
25245
|
finalMp4Url: z113.string().optional(),
|
|
25246
|
+
adCopy: z113.string().optional(),
|
|
25247
|
+
adCopies: z113.array(z113.string()).optional(),
|
|
25229
25248
|
error: z113.string().optional(),
|
|
25230
25249
|
motionGraphics: z113.object({
|
|
25231
25250
|
stage: MotionGraphicsStageSchema,
|
|
@@ -25338,10 +25357,14 @@ function renderAnimatedVideoStatus(result) {
|
|
|
25338
25357
|
const label = variantUrls.length > 0 ? "Gancho 1" : "Video final";
|
|
25339
25358
|
lines.push(`${label} (MP4): ${result.finalMp4Url}`);
|
|
25340
25359
|
lines.push(`[Descargar ${label.toLowerCase()}](${result.finalMp4Url})`);
|
|
25360
|
+
const copy = result.adCopies?.[0] || result.adCopy;
|
|
25361
|
+
if (copy) lines.push(`Copy: ${copy}`);
|
|
25341
25362
|
}
|
|
25342
25363
|
variantUrls.forEach((url, index) => {
|
|
25343
25364
|
lines.push(`Gancho ${index + 2} (MP4): ${url}`);
|
|
25344
25365
|
lines.push(`[Descargar gancho ${index + 2}](${url})`);
|
|
25366
|
+
const copy = result.adCopies?.[index + 1] || result.adCopy;
|
|
25367
|
+
if (copy) lines.push(`Copy: ${copy}`);
|
|
25345
25368
|
});
|
|
25346
25369
|
const delivered = (result.finalMp4Url ? 1 : 0) + variantUrls.length;
|
|
25347
25370
|
if (orderedHooks > delivered) {
|
|
@@ -27492,7 +27515,7 @@ var CreateServiceImagesInput = z118.object({
|
|
|
27492
27515
|
"en",
|
|
27493
27516
|
"pt"
|
|
27494
27517
|
]).optional().describe("Idioma de los textos de la imagen (por defecto es)."),
|
|
27495
|
-
adCopy: z118.boolean().optional().describe("
|
|
27518
|
+
adCopy: z118.boolean().optional().describe("Compatibilidad con clientes anteriores: el copy para publicar siempre est\xE1 incluido en cada imagen de servicios."),
|
|
27496
27519
|
confirmed: z118.boolean().optional().describe("Solo true despu\xE9s de mostrar el precio y que el usuario acepte. Sin confirmed, solo cotiza y no cobra.")
|
|
27497
27520
|
}).strict();
|
|
27498
27521
|
function serviceImageModel(quality) {
|
|
@@ -27526,7 +27549,7 @@ function registerServiceImageTools(server, api, options = {}) {
|
|
|
27526
27549
|
throw mcp(McpErrorCode.INVALID_INPUT, `${tierError} Usa quality="standard" o otro formato. No se cobr\xF3 nada.`);
|
|
27527
27550
|
}
|
|
27528
27551
|
const language = LANGUAGE_TAGS[input.language ?? "es"];
|
|
27529
|
-
const adCopy =
|
|
27552
|
+
const adCopy = true;
|
|
27530
27553
|
const estimate = await api.postJson("/v1/billing/estimate", {
|
|
27531
27554
|
type: "image-creative",
|
|
27532
27555
|
options: {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@productmaker/mcp",
|
|
3
|
-
"version": "11.5.
|
|
3
|
+
"version": "11.5.1",
|
|
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.",
|