@sakupa/mcp 0.7.50 → 0.7.52

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/bin.js CHANGED
@@ -266,6 +266,8 @@ var PAID_SITE_MAX_TOTAL_BYTES = 2 * 1024 * 1024 * 1024;
266
266
  var MAX_FILE_COUNT = 5e3;
267
267
  var MAX_SINGLE_FILE_BYTES = 25 * 1024 * 1024;
268
268
  var FREE_REQUESTS_PER_MINUTE = 240;
269
+ var FREE_TRANSFER_BYTES_PER_DAY = 1024 * 1024 * 1024;
270
+ var USAGE_ROLLUP_MAX_DELAY_SECONDS = 5 * 60;
269
271
  var LOAD_BUDGET_ADVISORY = {
270
272
  maxFiles: 50,
271
273
  maxTotalBytes: 5 * 1024 * 1024,
@@ -400,7 +402,7 @@ function isFreeSiteAllowanceNetworkReference(value) {
400
402
  }
401
403
 
402
404
  // ../core/dist/domain/version.js
403
- var SAKUPA_MCP_VERSION = "0.7.50";
405
+ var SAKUPA_MCP_VERSION = "0.7.52";
404
406
 
405
407
  // ../core/dist/domain/errors.js
406
408
  var HTTP_STATUS = {
@@ -3329,6 +3331,7 @@ function structuredToolResult(envelope) {
3329
3331
  "nextActions",
3330
3332
  "operationId",
3331
3333
  "embedded URLs, paths, IDs, code tokens, tool names, arguments, DNS values, field names, amounts and exact timestamps",
3334
+ "complete relative paths including every directory segment; never reduce a path to its basename",
3332
3335
  ...envelope.presentation?.preserveExactFields ?? []
3333
3336
  ],
3334
3337
  mustTellUser: [
@@ -3347,13 +3350,15 @@ function structuredToolResult(envelope) {
3347
3350
  "Answer the current user question instead of mechanically dumping every returned field. Explain relevant technical terms in plain language while retaining the exact term when it helps accuracy.",
3348
3351
  "Do not ask the user to copy or run tool arguments that this AI can execute. Use exact nextActions internally after any required user choice.",
3349
3352
  "Translate human-readable explanations into the language the user is using and present dates and sizes in locally understandable form alongside exact values when precision matters.",
3353
+ "Preserve every returned path verbatim, including all directory segments. For example, .sakupa/site.json must never be shortened to site.json.",
3354
+ "A subscription-backed site stays online only while its subscription remains active. Never describe that duration as permanent or long-term, and never say a subscription is bound to the site.",
3350
3355
  `Every ISO timestamp ending in Z is UTC, never the user local time. Never present it without an explicit UTC label. If the user time zone is known, convert it and show the local date, local clock time, and zone name or UTC offset, while also preserving the exact UTC timestamp. The MCP client runtime reports ${clientTimeZone}; use that only when it represents the user's timezone. If the user time zone is unknown, label the exact value as UTC and do not guess.`,
3351
3356
  "Do not proactively mention a normal Production environment. Always disclose Test or unknown/non-production environments prominently.",
3352
3357
  ...envelope.presentation?.agentInstructions ?? []
3353
3358
  ]
3354
3359
  };
3355
3360
  const structuredEnvelope = { ...envelope, presentation };
3356
- const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
3361
+ const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. Preserve every path verbatim with all directory segments: never shorten .sakupa/site.json to site.json. A subscription-backed site stays online only while its subscription remains active; never call that permanent or long-term, and never say a subscription is bound to the site. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
3357
3362
  return {
3358
3363
  content: [{ type: "text", text: `${envelope.summary}
3359
3364
 
@@ -4547,7 +4552,7 @@ Next action: ${analysis.suggestedNextAction}`,
4547
4552
  Files uploaded: ${uploaded2} (${finalized2.totalBytes} bytes)
4548
4553
  ` + (finalized2.expiresAt ? `Expiry deadline: ${timestampForAgent(finalized2.expiresAt)}
4549
4554
  ` : "") + `
4550
- This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. The management credential was saved to .sakupa/site.json \u2014 keep that file: it is the only way to manage this site.
4555
+ This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. This is conditional on the subscription remaining active: do NOT describe the site as permanent or long-term, and do NOT say the subscription is bound to the site. The management credential was saved to the exact relative path .sakupa/site.json \u2014 preserve this complete path verbatim and never shorten it to site.json. Keep that file: it is the only way to manage this site.
4551
4556
  ` + credentialGitReminder(ctx.projectDir) + (finalized2.warnings.length > 0 ? `
4552
4557
  Warnings:
4553
4558
  ${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
@@ -4562,6 +4567,13 @@ ${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
4562
4567
  totalBytes: finalized2.totalBytes,
4563
4568
  warnings: finalized2.warnings,
4564
4569
  credentialStoredLocally: true,
4570
+ credentialPath: ".sakupa/site.json",
4571
+ subscriptionServingRule: {
4572
+ siteStaysOnlineOnlyWhileSubscriptionActive: true,
4573
+ freeSiteExpirySuppressedWhileSubscriptionActive: true,
4574
+ permanentOrLongTermDescriptionAllowed: false,
4575
+ subscriptionBindingDescriptionAllowed: false
4576
+ },
4565
4577
  projectDir: ctx.projectDir,
4566
4578
  environment: environmentFor(ctx.apiBaseUrl)
4567
4579
  }
@@ -4653,6 +4665,13 @@ Optional security recommendation: this management credential was created at ${ti
4653
4665
  filesUploaded: uploaded,
4654
4666
  totalBytes: finalized.totalBytes,
4655
4667
  warnings: finalized.warnings,
4668
+ credentialPath: ".sakupa/site.json",
4669
+ subscriptionServingRule: {
4670
+ siteStaysOnlineOnlyWhileSubscriptionActive: true,
4671
+ freeSiteExpirySuppressedWhileSubscriptionActive: true,
4672
+ permanentOrLongTermDescriptionAllowed: false,
4673
+ subscriptionBindingDescriptionAllowed: false
4674
+ },
4656
4675
  credentialSecurity: credentialSecurity ? {
4657
4676
  credentialCreatedAt: credentialSecurity.credentialCreatedAt,
4658
4677
  ageSeconds: credentialSecurity.ageSeconds,
@@ -4919,7 +4938,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
4919
4938
  server.registerTool(
4920
4939
  "billing",
4921
4940
  {
4922
- description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled usage, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
4941
+ description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled paid usage or current free-site fair-use telemetry, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
4923
4942
  outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
4924
4943
  annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
4925
4944
  inputSchema: {}
@@ -4938,7 +4957,10 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
4938
4957
  res.cancelAtPeriodEnd === true ? `Renewal: CANCELED \u2014 the site reverts to free at ${res.cancellationEffectiveAt ? timestampForAgent(res.cancellationEffectiveAt) : res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "the end of the already-paid month"}` : res.renewalPlan ? `Next renewal plan: ${res.renewalPlan} (JPY ${res.renewalMonthlyPriceJpy ?? tierPriceJpy(res.renewalPlan)}/month)` + (res.renewalEffectiveAt ? `, effective ${timestampForAgent(res.renewalEffectiveAt)}` : " (unchanged)") : res.cancelAtPeriodEnd === false ? "Renewal cancellation: no" : void 0,
4939
4958
  res.periodEntitlementPlan ? `Current paid entitlement: ${res.periodEntitlementPlan}` : void 0,
4940
4959
  res.currentPeriodStart ? `Current paid period: ${timestampForAgent(res.currentPeriodStart)} -> ${res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "?"}` : void 0,
4941
- `Usage state: ${res.usageState}`,
4960
+ res.mode === "free" ? `Usage state: ${res.usageState} \u2014 this describes free-site telemetry availability, not unlimited or unmeasured traffic. Free previews are measured and fair-use limited.` : `Usage state: ${res.usageState}`,
4961
+ res.freeUsage ? `Current free-site recorded usage for UTC day ${timestampForAgent(res.freeUsage.windowStart)} -> ${timestampForAgent(res.freeUsage.windowEnd)}: storage ${res.freeUsage.recordedUsage.storageBytes} bytes; transfer ${res.freeUsage.recordedUsage.transferBytes} bytes; requests ${res.freeUsage.recordedUsage.requests}.` : void 0,
4962
+ res.freeUsage ? `Free-site fair-use limits: transfer ${res.freeUsage.limits.transferBytesPerDay} bytes per UTC day; requests ${res.freeUsage.limits.requestsPerMinute} per minute per site.` : void 0,
4963
+ res.freeUsage ? `Free-site measurement delay: up to ${res.freeUsage.measurementDelaySecondsMax} seconds; ` + (res.freeUsage.recordedThrough ? `latest flushed counter ${timestampForAgent(res.freeUsage.recordedThrough)}.` : "no flushed request counter yet.") : void 0,
4942
4964
  res.currentPeriodUsage ? `Current usage: storage ${res.currentPeriodUsage.storageBytes} bytes; transfer ${res.currentPeriodUsage.transferBytes} bytes; requests ${res.currentPeriodUsage.requests}` : void 0,
4943
4965
  res.currentPeriodCountedTransferBytes !== void 0 ? `Transfer counted against current plan: ${res.currentPeriodCountedTransferBytes} bytes` : void 0,
4944
4966
  res.currentPlanLimits ? `Current plan limits: storage ${res.currentPlanLimits.storageBytes} bytes; transfer ${res.currentPlanLimits.transferBytes} bytes; requests ${res.currentPlanLimits.requests}` : void 0,
package/dist/index.js CHANGED
@@ -11,6 +11,8 @@ var PAID_SITE_MAX_TOTAL_BYTES = 2 * 1024 * 1024 * 1024;
11
11
  var MAX_FILE_COUNT = 5e3;
12
12
  var MAX_SINGLE_FILE_BYTES = 25 * 1024 * 1024;
13
13
  var FREE_REQUESTS_PER_MINUTE = 240;
14
+ var FREE_TRANSFER_BYTES_PER_DAY = 1024 * 1024 * 1024;
15
+ var USAGE_ROLLUP_MAX_DELAY_SECONDS = 5 * 60;
14
16
  var LOAD_BUDGET_ADVISORY = {
15
17
  maxFiles: 50,
16
18
  maxTotalBytes: 5 * 1024 * 1024,
@@ -145,7 +147,7 @@ function isFreeSiteAllowanceNetworkReference(value) {
145
147
  }
146
148
 
147
149
  // ../core/dist/domain/version.js
148
- var SAKUPA_MCP_VERSION = "0.7.50";
150
+ var SAKUPA_MCP_VERSION = "0.7.52";
149
151
 
150
152
  // ../core/dist/domain/errors.js
151
153
  var HTTP_STATUS = {
@@ -2139,6 +2141,7 @@ function structuredToolResult(envelope) {
2139
2141
  "nextActions",
2140
2142
  "operationId",
2141
2143
  "embedded URLs, paths, IDs, code tokens, tool names, arguments, DNS values, field names, amounts and exact timestamps",
2144
+ "complete relative paths including every directory segment; never reduce a path to its basename",
2142
2145
  ...envelope.presentation?.preserveExactFields ?? []
2143
2146
  ],
2144
2147
  mustTellUser: [
@@ -2157,13 +2160,15 @@ function structuredToolResult(envelope) {
2157
2160
  "Answer the current user question instead of mechanically dumping every returned field. Explain relevant technical terms in plain language while retaining the exact term when it helps accuracy.",
2158
2161
  "Do not ask the user to copy or run tool arguments that this AI can execute. Use exact nextActions internally after any required user choice.",
2159
2162
  "Translate human-readable explanations into the language the user is using and present dates and sizes in locally understandable form alongside exact values when precision matters.",
2163
+ "Preserve every returned path verbatim, including all directory segments. For example, .sakupa/site.json must never be shortened to site.json.",
2164
+ "A subscription-backed site stays online only while its subscription remains active. Never describe that duration as permanent or long-term, and never say a subscription is bound to the site.",
2160
2165
  `Every ISO timestamp ending in Z is UTC, never the user local time. Never present it without an explicit UTC label. If the user time zone is known, convert it and show the local date, local clock time, and zone name or UTC offset, while also preserving the exact UTC timestamp. The MCP client runtime reports ${clientTimeZone}; use that only when it represents the user's timezone. If the user time zone is unknown, label the exact value as UTC and do not guess.`,
2161
2166
  "Do not proactively mention a normal Production environment. Always disclose Test or unknown/non-production environments prominently.",
2162
2167
  ...envelope.presentation?.agentInstructions ?? []
2163
2168
  ]
2164
2169
  };
2165
2170
  const structuredEnvelope = { ...envelope, presentation };
2166
- const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
2171
+ const presentationFallback = `AGENT PRESENTATION CONTRACT: Retain every technical fact below for reasoning and exact follow-up. Tell the user the requested result, required next step, and every material charge, deadline, security or irreversible consequence. Answer only the current question instead of dumping all fields; explain relevant technical terms in plain language while keeping exact terms available. Translate human-readable explanations into the user's language, but preserve URLs, paths, IDs, tool names, arguments, DNS values, field names, amounts and exact timestamps. Preserve every path verbatim with all directory segments: never shorten .sakupa/site.json to site.json. A subscription-backed site stays online only while its subscription remains active; never call that permanent or long-term, and never say a subscription is bound to the site. A timestamp ending in Z is UTC, never local time: label UTC explicitly and, when the user time zone is known, also show the converted local date/time with its zone name or UTC offset. Never show an unlabeled timestamp or guess an unknown time zone. The MCP client runtime timezone is ${clientTimeZone}; use it only when it represents the user timezone. Do not proactively show a normal Production environment; always disclose Test or unknown environments. Never ask the user to run exact tool arguments that this AI can execute.`;
2167
2172
  return {
2168
2173
  content: [{ type: "text", text: `${envelope.summary}
2169
2174
 
@@ -4663,7 +4668,7 @@ Next action: ${analysis.suggestedNextAction}`,
4663
4668
  Files uploaded: ${uploaded2} (${finalized2.totalBytes} bytes)
4664
4669
  ` + (finalized2.expiresAt ? `Expiry deadline: ${timestampForAgent(finalized2.expiresAt)}
4665
4670
  ` : "") + `
4666
- This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. The management credential was saved to .sakupa/site.json \u2014 keep that file: it is the only way to manage this site.
4671
+ This is a FREE temporary preview: it stays live for ${FREE_SITE_TTL_HOURS} hours. Deploying again or calling refresh extends the validity; while a subscription remains active, this URL stays live without the free-site expiry. This is conditional on the subscription remaining active: do NOT describe the site as permanent or long-term, and do NOT say the subscription is bound to the site. The management credential was saved to the exact relative path .sakupa/site.json \u2014 preserve this complete path verbatim and never shorten it to site.json. Keep that file: it is the only way to manage this site.
4667
4672
  ` + credentialGitReminder(ctx.projectDir) + (finalized2.warnings.length > 0 ? `
4668
4673
  Warnings:
4669
4674
  ${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
@@ -4678,6 +4683,13 @@ ${JSON.stringify(finalized2.warnings, null, 2)}` : ""),
4678
4683
  totalBytes: finalized2.totalBytes,
4679
4684
  warnings: finalized2.warnings,
4680
4685
  credentialStoredLocally: true,
4686
+ credentialPath: ".sakupa/site.json",
4687
+ subscriptionServingRule: {
4688
+ siteStaysOnlineOnlyWhileSubscriptionActive: true,
4689
+ freeSiteExpirySuppressedWhileSubscriptionActive: true,
4690
+ permanentOrLongTermDescriptionAllowed: false,
4691
+ subscriptionBindingDescriptionAllowed: false
4692
+ },
4681
4693
  projectDir: ctx.projectDir,
4682
4694
  environment: environmentFor(ctx.apiBaseUrl)
4683
4695
  }
@@ -4769,6 +4781,13 @@ Optional security recommendation: this management credential was created at ${ti
4769
4781
  filesUploaded: uploaded,
4770
4782
  totalBytes: finalized.totalBytes,
4771
4783
  warnings: finalized.warnings,
4784
+ credentialPath: ".sakupa/site.json",
4785
+ subscriptionServingRule: {
4786
+ siteStaysOnlineOnlyWhileSubscriptionActive: true,
4787
+ freeSiteExpirySuppressedWhileSubscriptionActive: true,
4788
+ permanentOrLongTermDescriptionAllowed: false,
4789
+ subscriptionBindingDescriptionAllowed: false
4790
+ },
4772
4791
  credentialSecurity: credentialSecurity ? {
4773
4792
  credentialCreatedAt: credentialSecurity.credentialCreatedAt,
4774
4793
  ageSeconds: credentialSecurity.ageSeconds,
@@ -5035,7 +5054,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
5035
5054
  server.registerTool(
5036
5055
  "billing",
5037
5056
  {
5038
- description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled usage, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
5057
+ description: "Return the sole authoritative source for this site's hosting subscription: current plan, next renewal plan or cancellation, effective time, payment state, current paid entitlement, reconciled paid usage or current free-site fair-use telemetry, estimated usage tier, bound custom domains and risks. Owner-only (uses the credential in .sakupa/site.json).",
5039
5058
  outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
5040
5059
  annotations: { readOnlyHint: true, destructiveHint: false, openWorldHint: true },
5041
5060
  inputSchema: {}
@@ -5054,7 +5073,10 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
5054
5073
  res.cancelAtPeriodEnd === true ? `Renewal: CANCELED \u2014 the site reverts to free at ${res.cancellationEffectiveAt ? timestampForAgent(res.cancellationEffectiveAt) : res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "the end of the already-paid month"}` : res.renewalPlan ? `Next renewal plan: ${res.renewalPlan} (JPY ${res.renewalMonthlyPriceJpy ?? tierPriceJpy(res.renewalPlan)}/month)` + (res.renewalEffectiveAt ? `, effective ${timestampForAgent(res.renewalEffectiveAt)}` : " (unchanged)") : res.cancelAtPeriodEnd === false ? "Renewal cancellation: no" : void 0,
5055
5074
  res.periodEntitlementPlan ? `Current paid entitlement: ${res.periodEntitlementPlan}` : void 0,
5056
5075
  res.currentPeriodStart ? `Current paid period: ${timestampForAgent(res.currentPeriodStart)} -> ${res.currentPeriodEnd ? timestampForAgent(res.currentPeriodEnd) : "?"}` : void 0,
5057
- `Usage state: ${res.usageState}`,
5076
+ res.mode === "free" ? `Usage state: ${res.usageState} \u2014 this describes free-site telemetry availability, not unlimited or unmeasured traffic. Free previews are measured and fair-use limited.` : `Usage state: ${res.usageState}`,
5077
+ res.freeUsage ? `Current free-site recorded usage for UTC day ${timestampForAgent(res.freeUsage.windowStart)} -> ${timestampForAgent(res.freeUsage.windowEnd)}: storage ${res.freeUsage.recordedUsage.storageBytes} bytes; transfer ${res.freeUsage.recordedUsage.transferBytes} bytes; requests ${res.freeUsage.recordedUsage.requests}.` : void 0,
5078
+ res.freeUsage ? `Free-site fair-use limits: transfer ${res.freeUsage.limits.transferBytesPerDay} bytes per UTC day; requests ${res.freeUsage.limits.requestsPerMinute} per minute per site.` : void 0,
5079
+ res.freeUsage ? `Free-site measurement delay: up to ${res.freeUsage.measurementDelaySecondsMax} seconds; ` + (res.freeUsage.recordedThrough ? `latest flushed counter ${timestampForAgent(res.freeUsage.recordedThrough)}.` : "no flushed request counter yet.") : void 0,
5058
5080
  res.currentPeriodUsage ? `Current usage: storage ${res.currentPeriodUsage.storageBytes} bytes; transfer ${res.currentPeriodUsage.transferBytes} bytes; requests ${res.currentPeriodUsage.requests}` : void 0,
5059
5081
  res.currentPeriodCountedTransferBytes !== void 0 ? `Transfer counted against current plan: ${res.currentPeriodCountedTransferBytes} bytes` : void 0,
5060
5082
  res.currentPlanLimits ? `Current plan limits: storage ${res.currentPlanLimits.storageBytes} bytes; transfer ${res.currentPlanLimits.transferBytes} bytes; requests ${res.currentPlanLimits.requests}` : void 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakupa/mcp",
3
- "version": "0.7.50",
3
+ "version": "0.7.52",
4
4
  "description": "Sakupa MCP server: publish AI-made static sites from your AI tool. AI-made pages, live in seconds.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",