mcp-scraper 0.26.0 → 0.26.2

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/README.md CHANGED
@@ -88,7 +88,7 @@ Build the branded one-click bundle:
88
88
  npm run build:mcpb
89
89
  ```
90
90
 
91
- 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.26.0`, SHA-256 `030b1577d7abdf03057d904feb75378e9fb6d738e8287dfa29ab21d3ead69145`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, and API-key configuration field from the bundle manifest.
91
+ 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.26.2`, SHA-256 `1ced5e2e4f42ab50cd3e00d7d1cb9898cd60aad9842b735394e17f80b8a394e1`). Install it by opening or dragging it into Claude Desktop. Claude displays the `MCP Scraper` install card, icon, and API-key configuration field from the bundle manifest.
92
92
 
93
93
  The MCPB install exposes every tool — web-intelligence plus all `browser_*` tools — through the one `mcp-scraper` server.
94
94
 
@@ -29688,7 +29688,7 @@ var PACKAGE_VERSION;
29688
29688
  var init_version = __esm({
29689
29689
  "src/version.ts"() {
29690
29690
  "use strict";
29691
- PACKAGE_VERSION = "0.26.0";
29691
+ PACKAGE_VERSION = "0.26.2";
29692
29692
  }
29693
29693
  });
29694
29694
 
@@ -32643,10 +32643,10 @@ var init_http_mcp_tool_executor = __esm({
32643
32643
  return this.call("/billing/credits", input);
32644
32644
  }
32645
32645
  listServiceConnections(input) {
32646
- return this.getJson("/integrations");
32646
+ return this.getJson("/schedule-connections");
32647
32647
  }
32648
32648
  testServiceConnection(input) {
32649
- return this.call(`/integrations/${encodeURIComponent(input.connectionId)}/test`, {
32649
+ return this.call(`/schedule-connections/${encodeURIComponent(input.connectionId)}/test`, {
32650
32650
  ...input.providerConfigKey ? { providerConfigKey: input.providerConfigKey } : {}
32651
32651
  });
32652
32652
  }
@@ -32663,13 +32663,13 @@ var init_http_mcp_tool_executor = __esm({
32663
32663
  return this.call("/schedule-connections/actions/zoom/create-meeting", input);
32664
32664
  }
32665
32665
  readServiceConnection(input) {
32666
- return this.call("/integrations/actions/read", input);
32666
+ return this.call("/schedule-connections/actions/read", input);
32667
32667
  }
32668
32668
  importServiceConnectionToMemory(input) {
32669
32669
  return this.call("/schedule-connections/actions/import-memory", input);
32670
32670
  }
32671
32671
  describeServiceConnectionTool(input) {
32672
- return this.call("/integrations/actions/describe", input);
32672
+ return this.call("/schedule-connections/actions/describe", input);
32673
32673
  }
32674
32674
  exportConnectedServiceData(input) {
32675
32675
  const timeoutMs = this.httpTimeoutOverrideMs ?? 29e4;
@@ -32683,7 +32683,7 @@ var init_http_mcp_tool_executor = __esm({
32683
32683
  return this.call("/schedule-connections/actions/export-download", input);
32684
32684
  }
32685
32685
  callServiceConnectionAction(input) {
32686
- return this.call("/integrations/actions/call", input);
32686
+ return this.call("/schedule-connections/actions/call", input);
32687
32687
  }
32688
32688
  setScheduledActionConnections(input) {
32689
32689
  return this.call(`/schedule-actions/${encodeURIComponent(input.scheduleActionId)}/connections`, {
@@ -43055,6 +43055,42 @@ var init_service_connections = __esm({
43055
43055
  });
43056
43056
 
43057
43057
  // src/api/main-nango-transport.ts
43058
+ function nangoClientErrorText(error) {
43059
+ if (error instanceof Error) return error.message;
43060
+ if (typeof error === "string") return error;
43061
+ try {
43062
+ return JSON.stringify(error);
43063
+ } catch {
43064
+ return "";
43065
+ }
43066
+ }
43067
+ function normalizeNangoClientError(error) {
43068
+ if (error instanceof MainNangoTransportError) return error;
43069
+ const detail = nangoClientErrorText(error);
43070
+ if (/SERVICE_DISABLED|accessNotConfigured/i.test(detail)) {
43071
+ return new MainNangoTransportError(
43072
+ "The provider API required by this connection is disabled. Enable it in the provider project, wait for propagation, then retry.",
43073
+ 409,
43074
+ "provider_api_disabled",
43075
+ false
43076
+ );
43077
+ }
43078
+ if (/PERMISSION_DENIED|insufficientPermissions|insufficient permission/i.test(detail)) {
43079
+ return new MainNangoTransportError(
43080
+ "The connected account does not have permission to run this provider operation.",
43081
+ 403,
43082
+ "missing_provider_permission",
43083
+ false
43084
+ );
43085
+ }
43086
+ if (/RESOURCE_EXHAUSTED|rate.?limit|status["']?\s*:\s*429/i.test(detail)) {
43087
+ return new MainNangoTransportError("The connected provider is temporarily rate limited.", 429, "upstream_rate_limited", true);
43088
+ }
43089
+ if (/UNAUTHENTICATED|invalid_grant|status["']?\s*:\s*401/i.test(detail)) {
43090
+ return new MainNangoTransportError("The service connection requires reconnection.", 409, "connection_inactive", false);
43091
+ }
43092
+ return new MainNangoTransportError("The service connection is temporarily unavailable.", 503, "connection_transport_unavailable");
43093
+ }
43058
43094
  function asRecord2(value) {
43059
43095
  return value && typeof value === "object" && !Array.isArray(value) ? value : null;
43060
43096
  }
@@ -43286,19 +43322,31 @@ async function withNangoClient(connection, run) {
43286
43322
  });
43287
43323
  return value;
43288
43324
  } catch (error) {
43325
+ const normalized = normalizeNangoClientError(error);
43289
43326
  await recordServiceConnectionHealth({
43290
43327
  connectionId: connection.id,
43291
- operationalStatus: "unavailable",
43292
- failureCode: "connection_transport_unavailable",
43293
- retryable: true,
43328
+ operationalStatus: normalized.code === "connection_transport_unavailable" ? "unavailable" : "degraded",
43329
+ failureCode: normalized.code,
43330
+ retryable: normalized.retryable,
43294
43331
  evidenceSource: "nango_mcp"
43295
43332
  }).catch(() => void 0);
43296
- if (error instanceof MainNangoTransportError) throw error;
43297
- throw new MainNangoTransportError("The service connection is temporarily unavailable.", 503, "connection_transport_unavailable");
43333
+ throw normalized;
43298
43334
  } finally {
43299
43335
  await client2.close().catch(() => void 0);
43300
43336
  }
43301
43337
  }
43338
+ async function probeNangoConnectionDirect(identity, connectionId) {
43339
+ const connection = await requireOwnedActiveConnection(identity, connectionId);
43340
+ const providerKey = connection.provider ?? connection.providerConfigKey;
43341
+ if (providerKey !== "google-search-console") return;
43342
+ await withNangoClient(connection, async (client2) => {
43343
+ const listed = await client2.listTools();
43344
+ if (!listed.tools.some((tool) => tool.name === "list-sites")) {
43345
+ throw new MainNangoTransportError("The Search Console health-check tool is unavailable.", 404, "live_tool_missing", false);
43346
+ }
43347
+ await client2.callTool({ name: "list-sites", arguments: {} });
43348
+ });
43349
+ }
43302
43350
  async function listNangoToolsDirect(identity, connectionId) {
43303
43351
  const connection = await requireOwnedActiveConnection(identity, connectionId);
43304
43352
  const listed = await withNangoClient(connection, (client2) => client2.listTools());
@@ -44111,6 +44159,7 @@ async function testNangoConnection(identity, connectionId) {
44111
44159
  }
44112
44160
  try {
44113
44161
  const { tools } = await listNangoToolsDirect(identity, connectionId);
44162
+ await probeNangoConnectionDirect(identity, connectionId);
44114
44163
  return { operationalStatus: "available", checkedAt: (/* @__PURE__ */ new Date()).toISOString(), toolCount: tools.length };
44115
44164
  } catch (error) {
44116
44165
  throw asNangoControlError(error);
@@ -44532,6 +44581,7 @@ var init_nango_control = __esm({
44532
44581
  "connection_transport_unavailable",
44533
44582
  "connection_control_failed",
44534
44583
  "missing_provider_permission",
44584
+ "provider_api_disabled",
44535
44585
  "permission_verification_unavailable",
44536
44586
  "meta_app_feature_not_enabled",
44537
44587
  "insufficient_credits",