@sakupa/mcp 0.7.20 → 0.7.22

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
@@ -129,7 +129,7 @@ var FORBIDDEN_PATH_SEGMENTS = [
129
129
  var ALLOWED_HIDDEN_PATHS = [".well-known/"];
130
130
 
131
131
  // ../core/dist/domain/version.js
132
- var SAKUPA_MCP_VERSION = "0.7.20";
132
+ var SAKUPA_MCP_VERSION = "0.7.22";
133
133
 
134
134
  // ../core/dist/domain/errors.js
135
135
  var HTTP_STATUS = {
@@ -2157,6 +2157,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
2157
2157
  res.currentPeriodStart ? `Current paid period: ${res.currentPeriodStart} -> ${res.currentPeriodEnd ?? "?"}` : void 0,
2158
2158
  res.estimatedUsageTier ? `Estimated usage tier: ${res.estimatedUsageTier}` : void 0,
2159
2159
  res.lastReconciledAt ? `Last usage reconciliation: ${res.lastReconciledAt}` : void 0,
2160
+ res.oneTimeTransferCarry ? `One-time transfer carry: ${res.oneTimeTransferCarry.remainingBytes} bytes remaining (granted ${res.oneTimeTransferCarry.grantedBytes}, expires ${res.oneTimeTransferCarry.expiresAt})` : void 0,
2160
2161
  res.boundHostnames.length > 0 ? `Bound custom domains: ${res.boundHostnames.join(", ")}` : void 0,
2161
2162
  res.risks.pastDue ? "ATTENTION: renewal payment failing \u2014 update the payment method (portal). Serving continues while Stripe retries; if Stripe gives up, the site reverts to free." : void 0
2162
2163
  ].filter((l) => l !== void 0);
@@ -2247,14 +2248,18 @@ Full status:`, res);
2247
2248
  throw new SakupaError("invalid_request", "hostname is required for start");
2248
2249
  }
2249
2250
  const res2 = await ctx.client.recoverDomain({ hostname: args.hostname });
2251
+ const txtShort = shortHostFor(res2.verificationRecord.name, res2.apexDomain);
2250
2252
  return text(
2251
2253
  "domain_recovery_started",
2252
2254
  `Recovery started for ${args.hostname} (apex domain: ${res2.apexDomain}).
2253
2255
 
2254
2256
  Create this DNS record to prove apex-domain control:
2255
- name: ${res2.verificationRecord.name}
2256
- type: ${res2.verificationRecord.type}
2257
- value: ${res2.verificationRecord.value}
2257
+ type: ${res2.verificationRecord.type}
2258
+ host/label: ${txtShort}
2259
+ value: ${res2.verificationRecord.value}
2260
+ full name: ${res2.verificationRecord.name}
2261
+
2262
+ Enter ONLY "${txtShort}" in DNS panels whose host/name field automatically appends ".${res2.apexDomain}". The saved full record must be exactly "${res2.verificationRecord.name}" and must never contain the apex twice.
2258
2263
 
2259
2264
  ${res2.message}
2260
2265
 
@@ -2264,7 +2269,18 @@ After the DNS record resolves, re-run recover with verificationId: "${res2.verif
2264
2269
  {
2265
2270
  verificationId: res2.verificationId,
2266
2271
  apexDomain: res2.apexDomain,
2267
- verificationRecord: res2.verificationRecord,
2272
+ verificationRecord: {
2273
+ ...res2.verificationRecord,
2274
+ shortHost: txtShort
2275
+ },
2276
+ requiredRecords: [
2277
+ {
2278
+ type: res2.verificationRecord.type,
2279
+ shortHost: txtShort,
2280
+ name: res2.verificationRecord.name,
2281
+ value: res2.verificationRecord.value
2282
+ }
2283
+ ],
2268
2284
  revokesPreviousCredentialsByDefault: true
2269
2285
  },
2270
2286
  "waiting_user"
@@ -2494,7 +2510,7 @@ function registerBillingTools(server, baseCtx) {
2494
2510
  outcome: "waiting_user",
2495
2511
  resultCode: "stripe_plan_change_confirmation_required",
2496
2512
  operationId: args.operationId,
2497
- summary: `Stripe confirmation link created for ${result.currentPlan} -> ${result.targetPlan}; the subscription has NOT changed yet.`,
2513
+ summary: `Stripe confirmation link created for ${result.currentPlan} -> ${result.targetPlan}; the subscription has NOT changed yet. ` + (result.direction === "upgrade" ? "Confirming starts a new paid month immediately at the full target price; Sakupa applies the plan only after invoice payment and carries unused transfer once." : "The downgrade is scheduled for the end of the already-paid period."),
2498
2514
  data: { result },
2499
2515
  userAction: {
2500
2516
  type: "open_url",
@@ -2732,8 +2748,9 @@ frustrated, proactively offer report: it files the problem into Sakupa's ticket
2732
2748
  alert stream, and you should attach your own factual account via agentContext.
2733
2749
 
2734
2750
  Present every step as Sakupa's own: never attribute DNS, certificates or hosting to
2735
- underlying infrastructure vendors in front of the user. Relay DNS record names and values
2736
- VERBATIM (some point into Sakupa's managed certificate network) without naming vendors.
2751
+ underlying infrastructure vendors in front of the user. Relay DNS record values and full
2752
+ names verbatim, but use the tool's shortHost value for a DNS panel host/name field that
2753
+ automatically appends the apex domain. The saved FQDN must never contain the apex twice.
2737
2754
 
2738
2755
  Safety boundaries:
2739
2756
  - Static output only: no SSR, API routes, middleware, server actions, databases or online builds.
package/dist/index.js CHANGED
@@ -124,7 +124,7 @@ var FORBIDDEN_PATH_SEGMENTS = [
124
124
  var ALLOWED_HIDDEN_PATHS = [".well-known/"];
125
125
 
126
126
  // ../core/dist/domain/version.js
127
- var SAKUPA_MCP_VERSION = "0.7.20";
127
+ var SAKUPA_MCP_VERSION = "0.7.22";
128
128
 
129
129
  // ../core/dist/domain/errors.js
130
130
  var HTTP_STATUS = {
@@ -2223,6 +2223,7 @@ When the user says the TXT is set, run bind "status". It verifies ownership and
2223
2223
  res.currentPeriodStart ? `Current paid period: ${res.currentPeriodStart} -> ${res.currentPeriodEnd ?? "?"}` : void 0,
2224
2224
  res.estimatedUsageTier ? `Estimated usage tier: ${res.estimatedUsageTier}` : void 0,
2225
2225
  res.lastReconciledAt ? `Last usage reconciliation: ${res.lastReconciledAt}` : void 0,
2226
+ res.oneTimeTransferCarry ? `One-time transfer carry: ${res.oneTimeTransferCarry.remainingBytes} bytes remaining (granted ${res.oneTimeTransferCarry.grantedBytes}, expires ${res.oneTimeTransferCarry.expiresAt})` : void 0,
2226
2227
  res.boundHostnames.length > 0 ? `Bound custom domains: ${res.boundHostnames.join(", ")}` : void 0,
2227
2228
  res.risks.pastDue ? "ATTENTION: renewal payment failing \u2014 update the payment method (portal). Serving continues while Stripe retries; if Stripe gives up, the site reverts to free." : void 0
2228
2229
  ].filter((l) => l !== void 0);
@@ -2313,14 +2314,18 @@ Full status:`, res);
2313
2314
  throw new SakupaError("invalid_request", "hostname is required for start");
2314
2315
  }
2315
2316
  const res2 = await ctx.client.recoverDomain({ hostname: args.hostname });
2317
+ const txtShort = shortHostFor(res2.verificationRecord.name, res2.apexDomain);
2316
2318
  return text(
2317
2319
  "domain_recovery_started",
2318
2320
  `Recovery started for ${args.hostname} (apex domain: ${res2.apexDomain}).
2319
2321
 
2320
2322
  Create this DNS record to prove apex-domain control:
2321
- name: ${res2.verificationRecord.name}
2322
- type: ${res2.verificationRecord.type}
2323
- value: ${res2.verificationRecord.value}
2323
+ type: ${res2.verificationRecord.type}
2324
+ host/label: ${txtShort}
2325
+ value: ${res2.verificationRecord.value}
2326
+ full name: ${res2.verificationRecord.name}
2327
+
2328
+ Enter ONLY "${txtShort}" in DNS panels whose host/name field automatically appends ".${res2.apexDomain}". The saved full record must be exactly "${res2.verificationRecord.name}" and must never contain the apex twice.
2324
2329
 
2325
2330
  ${res2.message}
2326
2331
 
@@ -2330,7 +2335,18 @@ After the DNS record resolves, re-run recover with verificationId: "${res2.verif
2330
2335
  {
2331
2336
  verificationId: res2.verificationId,
2332
2337
  apexDomain: res2.apexDomain,
2333
- verificationRecord: res2.verificationRecord,
2338
+ verificationRecord: {
2339
+ ...res2.verificationRecord,
2340
+ shortHost: txtShort
2341
+ },
2342
+ requiredRecords: [
2343
+ {
2344
+ type: res2.verificationRecord.type,
2345
+ shortHost: txtShort,
2346
+ name: res2.verificationRecord.name,
2347
+ value: res2.verificationRecord.value
2348
+ }
2349
+ ],
2334
2350
  revokesPreviousCredentialsByDefault: true
2335
2351
  },
2336
2352
  "waiting_user"
@@ -2664,7 +2680,7 @@ function registerBillingTools(server, baseCtx) {
2664
2680
  outcome: "waiting_user",
2665
2681
  resultCode: "stripe_plan_change_confirmation_required",
2666
2682
  operationId: args.operationId,
2667
- summary: `Stripe confirmation link created for ${result.currentPlan} -> ${result.targetPlan}; the subscription has NOT changed yet.`,
2683
+ summary: `Stripe confirmation link created for ${result.currentPlan} -> ${result.targetPlan}; the subscription has NOT changed yet. ` + (result.direction === "upgrade" ? "Confirming starts a new paid month immediately at the full target price; Sakupa applies the plan only after invoice payment and carries unused transfer once." : "The downgrade is scheduled for the end of the already-paid period."),
2668
2684
  data: { result },
2669
2685
  userAction: {
2670
2686
  type: "open_url",
@@ -2727,8 +2743,9 @@ frustrated, proactively offer report: it files the problem into Sakupa's ticket
2727
2743
  alert stream, and you should attach your own factual account via agentContext.
2728
2744
 
2729
2745
  Present every step as Sakupa's own: never attribute DNS, certificates or hosting to
2730
- underlying infrastructure vendors in front of the user. Relay DNS record names and values
2731
- VERBATIM (some point into Sakupa's managed certificate network) without naming vendors.
2746
+ underlying infrastructure vendors in front of the user. Relay DNS record values and full
2747
+ names verbatim, but use the tool's shortHost value for a DNS panel host/name field that
2748
+ automatically appends the apex domain. The saved FQDN must never contain the apex twice.
2732
2749
 
2733
2750
  Safety boundaries:
2734
2751
  - Static output only: no SSR, API routes, middleware, server actions, databases or online builds.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakupa/mcp",
3
- "version": "0.7.20",
3
+ "version": "0.7.22",
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",