@sakupa/mcp 0.7.54 → 0.7.55

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
@@ -402,7 +402,7 @@ function isFreeSiteAllowanceNetworkReference(value) {
402
402
  }
403
403
 
404
404
  // ../core/dist/domain/version.js
405
- var SAKUPA_MCP_VERSION = "0.7.54";
405
+ var SAKUPA_MCP_VERSION = "0.7.55";
406
406
 
407
407
  // ../core/dist/domain/errors.js
408
408
  var HTTP_STATUS = {
@@ -4820,7 +4820,7 @@ Once Stripe confirms payment and Sakupa synchronizes the subscription, the curre
4820
4820
  server.registerTool(
4821
4821
  "bind",
4822
4822
  {
4823
- description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the subscription-backed ${previewHostPattern} URL keeps working alongside it while the subscription is active. The binding unit is the APEX domain: binding example.com reserves routes for example.com and www.example.com, but ONLY www is required and judged for activation; the naked apex is optional because many DNS providers cannot point it. One apex TXT verification covers both, and one site binds at most ONE apex domain \u2014 a second domain needs a second subscribed site. Requires an ACTIVE subscription (subscribe). Ownership is proven ONLY by DNS control of the apex \u2014 payment never grants ownership, and bindings are ALWAYS challengeable: whoever proves CURRENT DNS control takes the domain, even from an existing binding (the displaced site keeps its subscription, content and subscription-backed Sakupa URL). Unverified requests expire after 72 hours. Call again with action "status" to check progress.`,
4823
+ description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the subscription-backed ${previewHostPattern} URL keeps working alongside it while the subscription is active. The binding unit is the APEX domain: binding example.com reserves routes for example.com and www.example.com, but ONLY www is required and judged for activation; the naked apex is optional because many DNS providers cannot point it. One apex TXT verification covers both. A site has one FINAL apex domain; starting a different apex begins a zero-downtime switch and the previous domain remains until the new www is live. The www CNAME must remain while bound. Requires an ACTIVE subscription (subscribe). Ownership is proven ONLY by DNS control of the apex \u2014 payment never grants ownership, and bindings are ALWAYS challengeable: whoever proves CURRENT DNS control takes the domain, even from an existing binding (the displaced site keeps its subscription, content and subscription-backed Sakupa URL). Unverified requests expire after 72 hours. Call again with action "status" to check progress.`,
4824
4824
  outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
4825
4825
  annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
4826
4826
  inputSchema: {
@@ -4855,7 +4855,8 @@ Once Stripe confirms payment and Sakupa synchronizes the subscription, the curre
4855
4855
  return text(
4856
4856
  res2.bindingStatus === "active" ? "domain_binding_active" : res2.bindingStatus === "provisioning" ? "domain_binding_provisioning" : "domain_verification_pending",
4857
4857
  `Domain binding status for ${apex2}: ${res2.status}
4858
- ${res2.message}` + (manualProviderRecheckRequired ? `
4858
+ ${res2.message}
4859
+ The serving CNAME www.${apex2} \u2192 ${res2.servingTarget} must remain for as long as this domain is bound.` + (manualProviderRecheckRequired ? `
4859
4860
 
4860
4861
  ${customerRecheckInstruction}` : "") + "\n\n" + renderChecklistBlock(
4861
4862
  diag,
@@ -4873,6 +4874,7 @@ ${customerRecheckInstruction}` : "") + "\n\n" + renderChecklistBlock(
4873
4874
  apexResolves,
4874
4875
  apexRequired: false,
4875
4876
  requiredServingHostname: `www.${apex2}`,
4877
+ requiredCnameMustRemainWhileBound: true,
4876
4878
  optionalApexHostname: apex2,
4877
4879
  automaticRetries: 0,
4878
4880
  manualRecheckOnly: true,
@@ -4924,13 +4926,14 @@ STEP 1 of 2 \u2014 prove ownership. Add ONE record:
4924
4926
 
4925
4927
  Host is the SHORT form: most panels append the domain automatically (the saved record must NOT show ${apex} twice in one name). Ownership comes ONLY from DNS control; paying never grants it. The first verified request wins and this challenge expires after 72 hours.
4926
4928
 
4927
- When the user says the TXT is set, run bind "status". It verifies ownership and then hands back STEP 2 \u2014 a SINGLE www CNAME (there are NO certificate TXT records; HTTPS validates automatically over that CNAME). Each "status" checks the previous step and, unless something is misconfigured, advances to the next \u2014 so run it whenever the user reports a step done, NOT on a timer. Any later session can resume with action "status" alone; the verificationId is optional.`,
4929
+ When the user says the TXT is set, run bind "status". It verifies ownership and then hands back STEP 2 \u2014 a SINGLE www CNAME (there are NO certificate TXT records; HTTPS validates automatically over that CNAME). That CNAME must remain for as long as the domain stays bound to Sakupa. Each "status" checks the previous step and, unless something is misconfigured, advances to the next \u2014 so run it whenever the user reports a step done, NOT on a timer. Any later session can resume with action "status" alone; the verificationId is optional.`,
4928
4930
  {
4929
4931
  verificationId: res.verificationId,
4930
4932
  apexDomain: apex,
4931
4933
  includedHostnames: res.includedHostnames,
4932
4934
  apexRequired: false,
4933
4935
  requiredServingHostname: `www.${apex}`,
4936
+ requiredCnameMustRemainWhileBound: true,
4934
4937
  optionalApexHostname: apex,
4935
4938
  verificationRecord: res.verificationRecord,
4936
4939
  servingTarget: res.servingTarget,
@@ -5768,7 +5771,12 @@ var TOOL_MANUALS = {
5768
5771
  preconditions: "A subscribed site and DNS control.",
5769
5772
  parameterNames: ["action", "hostname", "verificationId"],
5770
5773
  parameters: "Action plus hostname or verificationId as returned by the prior step.",
5771
- warnings: ["www is mandatory; the apex is optional.", "Copy DNS values verbatim."],
5774
+ warnings: [
5775
+ "www is mandatory; the apex is optional.",
5776
+ "Copy DNS values verbatim.",
5777
+ "The www CNAME must remain for as long as the domain stays bound; only the ownership TXT is temporary.",
5778
+ "If the domain already belongs to this site, use bind status instead of starting a new challenge."
5779
+ ],
5772
5780
  nextStep: "Follow the returned DNS checklist and call bind status/check."
5773
5781
  },
5774
5782
  billing: {
package/dist/index.js CHANGED
@@ -147,7 +147,7 @@ function isFreeSiteAllowanceNetworkReference(value) {
147
147
  }
148
148
 
149
149
  // ../core/dist/domain/version.js
150
- var SAKUPA_MCP_VERSION = "0.7.54";
150
+ var SAKUPA_MCP_VERSION = "0.7.55";
151
151
 
152
152
  // ../core/dist/domain/errors.js
153
153
  var HTTP_STATUS = {
@@ -4936,7 +4936,7 @@ Once Stripe confirms payment and Sakupa synchronizes the subscription, the curre
4936
4936
  server.registerTool(
4937
4937
  "bind",
4938
4938
  {
4939
- description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the subscription-backed ${previewHostPattern} URL keeps working alongside it while the subscription is active. The binding unit is the APEX domain: binding example.com reserves routes for example.com and www.example.com, but ONLY www is required and judged for activation; the naked apex is optional because many DNS providers cannot point it. One apex TXT verification covers both, and one site binds at most ONE apex domain \u2014 a second domain needs a second subscribed site. Requires an ACTIVE subscription (subscribe). Ownership is proven ONLY by DNS control of the apex \u2014 payment never grants ownership, and bindings are ALWAYS challengeable: whoever proves CURRENT DNS control takes the domain, even from an existing binding (the displaced site keeps its subscription, content and subscription-backed Sakupa URL). Unverified requests expire after 72 hours. Call again with action "status" to check progress.`,
4939
+ description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the subscription-backed ${previewHostPattern} URL keeps working alongside it while the subscription is active. The binding unit is the APEX domain: binding example.com reserves routes for example.com and www.example.com, but ONLY www is required and judged for activation; the naked apex is optional because many DNS providers cannot point it. One apex TXT verification covers both. A site has one FINAL apex domain; starting a different apex begins a zero-downtime switch and the previous domain remains until the new www is live. The www CNAME must remain while bound. Requires an ACTIVE subscription (subscribe). Ownership is proven ONLY by DNS control of the apex \u2014 payment never grants ownership, and bindings are ALWAYS challengeable: whoever proves CURRENT DNS control takes the domain, even from an existing binding (the displaced site keeps its subscription, content and subscription-backed Sakupa URL). Unverified requests expire after 72 hours. Call again with action "status" to check progress.`,
4940
4940
  outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
4941
4941
  annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
4942
4942
  inputSchema: {
@@ -4971,7 +4971,8 @@ Once Stripe confirms payment and Sakupa synchronizes the subscription, the curre
4971
4971
  return text(
4972
4972
  res2.bindingStatus === "active" ? "domain_binding_active" : res2.bindingStatus === "provisioning" ? "domain_binding_provisioning" : "domain_verification_pending",
4973
4973
  `Domain binding status for ${apex2}: ${res2.status}
4974
- ${res2.message}` + (manualProviderRecheckRequired ? `
4974
+ ${res2.message}
4975
+ The serving CNAME www.${apex2} \u2192 ${res2.servingTarget} must remain for as long as this domain is bound.` + (manualProviderRecheckRequired ? `
4975
4976
 
4976
4977
  ${customerRecheckInstruction}` : "") + "\n\n" + renderChecklistBlock(
4977
4978
  diag,
@@ -4989,6 +4990,7 @@ ${customerRecheckInstruction}` : "") + "\n\n" + renderChecklistBlock(
4989
4990
  apexResolves,
4990
4991
  apexRequired: false,
4991
4992
  requiredServingHostname: `www.${apex2}`,
4993
+ requiredCnameMustRemainWhileBound: true,
4992
4994
  optionalApexHostname: apex2,
4993
4995
  automaticRetries: 0,
4994
4996
  manualRecheckOnly: true,
@@ -5040,13 +5042,14 @@ STEP 1 of 2 \u2014 prove ownership. Add ONE record:
5040
5042
 
5041
5043
  Host is the SHORT form: most panels append the domain automatically (the saved record must NOT show ${apex} twice in one name). Ownership comes ONLY from DNS control; paying never grants it. The first verified request wins and this challenge expires after 72 hours.
5042
5044
 
5043
- When the user says the TXT is set, run bind "status". It verifies ownership and then hands back STEP 2 \u2014 a SINGLE www CNAME (there are NO certificate TXT records; HTTPS validates automatically over that CNAME). Each "status" checks the previous step and, unless something is misconfigured, advances to the next \u2014 so run it whenever the user reports a step done, NOT on a timer. Any later session can resume with action "status" alone; the verificationId is optional.`,
5045
+ When the user says the TXT is set, run bind "status". It verifies ownership and then hands back STEP 2 \u2014 a SINGLE www CNAME (there are NO certificate TXT records; HTTPS validates automatically over that CNAME). That CNAME must remain for as long as the domain stays bound to Sakupa. Each "status" checks the previous step and, unless something is misconfigured, advances to the next \u2014 so run it whenever the user reports a step done, NOT on a timer. Any later session can resume with action "status" alone; the verificationId is optional.`,
5044
5046
  {
5045
5047
  verificationId: res.verificationId,
5046
5048
  apexDomain: apex,
5047
5049
  includedHostnames: res.includedHostnames,
5048
5050
  apexRequired: false,
5049
5051
  requiredServingHostname: `www.${apex}`,
5052
+ requiredCnameMustRemainWhileBound: true,
5050
5053
  optionalApexHostname: apex,
5051
5054
  verificationRecord: res.verificationRecord,
5052
5055
  servingTarget: res.servingTarget,
@@ -5887,7 +5890,12 @@ var TOOL_MANUALS = {
5887
5890
  preconditions: "A subscribed site and DNS control.",
5888
5891
  parameterNames: ["action", "hostname", "verificationId"],
5889
5892
  parameters: "Action plus hostname or verificationId as returned by the prior step.",
5890
- warnings: ["www is mandatory; the apex is optional.", "Copy DNS values verbatim."],
5893
+ warnings: [
5894
+ "www is mandatory; the apex is optional.",
5895
+ "Copy DNS values verbatim.",
5896
+ "The www CNAME must remain for as long as the domain stays bound; only the ownership TXT is temporary.",
5897
+ "If the domain already belongs to this site, use bind status instead of starting a new challenge."
5898
+ ],
5891
5899
  nextStep: "Follow the returned DNS checklist and call bind status/check."
5892
5900
  },
5893
5901
  billing: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sakupa/mcp",
3
- "version": "0.7.54",
3
+ "version": "0.7.55",
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",