@productmaker/mcp 9.0.0 → 9.0.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/dist/http.js +88 -18
- package/dist/stdio.js +88 -18
- package/package.json +1 -1
package/dist/http.js
CHANGED
|
@@ -13912,7 +13912,7 @@ var CAPABILITY_MODEL_GUIDANCE = {
|
|
|
13912
13912
|
"mes en curso"
|
|
13913
13913
|
],
|
|
13914
13914
|
disclosures: [
|
|
13915
|
-
"
|
|
13915
|
+
"ventas, costos o publicidad desconocidos: utilidad INCOMPLETA"
|
|
13916
13916
|
]
|
|
13917
13917
|
},
|
|
13918
13918
|
sync_shopify_orders: {
|
|
@@ -13988,7 +13988,7 @@ var CAPABILITY_MODEL_GUIDANCE = {
|
|
|
13988
13988
|
"es gasto de anuncios: usa set_ad_spend"
|
|
13989
13989
|
],
|
|
13990
13990
|
defaults: [
|
|
13991
|
-
"mes
|
|
13991
|
+
"mes de la operaci\xF3n; misma etiqueta REEMPLAZA el total compartido y conserva el reparto"
|
|
13992
13992
|
],
|
|
13993
13993
|
disclosures: [
|
|
13994
13994
|
"requiere confirmaci\xF3n; sin gastos escritos la utilidad sale mas alta"
|
|
@@ -14318,6 +14318,73 @@ var LinkableCampaignsResponseSchema = z66.object({
|
|
|
14318
14318
|
|
|
14319
14319
|
// ../../packages/types/src/finance-operation.ts
|
|
14320
14320
|
import { z as z67 } from "zod";
|
|
14321
|
+
|
|
14322
|
+
// ../../packages/types/src/dropi-countries.ts
|
|
14323
|
+
var DROPI_COUNTRY_CODES = [
|
|
14324
|
+
"CO",
|
|
14325
|
+
"EC",
|
|
14326
|
+
"VE",
|
|
14327
|
+
"MX",
|
|
14328
|
+
"PE",
|
|
14329
|
+
"PA",
|
|
14330
|
+
"PY",
|
|
14331
|
+
"GT",
|
|
14332
|
+
"CL",
|
|
14333
|
+
"AR",
|
|
14334
|
+
"CR"
|
|
14335
|
+
];
|
|
14336
|
+
|
|
14337
|
+
// ../../packages/types/src/finance-country-timezones.ts
|
|
14338
|
+
var FINANCE_COUNTRY_TIME_ZONES = Object.freeze({
|
|
14339
|
+
US: "America/New_York",
|
|
14340
|
+
CA: "America/Toronto",
|
|
14341
|
+
BZ: "America/Belize",
|
|
14342
|
+
SV: "America/El_Salvador",
|
|
14343
|
+
HN: "America/Tegucigalpa",
|
|
14344
|
+
NI: "America/Managua",
|
|
14345
|
+
CU: "America/Havana",
|
|
14346
|
+
DO: "America/Santo_Domingo",
|
|
14347
|
+
HT: "America/Port-au-Prince",
|
|
14348
|
+
JM: "America/Jamaica",
|
|
14349
|
+
PR: "America/Puerto_Rico",
|
|
14350
|
+
TT: "America/Port_of_Spain",
|
|
14351
|
+
BO: "America/La_Paz",
|
|
14352
|
+
BR: "America/Sao_Paulo",
|
|
14353
|
+
UY: "America/Montevideo",
|
|
14354
|
+
ES: "Europe/Madrid",
|
|
14355
|
+
FR: "Europe/Paris",
|
|
14356
|
+
DE: "Europe/Berlin",
|
|
14357
|
+
IT: "Europe/Rome",
|
|
14358
|
+
PT: "Europe/Lisbon",
|
|
14359
|
+
NL: "Europe/Amsterdam",
|
|
14360
|
+
BE: "Europe/Brussels",
|
|
14361
|
+
AT: "Europe/Vienna",
|
|
14362
|
+
IE: "Europe/Dublin",
|
|
14363
|
+
LU: "Europe/Luxembourg",
|
|
14364
|
+
GB: "Europe/London",
|
|
14365
|
+
CH: "Europe/Zurich",
|
|
14366
|
+
SE: "Europe/Stockholm",
|
|
14367
|
+
NO: "Europe/Oslo",
|
|
14368
|
+
DK: "Europe/Copenhagen",
|
|
14369
|
+
FI: "Europe/Helsinki",
|
|
14370
|
+
IS: "Atlantic/Reykjavik",
|
|
14371
|
+
PL: "Europe/Warsaw",
|
|
14372
|
+
CZ: "Europe/Prague",
|
|
14373
|
+
HU: "Europe/Budapest",
|
|
14374
|
+
RO: "Europe/Bucharest",
|
|
14375
|
+
BG: "Europe/Sofia",
|
|
14376
|
+
HR: "Europe/Zagreb",
|
|
14377
|
+
SI: "Europe/Ljubljana",
|
|
14378
|
+
SK: "Europe/Bratislava",
|
|
14379
|
+
GR: "Europe/Athens",
|
|
14380
|
+
MT: "Europe/Malta",
|
|
14381
|
+
CY: "Asia/Nicosia",
|
|
14382
|
+
EE: "Europe/Tallinn",
|
|
14383
|
+
LV: "Europe/Riga",
|
|
14384
|
+
LT: "Europe/Vilnius"
|
|
14385
|
+
});
|
|
14386
|
+
|
|
14387
|
+
// ../../packages/types/src/finance-operation.ts
|
|
14321
14388
|
var CreateFinanceOperationSchema = z67.object({
|
|
14322
14389
|
countryCode: z67.string().length(2).toUpperCase(),
|
|
14323
14390
|
/** Cómo la llama ella. Vacío ⇒ se usa el nombre del país. */
|
|
@@ -14342,6 +14409,7 @@ var MonthlyPLQuerySchema = z67.object({
|
|
|
14342
14409
|
var RESERVED_EXPENSE_LABEL_PREFIX = "__ad_spend__";
|
|
14343
14410
|
var isReservedExpenseLabel = /* @__PURE__ */ __name((label) => label.trim().startsWith(RESERVED_EXPENSE_LABEL_PREFIX), "isReservedExpenseLabel");
|
|
14344
14411
|
var SaveMonthlyExpenseSchema = z67.object({
|
|
14412
|
+
operationId: z67.string().uuid().optional(),
|
|
14345
14413
|
month: z67.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional(),
|
|
14346
14414
|
label: z67.string().trim().min(1).max(80).refine((label) => !isReservedExpenseLabel(label), {
|
|
14347
14415
|
message: "reserved_expense_label"
|
|
@@ -14351,13 +14419,14 @@ var SaveMonthlyExpenseSchema = z67.object({
|
|
|
14351
14419
|
allocations: z67.array(z67.object({
|
|
14352
14420
|
operationId: z67.string().uuid(),
|
|
14353
14421
|
sharePct: z67.number().int().min(1).max(100)
|
|
14354
|
-
})).min(1).refine((allocations) => allocations.reduce((sum, one) => sum + one.sharePct, 0)
|
|
14422
|
+
})).min(1).refine((allocations) => allocations.reduce((sum, one) => sum + one.sharePct, 0) <= 100, {
|
|
14355
14423
|
message: "allocations_must_sum_to_100"
|
|
14356
14424
|
}).refine((allocations) => new Set(allocations.map((one) => one.operationId)).size === allocations.length, {
|
|
14357
14425
|
message: "duplicate_operation_in_allocations"
|
|
14358
14426
|
}).optional()
|
|
14359
14427
|
}).strict();
|
|
14360
14428
|
var DeleteMonthlyExpenseSchema = z67.object({
|
|
14429
|
+
operationId: z67.string().uuid().optional(),
|
|
14361
14430
|
month: z67.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/),
|
|
14362
14431
|
label: z67.string().trim().min(1).max(80).refine((label) => !isReservedExpenseLabel(label), {
|
|
14363
14432
|
message: "reserved_expense_label"
|
|
@@ -14369,6 +14438,7 @@ var SetAdSpendSchema = z67.object({
|
|
|
14369
14438
|
amount: z67.number().finite().min(0).nullable()
|
|
14370
14439
|
}).strict();
|
|
14371
14440
|
var MonthlyExpensesQuerySchema = z67.object({
|
|
14441
|
+
operationId: z67.string().uuid().optional(),
|
|
14372
14442
|
month: z67.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional()
|
|
14373
14443
|
}).strict();
|
|
14374
14444
|
|
|
@@ -18080,10 +18150,16 @@ var RegenerateVideoScriptCapabilityRequest = z80.object({
|
|
|
18080
18150
|
|
|
18081
18151
|
// ../../packages/types/src/dropi-financial.ts
|
|
18082
18152
|
import { z as z81 } from "zod";
|
|
18153
|
+
var DropiCountrySchema = z81.enum(DROPI_COUNTRY_CODES);
|
|
18154
|
+
var DropiCountryQuerySchema = z81.object({
|
|
18155
|
+
countryCode: DropiCountrySchema.default("CO")
|
|
18156
|
+
}).strict();
|
|
18083
18157
|
var ConnectDropiFinancialSchema = z81.object({
|
|
18158
|
+
countryCode: DropiCountrySchema.default("CO"),
|
|
18084
18159
|
integrationKey: z81.string().trim().min(1).max(4096).regex(/^[\x21-\x7e]+$/)
|
|
18085
18160
|
}).strict();
|
|
18086
18161
|
var SyncDropiFinancialSchema = z81.object({
|
|
18162
|
+
countryCode: DropiCountrySchema.optional(),
|
|
18087
18163
|
operationId: z81.string().uuid().optional(),
|
|
18088
18164
|
since: z81.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
18089
18165
|
until: z81.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional()
|
|
@@ -18091,7 +18167,8 @@ var SyncDropiFinancialSchema = z81.object({
|
|
|
18091
18167
|
var DropiFinancialStatusSchema = z81.object({
|
|
18092
18168
|
enabled: z81.boolean(),
|
|
18093
18169
|
connected: z81.boolean(),
|
|
18094
|
-
countryCode:
|
|
18170
|
+
countryCode: DropiCountrySchema,
|
|
18171
|
+
enabledCountries: z81.array(DropiCountrySchema).optional(),
|
|
18095
18172
|
environment: z81.enum([
|
|
18096
18173
|
"sandbox",
|
|
18097
18174
|
"production"
|
|
@@ -19803,7 +19880,7 @@ var ApiClient = class {
|
|
|
19803
19880
|
};
|
|
19804
19881
|
|
|
19805
19882
|
// src/index.ts
|
|
19806
|
-
var MCP_VERSION = "9.0.
|
|
19883
|
+
var MCP_VERSION = "9.0.1";
|
|
19807
19884
|
|
|
19808
19885
|
// src/meta-upload-app.ts
|
|
19809
19886
|
import { readFileSync } from "fs";
|
|
@@ -27458,7 +27535,7 @@ function registerProductControlTools(server, api, { transport = "http" } = {}) {
|
|
|
27458
27535
|
}
|
|
27459
27536
|
});
|
|
27460
27537
|
server.registerTool("get_finances", {
|
|
27461
|
-
description: getFinancesGuidance.summary + ' Contesta la pregunta que de verdad importa --- \xABeste negocio gana plata?\xBB --- con el mes armado: ventas totales y entregadas, fletes, costo de los productos, utilidad bruta, publicidad, gastos fijos y utilidad NETA. Esa utilidad es ANTES de impuestos y hay que decirlo asi: el contador es un gasto mas, no un calculo nuestro. Trae tambien los porcentajes contra sus metas. Si `costsKnown` viene en `false`, esos pedidos llegaron de una fuente que NO sabe cuanto costaron \u2014la tienda, o la API del proveedor\u2014 y la utilidad BRUTA esta incompleta: no es que el producto salga gratis. Si `adSpendKnown` viene en `false`, la publicidad NO se pudo leer y la utilidad esta INCOMPLETA: dilo antes de que alguien celebre un mes que perdio plata. `adSpendSource: "user"` significa que ella corrigio la cifra a mano, y eso se revisa distinto de una leida. Si `unconfirmedExpenses` es mayor que cero, ese monto viene heredado del mes pasado y ella no lo ha revisado. Es READ-ONLY: nunca pausa ni modifica una campana.',
|
|
27538
|
+
description: getFinancesGuidance.summary + ' Contesta la pregunta que de verdad importa --- \xABeste negocio gana plata?\xBB --- con el mes armado: ventas totales y entregadas, fletes, costo de los productos, utilidad bruta, publicidad, gastos fijos y utilidad NETA. Esa utilidad es ANTES de impuestos y hay que decirlo asi: el contador es un gasto mas, no un calculo nuestro. Trae tambien los porcentajes contra sus metas. Si `deliveredSalesKnown` no es true, faltan importes de ventas entregadas: la utilidad y los m\xE1rgenes no est\xE1n completos. `grossSalesKnown` distinto de true indica ventas totales parciales. Si `costsKnown` viene en `false`, esos pedidos llegaron de una fuente que NO sabe cuanto costaron \u2014la tienda, o la API del proveedor\u2014 y la utilidad BRUTA esta incompleta: no es que el producto salga gratis. Si `adSpendKnown` viene en `false`, la publicidad NO se pudo leer y la utilidad esta INCOMPLETA: dilo antes de que alguien celebre un mes que perdio plata. `adSpendSource: "user"` significa que ella corrigio la cifra a mano, y eso se revisa distinto de una leida. Si `unconfirmedExpenses` es mayor que cero, ese monto viene heredado del mes pasado y ella no lo ha revisado. Es READ-ONLY: nunca pausa ni modifica una campana.',
|
|
27462
27539
|
inputSchema: GetFinancesInput.shape,
|
|
27463
27540
|
annotations: READS_INTERNAL
|
|
27464
27541
|
}, async (input) => {
|
|
@@ -27545,23 +27622,16 @@ function registerProductControlTools(server, api, { transport = "http" } = {}) {
|
|
|
27545
27622
|
}
|
|
27546
27623
|
});
|
|
27547
27624
|
server.registerTool("set_monthly_expense", {
|
|
27548
|
-
description: setMonthlyExpenseGuidance.summary + " Es un gasto FIJO: arriendo, sueldos, contador, plataformas \u2014 lo que se paga venda o no. Escribir la misma etiqueta otra vez REEMPLAZA el monto, no suma otro gasto. Sin gastos fijos escritos, la utilidad del mes sale siempre M\xC1S ALTA de lo que es, y ese es el error que nadie reclama. No lo uses para el gasto en anuncios: eso es set_ad_spend.",
|
|
27625
|
+
description: setMonthlyExpenseGuidance.summary + " El importe indicado es el TOTAL del gasto compartido existente; la parte de la operaci\xF3n se calcula conservando el reparto. Es un gasto FIJO: arriendo, sueldos, contador, plataformas \u2014 lo que se paga venda o no. Escribir la misma etiqueta otra vez REEMPLAZA el monto, no suma otro gasto. Sin gastos fijos escritos, la utilidad del mes sale siempre M\xC1S ALTA de lo que es, y ese es el error que nadie reclama. No lo uses para el gasto en anuncios: eso es set_ad_spend.",
|
|
27549
27626
|
inputSchema: SetMonthlyExpenseInput.shape,
|
|
27550
27627
|
annotations: OVERWRITES_INTERNAL
|
|
27551
27628
|
}, async (input) => {
|
|
27552
27629
|
try {
|
|
27553
|
-
const month = input.month ?? (/* @__PURE__ */ new Date()).toISOString().slice(0, 7);
|
|
27554
|
-
const operationId = input.operationId ?? (await api.getJson("/v1/product-control/operations"))[0]?.id;
|
|
27555
27630
|
return asText(await api.putJson("/v1/product-control/expenses", {
|
|
27556
|
-
month,
|
|
27631
|
+
month: input.month,
|
|
27632
|
+
operationId: input.operationId,
|
|
27557
27633
|
label: input.label,
|
|
27558
|
-
amount: input.amount
|
|
27559
|
-
allocations: operationId ? [
|
|
27560
|
-
{
|
|
27561
|
-
operationId,
|
|
27562
|
-
sharePct: 100
|
|
27563
|
-
}
|
|
27564
|
-
] : void 0
|
|
27634
|
+
amount: input.amount
|
|
27565
27635
|
}));
|
|
27566
27636
|
} catch (error) {
|
|
27567
27637
|
throw translateError(error);
|
|
@@ -27574,7 +27644,7 @@ function registerProductControlTools(server, api, { transport = "http" } = {}) {
|
|
|
27574
27644
|
}, async (input) => {
|
|
27575
27645
|
try {
|
|
27576
27646
|
return asText(await api.putJson("/v1/product-control/ad-spend", {
|
|
27577
|
-
month: input.month
|
|
27647
|
+
month: input.month,
|
|
27578
27648
|
operationId: input.operationId,
|
|
27579
27649
|
amount: input.amount
|
|
27580
27650
|
}));
|
package/dist/stdio.js
CHANGED
|
@@ -13934,7 +13934,7 @@ var CAPABILITY_MODEL_GUIDANCE = {
|
|
|
13934
13934
|
"mes en curso"
|
|
13935
13935
|
],
|
|
13936
13936
|
disclosures: [
|
|
13937
|
-
"
|
|
13937
|
+
"ventas, costos o publicidad desconocidos: utilidad INCOMPLETA"
|
|
13938
13938
|
]
|
|
13939
13939
|
},
|
|
13940
13940
|
sync_shopify_orders: {
|
|
@@ -14010,7 +14010,7 @@ var CAPABILITY_MODEL_GUIDANCE = {
|
|
|
14010
14010
|
"es gasto de anuncios: usa set_ad_spend"
|
|
14011
14011
|
],
|
|
14012
14012
|
defaults: [
|
|
14013
|
-
"mes
|
|
14013
|
+
"mes de la operaci\xF3n; misma etiqueta REEMPLAZA el total compartido y conserva el reparto"
|
|
14014
14014
|
],
|
|
14015
14015
|
disclosures: [
|
|
14016
14016
|
"requiere confirmaci\xF3n; sin gastos escritos la utilidad sale mas alta"
|
|
@@ -14340,6 +14340,73 @@ var LinkableCampaignsResponseSchema = z66.object({
|
|
|
14340
14340
|
|
|
14341
14341
|
// ../../packages/types/src/finance-operation.ts
|
|
14342
14342
|
import { z as z67 } from "zod";
|
|
14343
|
+
|
|
14344
|
+
// ../../packages/types/src/dropi-countries.ts
|
|
14345
|
+
var DROPI_COUNTRY_CODES = [
|
|
14346
|
+
"CO",
|
|
14347
|
+
"EC",
|
|
14348
|
+
"VE",
|
|
14349
|
+
"MX",
|
|
14350
|
+
"PE",
|
|
14351
|
+
"PA",
|
|
14352
|
+
"PY",
|
|
14353
|
+
"GT",
|
|
14354
|
+
"CL",
|
|
14355
|
+
"AR",
|
|
14356
|
+
"CR"
|
|
14357
|
+
];
|
|
14358
|
+
|
|
14359
|
+
// ../../packages/types/src/finance-country-timezones.ts
|
|
14360
|
+
var FINANCE_COUNTRY_TIME_ZONES = Object.freeze({
|
|
14361
|
+
US: "America/New_York",
|
|
14362
|
+
CA: "America/Toronto",
|
|
14363
|
+
BZ: "America/Belize",
|
|
14364
|
+
SV: "America/El_Salvador",
|
|
14365
|
+
HN: "America/Tegucigalpa",
|
|
14366
|
+
NI: "America/Managua",
|
|
14367
|
+
CU: "America/Havana",
|
|
14368
|
+
DO: "America/Santo_Domingo",
|
|
14369
|
+
HT: "America/Port-au-Prince",
|
|
14370
|
+
JM: "America/Jamaica",
|
|
14371
|
+
PR: "America/Puerto_Rico",
|
|
14372
|
+
TT: "America/Port_of_Spain",
|
|
14373
|
+
BO: "America/La_Paz",
|
|
14374
|
+
BR: "America/Sao_Paulo",
|
|
14375
|
+
UY: "America/Montevideo",
|
|
14376
|
+
ES: "Europe/Madrid",
|
|
14377
|
+
FR: "Europe/Paris",
|
|
14378
|
+
DE: "Europe/Berlin",
|
|
14379
|
+
IT: "Europe/Rome",
|
|
14380
|
+
PT: "Europe/Lisbon",
|
|
14381
|
+
NL: "Europe/Amsterdam",
|
|
14382
|
+
BE: "Europe/Brussels",
|
|
14383
|
+
AT: "Europe/Vienna",
|
|
14384
|
+
IE: "Europe/Dublin",
|
|
14385
|
+
LU: "Europe/Luxembourg",
|
|
14386
|
+
GB: "Europe/London",
|
|
14387
|
+
CH: "Europe/Zurich",
|
|
14388
|
+
SE: "Europe/Stockholm",
|
|
14389
|
+
NO: "Europe/Oslo",
|
|
14390
|
+
DK: "Europe/Copenhagen",
|
|
14391
|
+
FI: "Europe/Helsinki",
|
|
14392
|
+
IS: "Atlantic/Reykjavik",
|
|
14393
|
+
PL: "Europe/Warsaw",
|
|
14394
|
+
CZ: "Europe/Prague",
|
|
14395
|
+
HU: "Europe/Budapest",
|
|
14396
|
+
RO: "Europe/Bucharest",
|
|
14397
|
+
BG: "Europe/Sofia",
|
|
14398
|
+
HR: "Europe/Zagreb",
|
|
14399
|
+
SI: "Europe/Ljubljana",
|
|
14400
|
+
SK: "Europe/Bratislava",
|
|
14401
|
+
GR: "Europe/Athens",
|
|
14402
|
+
MT: "Europe/Malta",
|
|
14403
|
+
CY: "Asia/Nicosia",
|
|
14404
|
+
EE: "Europe/Tallinn",
|
|
14405
|
+
LV: "Europe/Riga",
|
|
14406
|
+
LT: "Europe/Vilnius"
|
|
14407
|
+
});
|
|
14408
|
+
|
|
14409
|
+
// ../../packages/types/src/finance-operation.ts
|
|
14343
14410
|
var CreateFinanceOperationSchema = z67.object({
|
|
14344
14411
|
countryCode: z67.string().length(2).toUpperCase(),
|
|
14345
14412
|
/** Cómo la llama ella. Vacío ⇒ se usa el nombre del país. */
|
|
@@ -14364,6 +14431,7 @@ var MonthlyPLQuerySchema = z67.object({
|
|
|
14364
14431
|
var RESERVED_EXPENSE_LABEL_PREFIX = "__ad_spend__";
|
|
14365
14432
|
var isReservedExpenseLabel = /* @__PURE__ */ __name((label) => label.trim().startsWith(RESERVED_EXPENSE_LABEL_PREFIX), "isReservedExpenseLabel");
|
|
14366
14433
|
var SaveMonthlyExpenseSchema = z67.object({
|
|
14434
|
+
operationId: z67.string().uuid().optional(),
|
|
14367
14435
|
month: z67.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional(),
|
|
14368
14436
|
label: z67.string().trim().min(1).max(80).refine((label) => !isReservedExpenseLabel(label), {
|
|
14369
14437
|
message: "reserved_expense_label"
|
|
@@ -14373,13 +14441,14 @@ var SaveMonthlyExpenseSchema = z67.object({
|
|
|
14373
14441
|
allocations: z67.array(z67.object({
|
|
14374
14442
|
operationId: z67.string().uuid(),
|
|
14375
14443
|
sharePct: z67.number().int().min(1).max(100)
|
|
14376
|
-
})).min(1).refine((allocations) => allocations.reduce((sum, one) => sum + one.sharePct, 0)
|
|
14444
|
+
})).min(1).refine((allocations) => allocations.reduce((sum, one) => sum + one.sharePct, 0) <= 100, {
|
|
14377
14445
|
message: "allocations_must_sum_to_100"
|
|
14378
14446
|
}).refine((allocations) => new Set(allocations.map((one) => one.operationId)).size === allocations.length, {
|
|
14379
14447
|
message: "duplicate_operation_in_allocations"
|
|
14380
14448
|
}).optional()
|
|
14381
14449
|
}).strict();
|
|
14382
14450
|
var DeleteMonthlyExpenseSchema = z67.object({
|
|
14451
|
+
operationId: z67.string().uuid().optional(),
|
|
14383
14452
|
month: z67.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/),
|
|
14384
14453
|
label: z67.string().trim().min(1).max(80).refine((label) => !isReservedExpenseLabel(label), {
|
|
14385
14454
|
message: "reserved_expense_label"
|
|
@@ -14391,6 +14460,7 @@ var SetAdSpendSchema = z67.object({
|
|
|
14391
14460
|
amount: z67.number().finite().min(0).nullable()
|
|
14392
14461
|
}).strict();
|
|
14393
14462
|
var MonthlyExpensesQuerySchema = z67.object({
|
|
14463
|
+
operationId: z67.string().uuid().optional(),
|
|
14394
14464
|
month: z67.string().regex(/^\d{4}-(0[1-9]|1[0-2])$/).optional()
|
|
14395
14465
|
}).strict();
|
|
14396
14466
|
|
|
@@ -17848,10 +17918,16 @@ var RegenerateVideoScriptCapabilityRequest = z80.object({
|
|
|
17848
17918
|
|
|
17849
17919
|
// ../../packages/types/src/dropi-financial.ts
|
|
17850
17920
|
import { z as z81 } from "zod";
|
|
17921
|
+
var DropiCountrySchema = z81.enum(DROPI_COUNTRY_CODES);
|
|
17922
|
+
var DropiCountryQuerySchema = z81.object({
|
|
17923
|
+
countryCode: DropiCountrySchema.default("CO")
|
|
17924
|
+
}).strict();
|
|
17851
17925
|
var ConnectDropiFinancialSchema = z81.object({
|
|
17926
|
+
countryCode: DropiCountrySchema.default("CO"),
|
|
17852
17927
|
integrationKey: z81.string().trim().min(1).max(4096).regex(/^[\x21-\x7e]+$/)
|
|
17853
17928
|
}).strict();
|
|
17854
17929
|
var SyncDropiFinancialSchema = z81.object({
|
|
17930
|
+
countryCode: DropiCountrySchema.optional(),
|
|
17855
17931
|
operationId: z81.string().uuid().optional(),
|
|
17856
17932
|
since: z81.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional(),
|
|
17857
17933
|
until: z81.string().regex(/^\d{4}-\d{2}-\d{2}$/).optional()
|
|
@@ -17859,7 +17935,8 @@ var SyncDropiFinancialSchema = z81.object({
|
|
|
17859
17935
|
var DropiFinancialStatusSchema = z81.object({
|
|
17860
17936
|
enabled: z81.boolean(),
|
|
17861
17937
|
connected: z81.boolean(),
|
|
17862
|
-
countryCode:
|
|
17938
|
+
countryCode: DropiCountrySchema,
|
|
17939
|
+
enabledCountries: z81.array(DropiCountrySchema).optional(),
|
|
17863
17940
|
environment: z81.enum([
|
|
17864
17941
|
"sandbox",
|
|
17865
17942
|
"production"
|
|
@@ -18135,7 +18212,7 @@ var ApiClient = class {
|
|
|
18135
18212
|
};
|
|
18136
18213
|
|
|
18137
18214
|
// src/index.ts
|
|
18138
|
-
var MCP_VERSION = "9.0.
|
|
18215
|
+
var MCP_VERSION = "9.0.1";
|
|
18139
18216
|
|
|
18140
18217
|
// src/meta-upload-app.ts
|
|
18141
18218
|
import { readFileSync } from "fs";
|
|
@@ -25843,7 +25920,7 @@ function registerProductControlTools(server, api, { transport = "http" } = {}) {
|
|
|
25843
25920
|
}
|
|
25844
25921
|
});
|
|
25845
25922
|
server.registerTool("get_finances", {
|
|
25846
|
-
description: getFinancesGuidance.summary + ' Contesta la pregunta que de verdad importa --- \xABeste negocio gana plata?\xBB --- con el mes armado: ventas totales y entregadas, fletes, costo de los productos, utilidad bruta, publicidad, gastos fijos y utilidad NETA. Esa utilidad es ANTES de impuestos y hay que decirlo asi: el contador es un gasto mas, no un calculo nuestro. Trae tambien los porcentajes contra sus metas. Si `costsKnown` viene en `false`, esos pedidos llegaron de una fuente que NO sabe cuanto costaron \u2014la tienda, o la API del proveedor\u2014 y la utilidad BRUTA esta incompleta: no es que el producto salga gratis. Si `adSpendKnown` viene en `false`, la publicidad NO se pudo leer y la utilidad esta INCOMPLETA: dilo antes de que alguien celebre un mes que perdio plata. `adSpendSource: "user"` significa que ella corrigio la cifra a mano, y eso se revisa distinto de una leida. Si `unconfirmedExpenses` es mayor que cero, ese monto viene heredado del mes pasado y ella no lo ha revisado. Es READ-ONLY: nunca pausa ni modifica una campana.',
|
|
25923
|
+
description: getFinancesGuidance.summary + ' Contesta la pregunta que de verdad importa --- \xABeste negocio gana plata?\xBB --- con el mes armado: ventas totales y entregadas, fletes, costo de los productos, utilidad bruta, publicidad, gastos fijos y utilidad NETA. Esa utilidad es ANTES de impuestos y hay que decirlo asi: el contador es un gasto mas, no un calculo nuestro. Trae tambien los porcentajes contra sus metas. Si `deliveredSalesKnown` no es true, faltan importes de ventas entregadas: la utilidad y los m\xE1rgenes no est\xE1n completos. `grossSalesKnown` distinto de true indica ventas totales parciales. Si `costsKnown` viene en `false`, esos pedidos llegaron de una fuente que NO sabe cuanto costaron \u2014la tienda, o la API del proveedor\u2014 y la utilidad BRUTA esta incompleta: no es que el producto salga gratis. Si `adSpendKnown` viene en `false`, la publicidad NO se pudo leer y la utilidad esta INCOMPLETA: dilo antes de que alguien celebre un mes que perdio plata. `adSpendSource: "user"` significa que ella corrigio la cifra a mano, y eso se revisa distinto de una leida. Si `unconfirmedExpenses` es mayor que cero, ese monto viene heredado del mes pasado y ella no lo ha revisado. Es READ-ONLY: nunca pausa ni modifica una campana.',
|
|
25847
25924
|
inputSchema: GetFinancesInput.shape,
|
|
25848
25925
|
annotations: READS_INTERNAL
|
|
25849
25926
|
}, async (input) => {
|
|
@@ -25930,23 +26007,16 @@ function registerProductControlTools(server, api, { transport = "http" } = {}) {
|
|
|
25930
26007
|
}
|
|
25931
26008
|
});
|
|
25932
26009
|
server.registerTool("set_monthly_expense", {
|
|
25933
|
-
description: setMonthlyExpenseGuidance.summary + " Es un gasto FIJO: arriendo, sueldos, contador, plataformas \u2014 lo que se paga venda o no. Escribir la misma etiqueta otra vez REEMPLAZA el monto, no suma otro gasto. Sin gastos fijos escritos, la utilidad del mes sale siempre M\xC1S ALTA de lo que es, y ese es el error que nadie reclama. No lo uses para el gasto en anuncios: eso es set_ad_spend.",
|
|
26010
|
+
description: setMonthlyExpenseGuidance.summary + " El importe indicado es el TOTAL del gasto compartido existente; la parte de la operaci\xF3n se calcula conservando el reparto. Es un gasto FIJO: arriendo, sueldos, contador, plataformas \u2014 lo que se paga venda o no. Escribir la misma etiqueta otra vez REEMPLAZA el monto, no suma otro gasto. Sin gastos fijos escritos, la utilidad del mes sale siempre M\xC1S ALTA de lo que es, y ese es el error que nadie reclama. No lo uses para el gasto en anuncios: eso es set_ad_spend.",
|
|
25934
26011
|
inputSchema: SetMonthlyExpenseInput.shape,
|
|
25935
26012
|
annotations: OVERWRITES_INTERNAL
|
|
25936
26013
|
}, async (input) => {
|
|
25937
26014
|
try {
|
|
25938
|
-
const month = input.month ?? (/* @__PURE__ */ new Date()).toISOString().slice(0, 7);
|
|
25939
|
-
const operationId = input.operationId ?? (await api.getJson("/v1/product-control/operations"))[0]?.id;
|
|
25940
26015
|
return asText(await api.putJson("/v1/product-control/expenses", {
|
|
25941
|
-
month,
|
|
26016
|
+
month: input.month,
|
|
26017
|
+
operationId: input.operationId,
|
|
25942
26018
|
label: input.label,
|
|
25943
|
-
amount: input.amount
|
|
25944
|
-
allocations: operationId ? [
|
|
25945
|
-
{
|
|
25946
|
-
operationId,
|
|
25947
|
-
sharePct: 100
|
|
25948
|
-
}
|
|
25949
|
-
] : void 0
|
|
26019
|
+
amount: input.amount
|
|
25950
26020
|
}));
|
|
25951
26021
|
} catch (error) {
|
|
25952
26022
|
throw translateError(error);
|
|
@@ -25959,7 +26029,7 @@ function registerProductControlTools(server, api, { transport = "http" } = {}) {
|
|
|
25959
26029
|
}, async (input) => {
|
|
25960
26030
|
try {
|
|
25961
26031
|
return asText(await api.putJson("/v1/product-control/ad-spend", {
|
|
25962
|
-
month: input.month
|
|
26032
|
+
month: input.month,
|
|
25963
26033
|
operationId: input.operationId,
|
|
25964
26034
|
amount: input.amount
|
|
25965
26035
|
}));
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@productmaker/mcp",
|
|
3
|
-
"version": "9.0.
|
|
3
|
+
"version": "9.0.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.",
|