mcp-scraper 0.86.3 → 0.86.5
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 +12 -0
- package/README.md +1 -1
- package/dist/bin/api-server.js +1 -1
- package/dist/bin/mcp-scraper-cli.js +1 -1
- package/dist/bin/mcp-scraper-core.js +3 -3
- package/dist/bin/mcp-scraper-install.js +1 -1
- package/dist/bin/mcp-stdio-server.js +3 -3
- package/dist/{chunk-CJPHSGOF.js → chunk-BA6BPDSP.js} +1 -1
- package/dist/{chunk-IHW3HTO6.js → chunk-QJJQ4OAZ.js} +1 -1
- package/dist/{chunk-CBVEBDQA.js → chunk-TV32LC76.js} +2 -2
- package/dist/{server-JF6SAM4D.js → server-ARMF2IRI.js} +11 -20
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,18 @@ All notable changes to MCP Scraper are documented here. The format is based on [
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [0.86.5] - 2026-09-02
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Kept Bright Data telemetry lookup off the Reddit response critical path and reallocated the saved time to 17-second backup attempts, so all four provider attempts can finish before production ends the request.
|
|
12
|
+
|
|
13
|
+
## [0.86.4] - 2026-09-02
|
|
14
|
+
|
|
15
|
+
### Fixed
|
|
16
|
+
|
|
17
|
+
- Kept the complete two-primary, two-backup Reddit retry ladder inside the production request window by limiting Kernel attempts to 8 seconds, Bright Data attempts to 14 seconds, and browser cleanup to 1 second.
|
|
18
|
+
|
|
7
19
|
## [0.86.3] - 2026-09-02
|
|
8
20
|
|
|
9
21
|
### Fixed
|
package/README.md
CHANGED
|
@@ -175,7 +175,7 @@ Build the branded one-click bundle:
|
|
|
175
175
|
npm run build:mcpb
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
-
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.86.
|
|
178
|
+
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.86.5`, SHA-256 `c4ca185e4e7cbd8877e1fd100713e9eacef4e018b66eb435e107535736310916`). 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.
|
|
179
179
|
|
|
180
180
|
The MCPB install exposes every tool — web-intelligence plus all `browser_*` tools — through the one `mcp-scraper` server.
|
|
181
181
|
|
package/dist/bin/api-server.js
CHANGED
|
@@ -17,7 +17,7 @@ loadDotEnv();
|
|
|
17
17
|
async function main() {
|
|
18
18
|
const [{ serve }, { app, personalAssistantProductionStartup }, { startWorker }, { migrate }] = await Promise.all([
|
|
19
19
|
import("@hono/node-server"),
|
|
20
|
-
import("../server-
|
|
20
|
+
import("../server-ARMF2IRI.js"),
|
|
21
21
|
import("../worker-OQSFSLNG.js"),
|
|
22
22
|
import("../db-Z34LPZNR.js")
|
|
23
23
|
]);
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runMcpScraperStdio
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-TV32LC76.js";
|
|
5
|
+
import "../chunk-QJJQ4OAZ.js";
|
|
6
6
|
import "../chunk-PGJQDMC2.js";
|
|
7
7
|
import "../chunk-DNM65UCK.js";
|
|
8
8
|
import "../chunk-T3MZISOF.js";
|
|
@@ -13,7 +13,7 @@ import "../chunk-OPQIGAFB.js";
|
|
|
13
13
|
import "../chunk-3JRZZVWL.js";
|
|
14
14
|
import "../chunk-P7FWOMU7.js";
|
|
15
15
|
import "../chunk-GGZEC22A.js";
|
|
16
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-BA6BPDSP.js";
|
|
17
17
|
import "../chunk-YXNDOQXN.js";
|
|
18
18
|
|
|
19
19
|
// src/mcp/thorbit-restricted-tool-surface.ts
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "../chunk-3JRZZVWL.js";
|
|
5
5
|
import {
|
|
6
6
|
PACKAGE_VERSION
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-BA6BPDSP.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;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runMcpScraperStdio
|
|
4
|
-
} from "../chunk-
|
|
5
|
-
import "../chunk-
|
|
4
|
+
} from "../chunk-TV32LC76.js";
|
|
5
|
+
import "../chunk-QJJQ4OAZ.js";
|
|
6
6
|
import "../chunk-PGJQDMC2.js";
|
|
7
7
|
import "../chunk-DNM65UCK.js";
|
|
8
8
|
import "../chunk-T3MZISOF.js";
|
|
@@ -13,7 +13,7 @@ import "../chunk-OPQIGAFB.js";
|
|
|
13
13
|
import "../chunk-3JRZZVWL.js";
|
|
14
14
|
import "../chunk-P7FWOMU7.js";
|
|
15
15
|
import "../chunk-GGZEC22A.js";
|
|
16
|
-
import "../chunk-
|
|
16
|
+
import "../chunk-BA6BPDSP.js";
|
|
17
17
|
import "../chunk-YXNDOQXN.js";
|
|
18
18
|
|
|
19
19
|
// bin/mcp-stdio-server.ts
|
|
@@ -12,13 +12,13 @@ import {
|
|
|
12
12
|
registerScheduledResultsMcpTools,
|
|
13
13
|
registerSerpIntelligenceCaptureTools,
|
|
14
14
|
resolveDeploymentProfile
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-QJJQ4OAZ.js";
|
|
16
16
|
import {
|
|
17
17
|
renderInstallTerminal
|
|
18
18
|
} from "./chunk-3JRZZVWL.js";
|
|
19
19
|
import {
|
|
20
20
|
PACKAGE_VERSION
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-BA6BPDSP.js";
|
|
22
22
|
|
|
23
23
|
// src/mcp/stdio-runtime.ts
|
|
24
24
|
import { readFileSync } from "fs";
|
|
@@ -388,7 +388,7 @@ import {
|
|
|
388
388
|
transcribeMediaUrl,
|
|
389
389
|
transitionAnalyticsExperiment,
|
|
390
390
|
validateAnalyticsRestResponseForRequest
|
|
391
|
-
} from "./chunk-
|
|
391
|
+
} from "./chunk-QJJQ4OAZ.js";
|
|
392
392
|
import {
|
|
393
393
|
auditImageUrls,
|
|
394
394
|
auditImages,
|
|
@@ -509,7 +509,7 @@ import {
|
|
|
509
509
|
} from "./chunk-GGZEC22A.js";
|
|
510
510
|
import {
|
|
511
511
|
PACKAGE_VERSION
|
|
512
|
-
} from "./chunk-
|
|
512
|
+
} from "./chunk-BA6BPDSP.js";
|
|
513
513
|
import {
|
|
514
514
|
CaptchaError,
|
|
515
515
|
MapsSearchIncompletePageError,
|
|
@@ -21105,9 +21105,9 @@ async function expandRenderedComments(page3, deadlineAt) {
|
|
|
21105
21105
|
}
|
|
21106
21106
|
|
|
21107
21107
|
// src/kernel-reddit/service.ts
|
|
21108
|
-
var KERNEL_REDDIT_THREAD_ATTEMPT_MS =
|
|
21109
|
-
var KERNEL_CONTROL_TIMEOUT_MS =
|
|
21110
|
-
var CLEANUP_TIMEOUT_MS =
|
|
21108
|
+
var KERNEL_REDDIT_THREAD_ATTEMPT_MS = 8e3;
|
|
21109
|
+
var KERNEL_CONTROL_TIMEOUT_MS = 3e3;
|
|
21110
|
+
var CLEANUP_TIMEOUT_MS = 1e3;
|
|
21111
21111
|
function remainingTimeout(deadlineAt, maximumMs) {
|
|
21112
21112
|
const remaining = deadlineAt - Date.now();
|
|
21113
21113
|
if (remaining <= 0) throw new Error("Kernel Reddit browser attempt deadline exceeded");
|
|
@@ -21650,9 +21650,9 @@ var BLOCKED_RESOURCE_TYPES = /* @__PURE__ */ new Set(["image", "media", "font",
|
|
|
21650
21650
|
var BLOCKED_HOSTS = /* @__PURE__ */ new Set(["styles.redditmedia.com", "preview.redd.it"]);
|
|
21651
21651
|
var REQUIRED_HOSTS = /* @__PURE__ */ new Set(["external-preview.redd.it", "googletagmanager.com"]);
|
|
21652
21652
|
var MAX_COMMENTS = 25;
|
|
21653
|
-
var
|
|
21654
|
-
var BRIGHT_DATA_REDDIT_ATTEMPT_MS =
|
|
21655
|
-
var CLEANUP_TIMEOUT_MS2 =
|
|
21653
|
+
var INLINE_TELEMETRY_TIMEOUT_MS = 500;
|
|
21654
|
+
var BRIGHT_DATA_REDDIT_ATTEMPT_MS = 17e3;
|
|
21655
|
+
var CLEANUP_TIMEOUT_MS2 = 1e3;
|
|
21656
21656
|
function remainingTimeout2(deadlineAt, maximumMs) {
|
|
21657
21657
|
const remaining = deadlineAt - Date.now();
|
|
21658
21658
|
if (remaining <= 0) throw new Error("Bright Data Reddit browser attempt deadline exceeded");
|
|
@@ -21693,18 +21693,9 @@ function isAcceptedRedditThread(thread, requestedComments) {
|
|
|
21693
21693
|
function hashSessionId(sessionId) {
|
|
21694
21694
|
return sessionId ? createHash6("sha256").update(sessionId).digest("hex").slice(0, 16) : null;
|
|
21695
21695
|
}
|
|
21696
|
-
async function sleep(ms) {
|
|
21697
|
-
if (ms > 0) await new Promise((resolve3) => setTimeout(resolve3, ms));
|
|
21698
|
-
}
|
|
21699
21696
|
async function reconcileSession(sessionId) {
|
|
21700
21697
|
if (!sessionId) return null;
|
|
21701
|
-
|
|
21702
|
-
for (const delayMs of TELEMETRY_RETRY_DELAYS_MS) {
|
|
21703
|
-
await sleep(delayMs);
|
|
21704
|
-
latest = await lookupBrightDataSession(sessionId);
|
|
21705
|
-
if (latest.lookupStatus === "complete") break;
|
|
21706
|
-
if (latest.lookupStatus === "unavailable_credentials" || latest.lookupStatus === "invalid_payload") break;
|
|
21707
|
-
}
|
|
21698
|
+
const latest = await lookupBrightDataSession(sessionId, { timeoutMs: INLINE_TELEMETRY_TIMEOUT_MS });
|
|
21708
21699
|
await recordPendingBrightDataRedditUsage(sessionId, latest);
|
|
21709
21700
|
return latest;
|
|
21710
21701
|
}
|
|
@@ -40026,13 +40017,13 @@ function validateNewRecord(vault, props) {
|
|
|
40026
40017
|
function shouldRetryMemoryRead(error) {
|
|
40027
40018
|
return /deadlock|timeout|timed out|temporar|econnreset|fetch failed/i.test(error ?? "");
|
|
40028
40019
|
}
|
|
40029
|
-
function
|
|
40020
|
+
function sleep(ms) {
|
|
40030
40021
|
return new Promise((resolve3) => setTimeout(resolve3, ms));
|
|
40031
40022
|
}
|
|
40032
40023
|
async function readMemory(tool, args, token7) {
|
|
40033
40024
|
let result3 = await memoryCall(tool, args, token7);
|
|
40034
40025
|
for (let attempt = 1; !result3.ok && attempt < MAX_MEMORY_READ_ATTEMPTS && shouldRetryMemoryRead(result3.error); attempt += 1) {
|
|
40035
|
-
await
|
|
40026
|
+
await sleep(attempt * 150);
|
|
40036
40027
|
result3 = await memoryCall(tool, args, token7);
|
|
40037
40028
|
}
|
|
40038
40029
|
return result3;
|