@productmaker/mcp 1.8.0 → 1.9.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.
- package/README.md +1 -1
- package/dist/http.js +16 -3
- package/dist/stdio.js +16 -3
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -120,7 +120,7 @@ The `base64` field was removed. MCP JSON-RPC transports truncate large tool argu
|
|
|
120
120
|
|
|
121
121
|
## Support
|
|
122
122
|
|
|
123
|
-
Setup help and full docs: [productmaker.app/install](https://productmaker.app/install). For account/API key questions:
|
|
123
|
+
Setup help and full docs: [productmaker.app/install](https://productmaker.app/install). For account/API key questions: infoapp@productmaker.app.
|
|
124
124
|
|
|
125
125
|
## License
|
|
126
126
|
|
package/dist/http.js
CHANGED
|
@@ -113,7 +113,7 @@ var ApiClient = class {
|
|
|
113
113
|
};
|
|
114
114
|
|
|
115
115
|
// src/index.ts
|
|
116
|
-
var MCP_VERSION = "1.
|
|
116
|
+
var MCP_VERSION = "1.9.0";
|
|
117
117
|
|
|
118
118
|
// src/tools/tasks.ts
|
|
119
119
|
import { z as z2 } from "zod";
|
|
@@ -533,6 +533,14 @@ var ProductReferenceCandidateGroupingEnum = z.enum([
|
|
|
533
533
|
"different_products",
|
|
534
534
|
"unclear"
|
|
535
535
|
]);
|
|
536
|
+
var GapDurationChoiceMirror = z.object({
|
|
537
|
+
angleIndex: z.number().int().nonnegative(),
|
|
538
|
+
recommendedSec: z.union([
|
|
539
|
+
z.literal(15),
|
|
540
|
+
z.literal(30)
|
|
541
|
+
]),
|
|
542
|
+
estimatedDeltaCredits: z.number().int().nonnegative().optional()
|
|
543
|
+
});
|
|
536
544
|
function buildSelectedImageUrlsHash(urls) {
|
|
537
545
|
const input = [
|
|
538
546
|
...urls
|
|
@@ -1270,7 +1278,12 @@ var StatusForResolveSchema = z2.object({
|
|
|
1270
1278
|
customAngleDraft: z2.string().optional(),
|
|
1271
1279
|
painPointsDraft: z2.string().optional(),
|
|
1272
1280
|
benefitsDraft: z2.string().optional(),
|
|
1273
|
-
featuresDraft: z2.array(z2.string()).optional()
|
|
1281
|
+
featuresDraft: z2.array(z2.string()).optional(),
|
|
1282
|
+
// Informational-only recommendation (see GapDurationChoiceMirror in
|
|
1283
|
+
// shared.ts). Not read by the switch below — v1 has no consent input for
|
|
1284
|
+
// it — mirrored here purely so it survives the parse instead of being
|
|
1285
|
+
// silently stripped by this object's default unknown-key behavior.
|
|
1286
|
+
gapDurationChoice: GapDurationChoiceMirror.optional()
|
|
1274
1287
|
}).optional()
|
|
1275
1288
|
}).passthrough();
|
|
1276
1289
|
var DEFAULT_PRODUCT_TASK_OUTPUTS = [
|
|
@@ -1341,7 +1354,7 @@ function registerTaskTools(server, api, { proxyBaseUrl = null, transport = "http
|
|
|
1341
1354
|
throw translateError(e);
|
|
1342
1355
|
}
|
|
1343
1356
|
});
|
|
1344
|
-
server.tool("get_task_status", 'Devuelve el estado y URLs de outputs de una tarea. Si waitSeconds>0, hace polling hasta que cambie la fase, aparezca `pendingUserAction`, o llegue al timeout (max 120s). Cuando la tarea queda en `done`, la respuesta incluye un segundo bloque markdown con previews inline de las im\xE1genes, links descargables al video MP4 y un enlace a Product Maker para ver el resultado completo.\n\nIMPORTANTE \u2014 `pendingUserAction`: si est\xE1 presente, el pipeline est\xE1 PARADO esperando que el usuario decida algo. Mira el `kind` y llama `resolve_pending_action` con `action: { kind: <mismo kind>, ... }`; sin esto la tarea NUNCA avanza por m\xE1s que esperes. Kinds actuales:\n- `product_reference_confirmation`: el clasificador no est\xE1 seguro si las fotos son variantes del mismo producto o productos distintos. Mu\xE9strale al usuario `targetProductLabel` + `reason`, recoge su respuesta, y usa SOLO valores presentes en `options`.\n- `angle_review_approval`: la IA ya gener\xF3 el \xE1ngulo/revisi\xF3n antes de renderizar. Mu\xE9strale `customAngleDraft`, `painPointsDraft`, `benefitsDraft`, `featuresDraft` si vienen; si no vienen, puedes pedir aprobaci\xF3n general y llamar `resolve_pending_action` con solo `{ kind: "angle_review_approval" }` para aprobar tal cual.\nUse this to check on a task progress; pass waitSeconds for a near-synchronous response.', GetTaskStatusInput.shape, async (input, extra) => {
|
|
1357
|
+
server.tool("get_task_status", 'Devuelve el estado y URLs de outputs de una tarea. Si waitSeconds>0, hace polling hasta que cambie la fase, aparezca `pendingUserAction`, o llegue al timeout (max 120s). Cuando la tarea queda en `done`, la respuesta incluye un segundo bloque markdown con previews inline de las im\xE1genes, links descargables al video MP4 y un enlace a Product Maker para ver el resultado completo.\n\nIMPORTANTE \u2014 `pendingUserAction`: si est\xE1 presente, el pipeline est\xE1 PARADO esperando que el usuario decida algo. Mira el `kind` y llama `resolve_pending_action` con `action: { kind: <mismo kind>, ... }`; sin esto la tarea NUNCA avanza por m\xE1s que esperes. Kinds actuales:\n- `product_reference_confirmation`: el clasificador no est\xE1 seguro si las fotos son variantes del mismo producto o productos distintos. Mu\xE9strale al usuario `targetProductLabel` + `reason`, recoge su respuesta, y usa SOLO valores presentes en `options`.\n- `angle_review_approval`: la IA ya gener\xF3 el \xE1ngulo/revisi\xF3n antes de renderizar. Mu\xE9strale `customAngleDraft`, `painPointsDraft`, `benefitsDraft`, `featuresDraft` si vienen; si no vienen, puedes pedir aprobaci\xF3n general y llamar `resolve_pending_action` con solo `{ kind: "angle_review_approval" }` para aprobar tal cual.\n\nSi ves `gapDurationChoice` (a nivel ra\xEDz de la respuesta, o dentro de `pendingUserAction` cuando el kind es `angle_review_approval`), es solo informativo: indica que el anuncio de referencia dura m\xE1s que la duraci\xF3n cotizada para esta tarea y cu\xE1nto costar\xEDa extenderla a `recommendedSec` segundos (el costo extra viene en `estimatedDeltaCredits`, si est\xE1 disponible), pero el MCP no tiene forma de aceptar ese cambio \u2014 com\xE9ntaselo al usuario y dile que lo active desde la web si le interesa.\nUse this to check on a task progress; pass waitSeconds for a near-synchronous response.', GetTaskStatusInput.shape, async (input, extra) => {
|
|
1345
1358
|
try {
|
|
1346
1359
|
const fetcher = /* @__PURE__ */ __name(() => api.getJson(`/v1/status/${encodeURIComponent(input.taskId)}`), "fetcher");
|
|
1347
1360
|
const signal = extra?.signal;
|
package/dist/stdio.js
CHANGED
|
@@ -110,7 +110,7 @@ var ApiClient = class {
|
|
|
110
110
|
};
|
|
111
111
|
|
|
112
112
|
// src/index.ts
|
|
113
|
-
var MCP_VERSION = "1.
|
|
113
|
+
var MCP_VERSION = "1.9.0";
|
|
114
114
|
|
|
115
115
|
// src/tools/tasks.ts
|
|
116
116
|
import { z as z2 } from "zod";
|
|
@@ -530,6 +530,14 @@ var ProductReferenceCandidateGroupingEnum = z.enum([
|
|
|
530
530
|
"different_products",
|
|
531
531
|
"unclear"
|
|
532
532
|
]);
|
|
533
|
+
var GapDurationChoiceMirror = z.object({
|
|
534
|
+
angleIndex: z.number().int().nonnegative(),
|
|
535
|
+
recommendedSec: z.union([
|
|
536
|
+
z.literal(15),
|
|
537
|
+
z.literal(30)
|
|
538
|
+
]),
|
|
539
|
+
estimatedDeltaCredits: z.number().int().nonnegative().optional()
|
|
540
|
+
});
|
|
533
541
|
function buildSelectedImageUrlsHash(urls) {
|
|
534
542
|
const input = [
|
|
535
543
|
...urls
|
|
@@ -1226,7 +1234,12 @@ var StatusForResolveSchema = z2.object({
|
|
|
1226
1234
|
customAngleDraft: z2.string().optional(),
|
|
1227
1235
|
painPointsDraft: z2.string().optional(),
|
|
1228
1236
|
benefitsDraft: z2.string().optional(),
|
|
1229
|
-
featuresDraft: z2.array(z2.string()).optional()
|
|
1237
|
+
featuresDraft: z2.array(z2.string()).optional(),
|
|
1238
|
+
// Informational-only recommendation (see GapDurationChoiceMirror in
|
|
1239
|
+
// shared.ts). Not read by the switch below — v1 has no consent input for
|
|
1240
|
+
// it — mirrored here purely so it survives the parse instead of being
|
|
1241
|
+
// silently stripped by this object's default unknown-key behavior.
|
|
1242
|
+
gapDurationChoice: GapDurationChoiceMirror.optional()
|
|
1230
1243
|
}).optional()
|
|
1231
1244
|
}).passthrough();
|
|
1232
1245
|
var DEFAULT_PRODUCT_TASK_OUTPUTS = [
|
|
@@ -1297,7 +1310,7 @@ function registerTaskTools(server, api, { proxyBaseUrl = null, transport = "http
|
|
|
1297
1310
|
throw translateError(e);
|
|
1298
1311
|
}
|
|
1299
1312
|
});
|
|
1300
|
-
server.tool("get_task_status", 'Devuelve el estado y URLs de outputs de una tarea. Si waitSeconds>0, hace polling hasta que cambie la fase, aparezca `pendingUserAction`, o llegue al timeout (max 120s). Cuando la tarea queda en `done`, la respuesta incluye un segundo bloque markdown con previews inline de las im\xE1genes, links descargables al video MP4 y un enlace a Product Maker para ver el resultado completo.\n\nIMPORTANTE \u2014 `pendingUserAction`: si est\xE1 presente, el pipeline est\xE1 PARADO esperando que el usuario decida algo. Mira el `kind` y llama `resolve_pending_action` con `action: { kind: <mismo kind>, ... }`; sin esto la tarea NUNCA avanza por m\xE1s que esperes. Kinds actuales:\n- `product_reference_confirmation`: el clasificador no est\xE1 seguro si las fotos son variantes del mismo producto o productos distintos. Mu\xE9strale al usuario `targetProductLabel` + `reason`, recoge su respuesta, y usa SOLO valores presentes en `options`.\n- `angle_review_approval`: la IA ya gener\xF3 el \xE1ngulo/revisi\xF3n antes de renderizar. Mu\xE9strale `customAngleDraft`, `painPointsDraft`, `benefitsDraft`, `featuresDraft` si vienen; si no vienen, puedes pedir aprobaci\xF3n general y llamar `resolve_pending_action` con solo `{ kind: "angle_review_approval" }` para aprobar tal cual.\nUse this to check on a task progress; pass waitSeconds for a near-synchronous response.', GetTaskStatusInput.shape, async (input, extra) => {
|
|
1313
|
+
server.tool("get_task_status", 'Devuelve el estado y URLs de outputs de una tarea. Si waitSeconds>0, hace polling hasta que cambie la fase, aparezca `pendingUserAction`, o llegue al timeout (max 120s). Cuando la tarea queda en `done`, la respuesta incluye un segundo bloque markdown con previews inline de las im\xE1genes, links descargables al video MP4 y un enlace a Product Maker para ver el resultado completo.\n\nIMPORTANTE \u2014 `pendingUserAction`: si est\xE1 presente, el pipeline est\xE1 PARADO esperando que el usuario decida algo. Mira el `kind` y llama `resolve_pending_action` con `action: { kind: <mismo kind>, ... }`; sin esto la tarea NUNCA avanza por m\xE1s que esperes. Kinds actuales:\n- `product_reference_confirmation`: el clasificador no est\xE1 seguro si las fotos son variantes del mismo producto o productos distintos. Mu\xE9strale al usuario `targetProductLabel` + `reason`, recoge su respuesta, y usa SOLO valores presentes en `options`.\n- `angle_review_approval`: la IA ya gener\xF3 el \xE1ngulo/revisi\xF3n antes de renderizar. Mu\xE9strale `customAngleDraft`, `painPointsDraft`, `benefitsDraft`, `featuresDraft` si vienen; si no vienen, puedes pedir aprobaci\xF3n general y llamar `resolve_pending_action` con solo `{ kind: "angle_review_approval" }` para aprobar tal cual.\n\nSi ves `gapDurationChoice` (a nivel ra\xEDz de la respuesta, o dentro de `pendingUserAction` cuando el kind es `angle_review_approval`), es solo informativo: indica que el anuncio de referencia dura m\xE1s que la duraci\xF3n cotizada para esta tarea y cu\xE1nto costar\xEDa extenderla a `recommendedSec` segundos (el costo extra viene en `estimatedDeltaCredits`, si est\xE1 disponible), pero el MCP no tiene forma de aceptar ese cambio \u2014 com\xE9ntaselo al usuario y dile que lo active desde la web si le interesa.\nUse this to check on a task progress; pass waitSeconds for a near-synchronous response.', GetTaskStatusInput.shape, async (input, extra) => {
|
|
1301
1314
|
try {
|
|
1302
1315
|
const fetcher = /* @__PURE__ */ __name(() => api.getJson(`/v1/status/${encodeURIComponent(input.taskId)}`), "fetcher");
|
|
1303
1316
|
const signal = extra?.signal;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@productmaker/mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"private": false,
|
|
6
6
|
"description": "Product Maker MCP server — connect Claude Desktop, Claude Code, ChatGPT, or Gemini to Product Maker AI to generate dropshipping landing pages, UGC videos, and ad creatives, and publish to Shopify and Meta Ads from your AI assistant.",
|
|
@@ -33,9 +33,9 @@
|
|
|
33
33
|
],
|
|
34
34
|
"homepage": "https://productmaker.app/install",
|
|
35
35
|
"bugs": {
|
|
36
|
-
"email": "
|
|
36
|
+
"email": "infoapp@productmaker.app"
|
|
37
37
|
},
|
|
38
|
-
"author": "Product Maker AI <
|
|
38
|
+
"author": "Product Maker AI <infoapp@productmaker.app> (https://productmaker.app)",
|
|
39
39
|
"license": "MIT",
|
|
40
40
|
"bin": {
|
|
41
41
|
"productmaker-mcp": "./dist/stdio.js"
|