@sakupa/mcp 0.7.11 → 0.7.13
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 +7 -14
- package/dist/index.js +7 -14
- package/package.json +1 -1
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.
|
|
132
|
+
var SAKUPA_MCP_VERSION = "0.7.13";
|
|
133
133
|
|
|
134
134
|
// ../core/dist/domain/errors.js
|
|
135
135
|
var HTTP_STATUS = {
|
|
@@ -1483,16 +1483,7 @@ function requireSiteFile(ctx) {
|
|
|
1483
1483
|
}
|
|
1484
1484
|
return state.file;
|
|
1485
1485
|
}
|
|
1486
|
-
var
|
|
1487
|
-
not_found: "The required local project binding or resource is unavailable; if this project has no .sakupa/site.json yet, run deploy_site first.",
|
|
1488
|
-
unauthorized: "The server rejected the site credential: the one in .sakupa/site.json no longer matches the server-side verifier. The site itself is intact on the server \u2014 only the local binding file is the problem. Repair the file (restore a backup or undo the local edit). Do NOT delete the .sakupa directory to work around this: the credential is unrecoverable by design, so abandoning it permanently orphans the existing site.",
|
|
1489
|
-
invalid_request: "The request arguments or local project checks did not pass.",
|
|
1490
|
-
validation_failed: "The request arguments or local project checks did not pass.",
|
|
1491
|
-
state_conflict: "The resource state has changed; re-query the current status before deciding the next step.",
|
|
1492
|
-
confirmation_required: "The site or billing state changed, so the previous confirmation is stale; run the preview again and confirm against the fresh snapshot.",
|
|
1493
|
-
payment_required: "This operation requires an active subscription; check billing_status first.",
|
|
1494
|
-
rate_limited: "The server rate limit was reached; retry after the returned wait time."
|
|
1495
|
-
};
|
|
1486
|
+
var UNAUTHORIZED_SUMMARY = "The server rejected the site credential: the one in .sakupa/site.json no longer matches the server-side verifier. The site itself is intact on the server \u2014 only the local binding file is the problem. Repair the file (restore a backup or undo the local edit). Do NOT delete the .sakupa directory to work around this: the credential is unrecoverable by design, so abandoning it permanently orphans the existing site.";
|
|
1496
1487
|
function toolError(e) {
|
|
1497
1488
|
const errorCode = isSakupaError(e) ? e.code : "internal";
|
|
1498
1489
|
const retryable = errorCode === "rate_limited" || errorCode === "internal";
|
|
@@ -1511,7 +1502,8 @@ function toolError(e) {
|
|
|
1511
1502
|
)
|
|
1512
1503
|
) : void 0;
|
|
1513
1504
|
const minimumVersion = rawDetails && typeof rawDetails["minimumVersion"] === "string" ? rawDetails["minimumVersion"] : void 0;
|
|
1514
|
-
const
|
|
1505
|
+
const serverGuidance = isSakupaError(e) && errorCode !== "internal" && errorCode !== "unauthorized" && errorCode !== "upgrade_required" && e.message.trim().length > 0 ? e.message : void 0;
|
|
1506
|
+
const safeSummary = e instanceof LocalGuidanceError ? e.message : errorCode === "upgrade_required" ? `This Sakupa MCP client is v${MCP_VERSION}, older than the server's minimum supported version${minimumVersion !== void 0 ? ` (v${minimumVersion})` : ""}, so the server refused the call. To fix it: ask the user to fully restart their MCP client session \u2014 "npx -y @sakupa/mcp@latest" setups fetch the current version on restart (run "npx clear-npx-cache" first if the old version persists); global installs need "npm install -g @sakupa/mcp@latest". After the restart, retry this exact tool call.` : errorCode === "unauthorized" ? UNAUTHORIZED_SUMMARY : serverGuidance ?? (retryable ? "An upstream service is temporarily unavailable or busy; retry shortly." : "The operation failed; no server-internal details are exposed.");
|
|
1515
1507
|
const result = structuredToolResult({
|
|
1516
1508
|
schemaVersion: 1,
|
|
1517
1509
|
outcome: "failed",
|
|
@@ -2021,7 +2013,7 @@ Once payment confirms, the site becomes permanent on its current URL. Binding a
|
|
|
2021
2013
|
server.registerTool(
|
|
2022
2014
|
"bind_domain",
|
|
2023
2015
|
{
|
|
2024
|
-
description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the permanent ${previewHostPattern} URL keeps working alongside it. The binding unit is the APEX domain: binding example.com automatically includes www.example.com (both serve the same content, 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_site). Ownership is proven ONLY by DNS control of the apex \u2014 payment never grants ownership
|
|
2016
|
+
description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the permanent ${previewHostPattern} URL keeps working alongside it. The binding unit is the APEX domain: binding example.com automatically includes www.example.com (both serve the same content, 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_site). 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 permanent URL). Unverified requests expire after 72 hours. Call again with action "status" to check progress.`,
|
|
2025
2017
|
outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
|
|
2026
2018
|
annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
|
|
2027
2019
|
inputSchema: {
|
|
@@ -2412,9 +2404,10 @@ ${res.archiveUrl}`,
|
|
|
2412
2404
|
...args.contactEmail !== void 0 ? { contactEmail: args.contactEmail } : {}
|
|
2413
2405
|
};
|
|
2414
2406
|
if (args.confirmSubmit !== true) {
|
|
2407
|
+
const contactNote = args.contactEmail !== void 0 ? "note that their contact email is attached for follow-up. " : "ASK THEM ONCE whether they want to attach a contact email for follow-up (optional \u2014 omit if declined; include it as contactEmail when they do). ";
|
|
2415
2408
|
return textJson(
|
|
2416
2409
|
"bug_report_preview_ready",
|
|
2417
|
-
|
|
2410
|
+
`Bug report prepared but NOT submitted. This is the exact payload that would be sent (structured diagnostics only \u2014 no file contents, source code or secrets). Show it to the user, and ${contactNote}Then re-run report_bug with confirmSubmit: true to submit.`,
|
|
2418
2411
|
payload,
|
|
2419
2412
|
"preview"
|
|
2420
2413
|
);
|
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.
|
|
127
|
+
var SAKUPA_MCP_VERSION = "0.7.13";
|
|
128
128
|
|
|
129
129
|
// ../core/dist/domain/errors.js
|
|
130
130
|
var HTTP_STATUS = {
|
|
@@ -1372,16 +1372,7 @@ function requireSiteFile(ctx) {
|
|
|
1372
1372
|
}
|
|
1373
1373
|
return state.file;
|
|
1374
1374
|
}
|
|
1375
|
-
var
|
|
1376
|
-
not_found: "The required local project binding or resource is unavailable; if this project has no .sakupa/site.json yet, run deploy_site first.",
|
|
1377
|
-
unauthorized: "The server rejected the site credential: the one in .sakupa/site.json no longer matches the server-side verifier. The site itself is intact on the server \u2014 only the local binding file is the problem. Repair the file (restore a backup or undo the local edit). Do NOT delete the .sakupa directory to work around this: the credential is unrecoverable by design, so abandoning it permanently orphans the existing site.",
|
|
1378
|
-
invalid_request: "The request arguments or local project checks did not pass.",
|
|
1379
|
-
validation_failed: "The request arguments or local project checks did not pass.",
|
|
1380
|
-
state_conflict: "The resource state has changed; re-query the current status before deciding the next step.",
|
|
1381
|
-
confirmation_required: "The site or billing state changed, so the previous confirmation is stale; run the preview again and confirm against the fresh snapshot.",
|
|
1382
|
-
payment_required: "This operation requires an active subscription; check billing_status first.",
|
|
1383
|
-
rate_limited: "The server rate limit was reached; retry after the returned wait time."
|
|
1384
|
-
};
|
|
1375
|
+
var UNAUTHORIZED_SUMMARY = "The server rejected the site credential: the one in .sakupa/site.json no longer matches the server-side verifier. The site itself is intact on the server \u2014 only the local binding file is the problem. Repair the file (restore a backup or undo the local edit). Do NOT delete the .sakupa directory to work around this: the credential is unrecoverable by design, so abandoning it permanently orphans the existing site.";
|
|
1385
1376
|
function toolError(e) {
|
|
1386
1377
|
const errorCode = isSakupaError(e) ? e.code : "internal";
|
|
1387
1378
|
const retryable = errorCode === "rate_limited" || errorCode === "internal";
|
|
@@ -1400,7 +1391,8 @@ function toolError(e) {
|
|
|
1400
1391
|
)
|
|
1401
1392
|
) : void 0;
|
|
1402
1393
|
const minimumVersion = rawDetails && typeof rawDetails["minimumVersion"] === "string" ? rawDetails["minimumVersion"] : void 0;
|
|
1403
|
-
const
|
|
1394
|
+
const serverGuidance = isSakupaError(e) && errorCode !== "internal" && errorCode !== "unauthorized" && errorCode !== "upgrade_required" && e.message.trim().length > 0 ? e.message : void 0;
|
|
1395
|
+
const safeSummary = e instanceof LocalGuidanceError ? e.message : errorCode === "upgrade_required" ? `This Sakupa MCP client is v${MCP_VERSION}, older than the server's minimum supported version${minimumVersion !== void 0 ? ` (v${minimumVersion})` : ""}, so the server refused the call. To fix it: ask the user to fully restart their MCP client session \u2014 "npx -y @sakupa/mcp@latest" setups fetch the current version on restart (run "npx clear-npx-cache" first if the old version persists); global installs need "npm install -g @sakupa/mcp@latest". After the restart, retry this exact tool call.` : errorCode === "unauthorized" ? UNAUTHORIZED_SUMMARY : serverGuidance ?? (retryable ? "An upstream service is temporarily unavailable or busy; retry shortly." : "The operation failed; no server-internal details are exposed.");
|
|
1404
1396
|
const result = structuredToolResult({
|
|
1405
1397
|
schemaVersion: 1,
|
|
1406
1398
|
outcome: "failed",
|
|
@@ -2085,7 +2077,7 @@ Once payment confirms, the site becomes permanent on its current URL. Binding a
|
|
|
2085
2077
|
server.registerTool(
|
|
2086
2078
|
"bind_domain",
|
|
2087
2079
|
{
|
|
2088
|
-
description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the permanent ${previewHostPattern} URL keeps working alongside it. The binding unit is the APEX domain: binding example.com automatically includes www.example.com (both serve the same content, 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_site). Ownership is proven ONLY by DNS control of the apex \u2014 payment never grants ownership
|
|
2080
|
+
description: `Bind a custom domain to this subscribed site \u2014 an OPTIONAL extra serving surface; the permanent ${previewHostPattern} URL keeps working alongside it. The binding unit is the APEX domain: binding example.com automatically includes www.example.com (both serve the same content, 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_site). 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 permanent URL). Unverified requests expire after 72 hours. Call again with action "status" to check progress.`,
|
|
2089
2081
|
outputSchema: STRUCTURED_TOOL_OUTPUT_SCHEMA,
|
|
2090
2082
|
annotations: { readOnlyHint: false, destructiveHint: true, openWorldHint: true },
|
|
2091
2083
|
inputSchema: {
|
|
@@ -2476,9 +2468,10 @@ ${res.archiveUrl}`,
|
|
|
2476
2468
|
...args.contactEmail !== void 0 ? { contactEmail: args.contactEmail } : {}
|
|
2477
2469
|
};
|
|
2478
2470
|
if (args.confirmSubmit !== true) {
|
|
2471
|
+
const contactNote = args.contactEmail !== void 0 ? "note that their contact email is attached for follow-up. " : "ASK THEM ONCE whether they want to attach a contact email for follow-up (optional \u2014 omit if declined; include it as contactEmail when they do). ";
|
|
2479
2472
|
return textJson(
|
|
2480
2473
|
"bug_report_preview_ready",
|
|
2481
|
-
|
|
2474
|
+
`Bug report prepared but NOT submitted. This is the exact payload that would be sent (structured diagnostics only \u2014 no file contents, source code or secrets). Show it to the user, and ${contactNote}Then re-run report_bug with confirmSubmit: true to submit.`,
|
|
2482
2475
|
payload,
|
|
2483
2476
|
"preview"
|
|
2484
2477
|
);
|