mcp-scraper 0.66.5 → 0.66.6

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/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to MCP Scraper are documented here. The format is based on [
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.66.6] - 2026-08-26
8
+
9
+ ### Fixed
10
+
11
+ - Google Search Console bulk URL Inspection now uses one bounded provider batch request, preserves successful URL results beside localized failures, and no longer inherits the former one-minute connected-tool cutoff.
12
+
7
13
  ## [0.66.5] - 2026-08-25
8
14
 
9
15
  ### Fixed
@@ -1115,7 +1121,9 @@ All notable changes to MCP Scraper are documented here. The format is based on [
1115
1121
  - Write actions remain unavailable until the account owner explicitly enables them.
1116
1122
  - Provider-specific connection data is normalized into one agent-facing contract.
1117
1123
 
1118
- [Unreleased]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.4...HEAD
1124
+ [Unreleased]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.6...HEAD
1125
+ [0.66.6]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.5...v0.66.6
1126
+ [0.66.5]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.4...v0.66.5
1119
1127
  [0.66.4]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.3...v0.66.4
1120
1128
  [0.66.3]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.2...v0.66.3
1121
1129
  [0.66.2]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.1...v0.66.2
package/README.md CHANGED
@@ -159,7 +159,7 @@ Build the branded one-click bundle:
159
159
  npm run build:mcpb
160
160
  ```
161
161
 
162
- The generated bundle is written to `build/mcpb/mcp-scraper-<version>.mcpb` and copied to `public/downloads/` for the hosted download. The current public bundle is `https://mcpscraper.dev/downloads/mcp-scraper.mcpb` (`0.66.5`, SHA-256 `958313b3c6a41b73a725bac75770f5d429d6a4969966f3051c86d51087f76993`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, API-key configuration field, and manually curated current-release message from the bundle manifest.
162
+ The generated bundle is written to `build/mcpb/mcp-scraper-<version>.mcpb` and copied to `public/downloads/` for the hosted download. The current public bundle is `https://mcpscraper.dev/downloads/mcp-scraper.mcpb` (`0.66.6`, SHA-256 `828f1685c159314275c2ffd1ac437cc466801e1b0d4f43f09a65073581cb7db1`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, API-key configuration field, and manually curated current-release message from the bundle manifest.
163
163
 
164
164
  The MCPB install exposes every tool — web-intelligence plus all `browser_*` tools — through the one `mcp-scraper` server.
165
165
 
@@ -49706,7 +49706,7 @@ var PACKAGE_VERSION;
49706
49706
  var init_version = __esm({
49707
49707
  "src/version.ts"() {
49708
49708
  "use strict";
49709
- PACKAGE_VERSION = "0.66.5";
49709
+ PACKAGE_VERSION = "0.66.6";
49710
49710
  }
49711
49711
  });
49712
49712
 
@@ -56618,7 +56618,8 @@ function httpErrorPayload(path6, res, data) {
56618
56618
  const safeCode = privateUpstreamState ? "service_unavailable" : recognized ? candidateCode : normalizePublicErrorCode(candidateCode);
56619
56619
  const bodyMessage = objectData ? objectData.message ?? objectData.error ?? rawCode : data;
56620
56620
  return {
56621
- ...recognized && objectData ? objectData : {},
56621
+ ...recognized && objectData && safeCode !== "mcp_request_timeout" ? objectData : {},
56622
+ ...recognized ? { code: safeCode } : {},
56622
56623
  error: safeCode,
56623
56624
  error_code: safeCode,
56624
56625
  error_type: recognized && typeof objectData?.error_type === "string" ? objectData.error_type : "http",
@@ -56626,7 +56627,7 @@ function httpErrorPayload(path6, res, data) {
56626
56627
  status: res.status,
56627
56628
  statusText: res.statusText,
56628
56629
  path: path6,
56629
- message: recognized && typeof bodyMessage === "string" && bodyMessage.trim() ? sanitizeVendorName(bodyMessage) : publicErrorMessage(safeCode)
56630
+ message: safeCode === "mcp_request_timeout" ? "The connected service operation timed out before returning a result. Retry failed items or use a smaller batch." : recognized && typeof bodyMessage === "string" && bodyMessage.trim() ? sanitizeVendorName(bodyMessage) : publicErrorMessage(safeCode)
56630
56631
  };
56631
56632
  }
56632
56633
  function withDefaultHostedProfile(input) {
@@ -84444,6 +84445,15 @@ function retryAfterMsFromText(value) {
84444
84445
  function normalizeNangoClientError(error) {
84445
84446
  if (error instanceof MainNangoTransportError) return error;
84446
84447
  const detail = nangoClientErrorText(error);
84448
+ const structured = error && typeof error === "object" ? error : null;
84449
+ if (structured?.code === -32001 || structured?.name === "RequestTimeout" || /Request timed out|RequestTimeout|Maximum total timeout exceeded/i.test(detail)) {
84450
+ return new MainNangoTransportError(
84451
+ "The connected service operation timed out before returning a result. Retry failed items or use a smaller batch.",
84452
+ 503,
84453
+ "mcp_request_timeout",
84454
+ true
84455
+ );
84456
+ }
84447
84457
  if (/SERVICE_DISABLED|accessNotConfigured/i.test(detail)) {
84448
84458
  return new MainNangoTransportError(
84449
84459
  "The provider API required by this connection is disabled. Enable it in the provider project, wait for propagation, then retry.",
@@ -84474,6 +84484,12 @@ function normalizeNangoClientError(error) {
84474
84484
  }
84475
84485
  return new MainNangoTransportError("The service connection is temporarily unavailable.", 503, "connection_transport_unavailable");
84476
84486
  }
84487
+ async function callNangoToolWithBudget(client2, tool, input) {
84488
+ return client2.callTool(
84489
+ { name: tool, arguments: input },
84490
+ { timeout: NANGO_TOOL_CALL_TIMEOUT_MS }
84491
+ );
84492
+ }
84477
84493
  function asRecord2(value) {
84478
84494
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
84479
84495
  }
@@ -84917,7 +84933,7 @@ async function callNangoToolDirect(args) {
84917
84933
  let result;
84918
84934
  let providerError;
84919
84935
  try {
84920
- result = await withNangoClient(connection, (client2) => client2.callTool({ name: args.tool, arguments: args.input }));
84936
+ result = await withNangoClient(connection, (client2) => callNangoToolWithBudget(client2, args.tool, args.input));
84921
84937
  } catch (error) {
84922
84938
  providerError = error;
84923
84939
  }
@@ -84982,7 +84998,7 @@ async function describeNangoToolDirect(identity, connectionId, toolName) {
84982
84998
  fetchedAt: (/* @__PURE__ */ new Date()).toISOString()
84983
84999
  };
84984
85000
  }
84985
- var import_node_crypto68, import_client13, DEFAULT_NANGO_MCP_URL, NANGO_TIMEOUT_MS, NANGO_CONNECTION_PAGE_SIZE, NANGO_CONNECTION_MAX_PAGES, PROVIDER_IDENTITY_RETRY_MS, MAIN_INTEGRATION_CONTRACT_VERSION, MAIN_INTEGRATION_CONTRACT_HASH, MainNangoTransportError, IDENTITY_SUPPORTED_PROVIDERS;
85001
+ var import_node_crypto68, import_client13, DEFAULT_NANGO_MCP_URL, NANGO_TIMEOUT_MS, NANGO_TOOL_CALL_TIMEOUT_MS, NANGO_CONNECTION_PAGE_SIZE, NANGO_CONNECTION_MAX_PAGES, PROVIDER_IDENTITY_RETRY_MS, MAIN_INTEGRATION_CONTRACT_VERSION, MAIN_INTEGRATION_CONTRACT_HASH, MainNangoTransportError, IDENTITY_SUPPORTED_PROVIDERS;
84986
85002
  var init_main_nango_transport = __esm({
84987
85003
  "src/api/main-nango-transport.ts"() {
84988
85004
  "use strict";
@@ -84994,6 +85010,7 @@ var init_main_nango_transport = __esm({
84994
85010
  init_connected_tool_policy();
84995
85011
  DEFAULT_NANGO_MCP_URL = "https://api.nango.dev/mcp";
84996
85012
  NANGO_TIMEOUT_MS = 2e4;
85013
+ NANGO_TOOL_CALL_TIMEOUT_MS = 24e4;
84997
85014
  NANGO_CONNECTION_PAGE_SIZE = 100;
84998
85015
  NANGO_CONNECTION_MAX_PAGES = 20;
84999
85016
  PROVIDER_IDENTITY_RETRY_MS = 6 * 60 * 60 * 1e3;
@@ -17,7 +17,7 @@ loadDotEnv();
17
17
  async function main() {
18
18
  const [{ serve }, { app }, { startWorker }, { migrate }] = await Promise.all([
19
19
  import("@hono/node-server"),
20
- import("../server-LESUYFDI.js"),
20
+ import("../server-5WPS3LZD.js"),
21
21
  import("../worker-UTBUWEXQ.js"),
22
22
  import("../db-4RVZ3NYZ.js")
23
23
  ]);
@@ -30,7 +30,7 @@ var import_promises5 = require("fs/promises");
30
30
  var import_node_path3 = require("path");
31
31
 
32
32
  // src/version.ts
33
- var PACKAGE_VERSION = "0.66.5";
33
+ var PACKAGE_VERSION = "0.66.6";
34
34
 
35
35
  // src/cli/agent-config.ts
36
36
  function apiKeyValue(options) {
@@ -13,7 +13,7 @@ import "../chunk-VXLU74YZ.js";
13
13
  import "../chunk-GGZEC22A.js";
14
14
  import {
15
15
  PACKAGE_VERSION
16
- } from "../chunk-RSFMR7O7.js";
16
+ } from "../chunk-NLEAYKOC.js";
17
17
 
18
18
  // src/cli/human-cli.ts
19
19
  import { Command } from "commander";
@@ -3,7 +3,7 @@
3
3
 
4
4
  // release-message.json
5
5
  var release_message_default = {
6
- message: "Local Sourcebook submissions now clearly distinguish processing from publication and return the exact live listing URL when complete."
6
+ message: "Search Console bulk URL Inspection now returns one ordered partial-result receipt without the former one-minute cutoff."
7
7
  };
8
8
 
9
9
  // src/install-terminal.ts
@@ -112,7 +112,7 @@ function renderInstallTerminal(options) {
112
112
  }
113
113
 
114
114
  // src/version.ts
115
- var PACKAGE_VERSION = "0.66.5";
115
+ var PACKAGE_VERSION = "0.66.6";
116
116
 
117
117
  // bin/mcp-scraper-install.ts
118
118
  var noColor = process.argv.includes("--no-color") || process.env.NO_COLOR !== void 0 || process.env.FORCE_COLOR === "0" || !process.stdout.isTTY;
@@ -1,10 +1,10 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  renderInstallTerminal
4
- } from "../chunk-TCOP5BT7.js";
4
+ } from "../chunk-KPE52NPT.js";
5
5
  import {
6
6
  PACKAGE_VERSION
7
- } from "../chunk-RSFMR7O7.js";
7
+ } from "../chunk-NLEAYKOC.js";
8
8
 
9
9
  // bin/mcp-scraper-install.ts
10
10
  var noColor = process.argv.includes("--no-color") || process.env.NO_COLOR !== void 0 || process.env.FORCE_COLOR === "0" || !process.stdout.isTTY;
@@ -431,7 +431,8 @@ function httpErrorPayload(path, res, data) {
431
431
  const safeCode = privateUpstreamState ? "service_unavailable" : recognized ? candidateCode : normalizePublicErrorCode(candidateCode);
432
432
  const bodyMessage = objectData ? objectData.message ?? objectData.error ?? rawCode : data;
433
433
  return {
434
- ...recognized && objectData ? objectData : {},
434
+ ...recognized && objectData && safeCode !== "mcp_request_timeout" ? objectData : {},
435
+ ...recognized ? { code: safeCode } : {},
435
436
  error: safeCode,
436
437
  error_code: safeCode,
437
438
  error_type: recognized && typeof objectData?.error_type === "string" ? objectData.error_type : "http",
@@ -439,7 +440,7 @@ function httpErrorPayload(path, res, data) {
439
440
  status: res.status,
440
441
  statusText: res.statusText,
441
442
  path,
442
- message: recognized && typeof bodyMessage === "string" && bodyMessage.trim() ? sanitizeVendorName(bodyMessage) : publicErrorMessage(safeCode)
443
+ message: safeCode === "mcp_request_timeout" ? "The connected service operation timed out before returning a result. Retry failed items or use a smaller batch." : recognized && typeof bodyMessage === "string" && bodyMessage.trim() ? sanitizeVendorName(bodyMessage) : publicErrorMessage(safeCode)
443
444
  };
444
445
  }
445
446
  function withDefaultHostedProfile(input) {
@@ -1232,7 +1233,7 @@ render();
1232
1233
  }
1233
1234
 
1234
1235
  // src/version.ts
1235
- var PACKAGE_VERSION = "0.66.5";
1236
+ var PACKAGE_VERSION = "0.66.6";
1236
1237
 
1237
1238
  // src/mcp/input-field-descriptions.ts
1238
1239
  var import_zod = require("zod");
@@ -18665,7 +18666,7 @@ var HostedMemoryMcpToolExecutor = class {
18665
18666
 
18666
18667
  // release-message.json
18667
18668
  var release_message_default = {
18668
- message: "Local Sourcebook submissions now clearly distinguish processing from publication and return the exact live listing URL when complete."
18669
+ message: "Search Console bulk URL Inspection now returns one ordered partial-result receipt without the former one-minute cutoff."
18669
18670
  };
18670
18671
 
18671
18672
  // src/install-terminal.ts
@@ -13,18 +13,18 @@ import {
13
13
  registerScheduledResultsMcpTools,
14
14
  registerSerpIntelligenceCaptureTools,
15
15
  resolveDeploymentProfile
16
- } from "../chunk-OJFWURGD.js";
16
+ } from "../chunk-VMWVEKZT.js";
17
17
  import "../chunk-PGJQDMC2.js";
18
18
  import "../chunk-3EYALCYK.js";
19
19
  import "../chunk-3TKKJQB4.js";
20
20
  import {
21
21
  renderInstallTerminal
22
- } from "../chunk-TCOP5BT7.js";
22
+ } from "../chunk-KPE52NPT.js";
23
23
  import "../chunk-VXLU74YZ.js";
24
24
  import "../chunk-GGZEC22A.js";
25
25
  import {
26
26
  PACKAGE_VERSION
27
- } from "../chunk-RSFMR7O7.js";
27
+ } from "../chunk-NLEAYKOC.js";
28
28
  import "../chunk-DNM65UCK.js";
29
29
  import "../chunk-AYJHI2FK.js";
30
30
  import "../chunk-55B3T5L2.js";
@@ -1,6 +1,6 @@
1
1
  // release-message.json
2
2
  var release_message_default = {
3
- message: "Local Sourcebook submissions now clearly distinguish processing from publication and return the exact live listing URL when complete."
3
+ message: "Search Console bulk URL Inspection now returns one ordered partial-result receipt without the former one-minute cutoff."
4
4
  };
5
5
 
6
6
  // src/install-terminal.ts
@@ -1,5 +1,5 @@
1
1
  // src/version.ts
2
- var PACKAGE_VERSION = "0.66.5";
2
+ var PACKAGE_VERSION = "0.66.6";
3
3
 
4
4
  export {
5
5
  PACKAGE_VERSION
@@ -25,7 +25,7 @@ import {
25
25
  } from "./chunk-VXLU74YZ.js";
26
26
  import {
27
27
  PACKAGE_VERSION
28
- } from "./chunk-RSFMR7O7.js";
28
+ } from "./chunk-NLEAYKOC.js";
29
29
  import {
30
30
  createPrivateArtifact,
31
31
  privateArtifactOwnerId,
@@ -12094,7 +12094,8 @@ function httpErrorPayload(path, res, data) {
12094
12094
  const safeCode = privateUpstreamState ? "service_unavailable" : recognized ? candidateCode : normalizePublicErrorCode(candidateCode);
12095
12095
  const bodyMessage = objectData ? objectData.message ?? objectData.error ?? rawCode : data;
12096
12096
  return {
12097
- ...recognized && objectData ? objectData : {},
12097
+ ...recognized && objectData && safeCode !== "mcp_request_timeout" ? objectData : {},
12098
+ ...recognized ? { code: safeCode } : {},
12098
12099
  error: safeCode,
12099
12100
  error_code: safeCode,
12100
12101
  error_type: recognized && typeof objectData?.error_type === "string" ? objectData.error_type : "http",
@@ -12102,7 +12103,7 @@ function httpErrorPayload(path, res, data) {
12102
12103
  status: res.status,
12103
12104
  statusText: res.statusText,
12104
12105
  path,
12105
- message: recognized && typeof bodyMessage === "string" && bodyMessage.trim() ? sanitizeVendorName(bodyMessage) : publicErrorMessage(safeCode)
12106
+ message: safeCode === "mcp_request_timeout" ? "The connected service operation timed out before returning a result. Retry failed items or use a smaller batch." : recognized && typeof bodyMessage === "string" && bodyMessage.trim() ? sanitizeVendorName(bodyMessage) : publicErrorMessage(safeCode)
12106
12107
  };
12107
12108
  }
12108
12109
  function withDefaultHostedProfile(input) {
@@ -199,7 +199,7 @@ import {
199
199
  resolveDeploymentProfile,
200
200
  resolveLocalSourcebookSchemaType,
201
201
  transcribeMediaUrl
202
- } from "./chunk-OJFWURGD.js";
202
+ } from "./chunk-VMWVEKZT.js";
203
203
  import {
204
204
  auditImageUrls,
205
205
  auditImages,
@@ -256,7 +256,7 @@ import {
256
256
  } from "./chunk-GGZEC22A.js";
257
257
  import {
258
258
  PACKAGE_VERSION
259
- } from "./chunk-RSFMR7O7.js";
259
+ } from "./chunk-NLEAYKOC.js";
260
260
  import {
261
261
  SITE_EXTRACT_ARTIFACT_PREFIX,
262
262
  abandonExtractSettlement,
@@ -44203,6 +44203,7 @@ function connectedToolPolicyOrThrow(registry, toolName) {
44203
44203
  // src/api/main-nango-transport.ts
44204
44204
  var DEFAULT_NANGO_MCP_URL = "https://api.nango.dev/mcp";
44205
44205
  var NANGO_TIMEOUT_MS = 2e4;
44206
+ var NANGO_TOOL_CALL_TIMEOUT_MS = 24e4;
44206
44207
  var NANGO_CONNECTION_PAGE_SIZE = 100;
44207
44208
  var NANGO_CONNECTION_MAX_PAGES = 20;
44208
44209
  var PROVIDER_IDENTITY_RETRY_MS = 6 * 60 * 60 * 1e3;
@@ -44241,6 +44242,15 @@ function retryAfterMsFromText(value) {
44241
44242
  function normalizeNangoClientError(error) {
44242
44243
  if (error instanceof MainNangoTransportError) return error;
44243
44244
  const detail = nangoClientErrorText(error);
44245
+ const structured = error && typeof error === "object" ? error : null;
44246
+ if (structured?.code === -32001 || structured?.name === "RequestTimeout" || /Request timed out|RequestTimeout|Maximum total timeout exceeded/i.test(detail)) {
44247
+ return new MainNangoTransportError(
44248
+ "The connected service operation timed out before returning a result. Retry failed items or use a smaller batch.",
44249
+ 503,
44250
+ "mcp_request_timeout",
44251
+ true
44252
+ );
44253
+ }
44244
44254
  if (/SERVICE_DISABLED|accessNotConfigured/i.test(detail)) {
44245
44255
  return new MainNangoTransportError(
44246
44256
  "The provider API required by this connection is disabled. Enable it in the provider project, wait for propagation, then retry.",
@@ -44271,6 +44281,12 @@ function normalizeNangoClientError(error) {
44271
44281
  }
44272
44282
  return new MainNangoTransportError("The service connection is temporarily unavailable.", 503, "connection_transport_unavailable");
44273
44283
  }
44284
+ async function callNangoToolWithBudget(client2, tool, input) {
44285
+ return client2.callTool(
44286
+ { name: tool, arguments: input },
44287
+ { timeout: NANGO_TOOL_CALL_TIMEOUT_MS }
44288
+ );
44289
+ }
44274
44290
  function asRecord(value) {
44275
44291
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
44276
44292
  }
@@ -44730,7 +44746,7 @@ async function callNangoToolDirect(args) {
44730
44746
  let result;
44731
44747
  let providerError;
44732
44748
  try {
44733
- result = await withNangoClient(connection, (client2) => client2.callTool({ name: args.tool, arguments: args.input }));
44749
+ result = await withNangoClient(connection, (client2) => callNangoToolWithBudget(client2, args.tool, args.input));
44734
44750
  } catch (error) {
44735
44751
  providerError = error;
44736
44752
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-scraper",
3
- "version": "0.66.5",
3
+ "version": "0.66.6",
4
4
  "description": "MCP server for MCP Scraper web intelligence tools",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",