mcp-scraper 0.72.6 → 0.72.7
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 +8 -1
- package/README.md +1 -1
- package/dist/bin/api-server.cjs +13 -5
- package/dist/bin/api-server.js +1 -1
- package/dist/bin/mcp-scraper-cli.cjs +1 -1
- package/dist/bin/mcp-scraper-cli.js +1 -1
- package/dist/bin/mcp-scraper-install.cjs +1 -1
- package/dist/bin/mcp-scraper-install.js +1 -1
- package/dist/bin/mcp-stdio-server.cjs +1 -1
- package/dist/bin/mcp-stdio-server.js +2 -2
- package/dist/{chunk-D5CX3WHG.js → chunk-RRZAYUEX.js} +1 -1
- package/dist/{chunk-XRH2DUAQ.js → chunk-ZSVXNLLM.js} +1 -1
- package/dist/{server-LQ6TMI5W.js → server-M5FLUWYD.js} +14 -6
- package/package.json +1 -1
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.72.7] - 2026-08-27
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- Completed Gmail Memory imports now report recovered historical errors as resolved and derive attachment indexing from the verified nested file-asset receipts, keeping counts and sample states consistent with durable Memory state.
|
|
12
|
+
|
|
7
13
|
## [0.72.6] - 2026-08-27
|
|
8
14
|
|
|
9
15
|
### Fixed
|
|
@@ -1278,7 +1284,8 @@ All notable changes to MCP Scraper are documented here. The format is based on [
|
|
|
1278
1284
|
- Write actions remain unavailable until the account owner explicitly enables them.
|
|
1279
1285
|
- Provider-specific connection data is normalized into one agent-facing contract.
|
|
1280
1286
|
|
|
1281
|
-
[Unreleased]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.72.
|
|
1287
|
+
[Unreleased]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.72.7...HEAD
|
|
1288
|
+
[0.72.7]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.72.6...v0.72.7
|
|
1282
1289
|
[0.72.6]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.72.5...v0.72.6
|
|
1283
1290
|
[0.72.5]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.72.4...v0.72.5
|
|
1284
1291
|
[0.72.4]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.72.3...v0.72.4
|
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.72.
|
|
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.72.7`, SHA-256 `f33e2aa375a3a9e4a497bd03306db559a7c40282bd741b241c65b688d21e1dc2`). 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
|
|
package/dist/bin/api-server.cjs
CHANGED
|
@@ -45090,6 +45090,13 @@ function normalizeProgress(value) {
|
|
|
45090
45090
|
function errorCode2(error) {
|
|
45091
45091
|
return error && typeof error === "object" && typeof error.code === "string" ? String(error.code) : "import_step_failed";
|
|
45092
45092
|
}
|
|
45093
|
+
function gmailMemoryReceiptIndexed(receipt) {
|
|
45094
|
+
const object2 = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
45095
|
+
const asset = object2(receipt.asset);
|
|
45096
|
+
const verified = object2(receipt.verified);
|
|
45097
|
+
const verifiedAsset = object2(verified.asset);
|
|
45098
|
+
return [receipt.extractionStatus, receipt.status, asset.extractionStatus, asset.status, verified.extractionStatus, verified.status, verifiedAsset.extractionStatus, verifiedAsset.status].some((value) => value === "indexed");
|
|
45099
|
+
}
|
|
45093
45100
|
function gmailAttachmentSourceIdentity(messageId, messageDigest, partId, attachmentDigest) {
|
|
45094
45101
|
return `gmail:${messageId}:${messageDigest}:${partId}:${attachmentDigest}`;
|
|
45095
45102
|
}
|
|
@@ -45233,7 +45240,7 @@ var init_gmail_memory_ingest = __esm({
|
|
|
45233
45240
|
});
|
|
45234
45241
|
progress.checkpoints[attachmentKey] = receipt;
|
|
45235
45242
|
progress.attachmentsStored += 1;
|
|
45236
|
-
if (
|
|
45243
|
+
if (gmailMemoryReceiptIndexed(receipt)) progress.attachmentsIndexed += 1;
|
|
45237
45244
|
job = await checkpoint({ progress });
|
|
45238
45245
|
}
|
|
45239
45246
|
}
|
|
@@ -45483,17 +45490,18 @@ function publicImportStatus(job, plan) {
|
|
|
45483
45490
|
const errors = Array.isArray(progress.errors) ? progress.errors : [];
|
|
45484
45491
|
const storedMessages = Number(progress.messagesStored ?? 0);
|
|
45485
45492
|
const storedAttachments = Number(progress.attachmentsStored ?? 0);
|
|
45486
|
-
const
|
|
45493
|
+
const indexedAttachmentCheckpoints = Object.entries(checkpoints).filter(([sourceKey, receipt]) => sourceKey.startsWith("attachment:") && gmailMemoryReceiptIndexed(object(receipt))).length;
|
|
45494
|
+
const indexedAttachments = Math.max(Number(progress.attachmentsIndexed ?? 0), indexedAttachmentCheckpoints);
|
|
45487
45495
|
const terminal = job.status === "complete" || job.status === "partial" || job.status === "failed";
|
|
45488
45496
|
return {
|
|
45489
45497
|
ingestId: job.ingestId,
|
|
45490
45498
|
importPlanId: job.importPlanId,
|
|
45491
45499
|
status: job.status,
|
|
45492
|
-
messages: { planned: plan?.messageCount ?? storedMessages, stored: storedMessages, indexed: storedMessages, failed: errors.length },
|
|
45500
|
+
messages: { planned: plan?.messageCount ?? storedMessages, stored: storedMessages, indexed: storedMessages, failed: job.status === "failed" ? Math.max(1, errors.length) : 0 },
|
|
45493
45501
|
attachments: { planned: plan?.attachmentCount ?? storedAttachments, stored: storedAttachments, indexed: indexedAttachments, storedUnindexed: Math.max(0, storedAttachments - indexedAttachments), failed: 0 },
|
|
45494
45502
|
manifestStored: !!checkpoints.manifest,
|
|
45495
45503
|
complete: job.status === "complete",
|
|
45496
|
-
samples: Object.entries(checkpoints).slice(0, 25).map(([sourceKey, receipt]) => ({ sourceKey, state: sourceKey === "manifest" ||
|
|
45504
|
+
samples: Object.entries(checkpoints).slice(0, 25).map(([sourceKey, receipt]) => ({ sourceKey, state: sourceKey === "manifest" || sourceKey.startsWith("message:") || gmailMemoryReceiptIndexed(object(receipt)) ? "indexed" : "stored_unindexed", ...string(object(receipt).path) ? { path: object(receipt).path } : {} })),
|
|
45497
45505
|
nextAction: terminal ? job.status === "complete" ? "complete" : "inspect_failures" : job.leaseExpiresAt ? "call_gmail_import_status" : "call_gmail_import_to_memory"
|
|
45498
45506
|
};
|
|
45499
45507
|
}
|
|
@@ -54204,7 +54212,7 @@ var PACKAGE_VERSION;
|
|
|
54204
54212
|
var init_version = __esm({
|
|
54205
54213
|
"src/version.ts"() {
|
|
54206
54214
|
"use strict";
|
|
54207
|
-
PACKAGE_VERSION = "0.72.
|
|
54215
|
+
PACKAGE_VERSION = "0.72.7";
|
|
54208
54216
|
}
|
|
54209
54217
|
});
|
|
54210
54218
|
|
package/dist/bin/api-server.js
CHANGED
|
@@ -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-
|
|
20
|
+
import("../server-M5FLUWYD.js"),
|
|
21
21
|
import("../worker-JQORPCFQ.js"),
|
|
22
22
|
import("../db-566MOHHD.js")
|
|
23
23
|
]);
|
|
@@ -112,7 +112,7 @@ function renderInstallTerminal(options) {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
// src/version.ts
|
|
115
|
-
var PACKAGE_VERSION = "0.72.
|
|
115
|
+
var PACKAGE_VERSION = "0.72.7";
|
|
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;
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "../chunk-RAFQEPJ4.js";
|
|
5
5
|
import {
|
|
6
6
|
PACKAGE_VERSION
|
|
7
|
-
} from "../chunk-
|
|
7
|
+
} from "../chunk-RRZAYUEX.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;
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
registerScheduledResultsMcpTools,
|
|
14
14
|
registerSerpIntelligenceCaptureTools,
|
|
15
15
|
resolveDeploymentProfile
|
|
16
|
-
} from "../chunk-
|
|
16
|
+
} from "../chunk-ZSVXNLLM.js";
|
|
17
17
|
import "../chunk-PGJQDMC2.js";
|
|
18
18
|
import "../chunk-T3MZISOF.js";
|
|
19
19
|
import "../chunk-7RQULQF3.js";
|
|
@@ -26,7 +26,7 @@ import "../chunk-VXLU74YZ.js";
|
|
|
26
26
|
import "../chunk-GGZEC22A.js";
|
|
27
27
|
import {
|
|
28
28
|
PACKAGE_VERSION
|
|
29
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-RRZAYUEX.js";
|
|
30
30
|
import "../chunk-DNM65UCK.js";
|
|
31
31
|
import "../chunk-FVL4GUTP.js";
|
|
32
32
|
import "../chunk-WEFPBAAG.js";
|
|
@@ -271,7 +271,7 @@ import {
|
|
|
271
271
|
resolveDeploymentProfile,
|
|
272
272
|
resolveLocalSourcebookSchemaType,
|
|
273
273
|
transcribeMediaUrl
|
|
274
|
-
} from "./chunk-
|
|
274
|
+
} from "./chunk-ZSVXNLLM.js";
|
|
275
275
|
import {
|
|
276
276
|
auditImageUrls,
|
|
277
277
|
auditImages,
|
|
@@ -336,7 +336,7 @@ import {
|
|
|
336
336
|
} from "./chunk-GGZEC22A.js";
|
|
337
337
|
import {
|
|
338
338
|
PACKAGE_VERSION
|
|
339
|
-
} from "./chunk-
|
|
339
|
+
} from "./chunk-RRZAYUEX.js";
|
|
340
340
|
import {
|
|
341
341
|
SITE_EXTRACT_ARTIFACT_PREFIX,
|
|
342
342
|
abandonExtractSettlement,
|
|
@@ -21631,7 +21631,7 @@ var GmailMemoryIngestService = class {
|
|
|
21631
21631
|
});
|
|
21632
21632
|
progress.checkpoints[attachmentKey] = receipt;
|
|
21633
21633
|
progress.attachmentsStored += 1;
|
|
21634
|
-
if (
|
|
21634
|
+
if (gmailMemoryReceiptIndexed(receipt)) progress.attachmentsIndexed += 1;
|
|
21635
21635
|
job = await checkpoint({ progress });
|
|
21636
21636
|
}
|
|
21637
21637
|
}
|
|
@@ -21675,6 +21675,13 @@ function normalizeProgress(value) {
|
|
|
21675
21675
|
function errorCode(error) {
|
|
21676
21676
|
return error && typeof error === "object" && typeof error.code === "string" ? String(error.code) : "import_step_failed";
|
|
21677
21677
|
}
|
|
21678
|
+
function gmailMemoryReceiptIndexed(receipt) {
|
|
21679
|
+
const object2 = (value) => value && typeof value === "object" && !Array.isArray(value) ? value : {};
|
|
21680
|
+
const asset = object2(receipt.asset);
|
|
21681
|
+
const verified = object2(receipt.verified);
|
|
21682
|
+
const verifiedAsset = object2(verified.asset);
|
|
21683
|
+
return [receipt.extractionStatus, receipt.status, asset.extractionStatus, asset.status, verified.extractionStatus, verified.status, verifiedAsset.extractionStatus, verifiedAsset.status].some((value) => value === "indexed");
|
|
21684
|
+
}
|
|
21678
21685
|
function gmailAttachmentSourceIdentity(messageId, messageDigest, partId, attachmentDigest) {
|
|
21679
21686
|
return `gmail:${messageId}:${messageDigest}:${partId}:${attachmentDigest}`;
|
|
21680
21687
|
}
|
|
@@ -21897,17 +21904,18 @@ function publicImportStatus(job, plan) {
|
|
|
21897
21904
|
const errors = Array.isArray(progress.errors) ? progress.errors : [];
|
|
21898
21905
|
const storedMessages = Number(progress.messagesStored ?? 0);
|
|
21899
21906
|
const storedAttachments = Number(progress.attachmentsStored ?? 0);
|
|
21900
|
-
const
|
|
21907
|
+
const indexedAttachmentCheckpoints = Object.entries(checkpoints).filter(([sourceKey, receipt]) => sourceKey.startsWith("attachment:") && gmailMemoryReceiptIndexed(object(receipt))).length;
|
|
21908
|
+
const indexedAttachments = Math.max(Number(progress.attachmentsIndexed ?? 0), indexedAttachmentCheckpoints);
|
|
21901
21909
|
const terminal = job.status === "complete" || job.status === "partial" || job.status === "failed";
|
|
21902
21910
|
return {
|
|
21903
21911
|
ingestId: job.ingestId,
|
|
21904
21912
|
importPlanId: job.importPlanId,
|
|
21905
21913
|
status: job.status,
|
|
21906
|
-
messages: { planned: plan?.messageCount ?? storedMessages, stored: storedMessages, indexed: storedMessages, failed: errors.length },
|
|
21914
|
+
messages: { planned: plan?.messageCount ?? storedMessages, stored: storedMessages, indexed: storedMessages, failed: job.status === "failed" ? Math.max(1, errors.length) : 0 },
|
|
21907
21915
|
attachments: { planned: plan?.attachmentCount ?? storedAttachments, stored: storedAttachments, indexed: indexedAttachments, storedUnindexed: Math.max(0, storedAttachments - indexedAttachments), failed: 0 },
|
|
21908
21916
|
manifestStored: !!checkpoints.manifest,
|
|
21909
21917
|
complete: job.status === "complete",
|
|
21910
|
-
samples: Object.entries(checkpoints).slice(0, 25).map(([sourceKey, receipt]) => ({ sourceKey, state: sourceKey === "manifest" ||
|
|
21918
|
+
samples: Object.entries(checkpoints).slice(0, 25).map(([sourceKey, receipt]) => ({ sourceKey, state: sourceKey === "manifest" || sourceKey.startsWith("message:") || gmailMemoryReceiptIndexed(object(receipt)) ? "indexed" : "stored_unindexed", ...string(object(receipt).path) ? { path: object(receipt).path } : {} })),
|
|
21911
21919
|
nextAction: terminal ? job.status === "complete" ? "complete" : "inspect_failures" : job.leaseExpiresAt ? "call_gmail_import_status" : "call_gmail_import_to_memory"
|
|
21912
21920
|
};
|
|
21913
21921
|
}
|