mcp-scraper 0.66.2 → 0.66.3

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,16 @@ All notable changes to MCP Scraper are documented here. The format is based on [
4
4
 
5
5
  ## [Unreleased]
6
6
 
7
+ ## [0.66.3] - 2026-08-25
8
+
9
+ ### Changed
10
+
11
+ - Runtime MCP discovery now omits output schemas across hosted OAuth, API-key, npm stdio, and MCPB clients, while the complete generated developer contract continues to supply typed Node and Python SDK outputs.
12
+
13
+ ### Fixed
14
+
15
+ - Restored compatibility for strict MCP clients that could connect successfully but silently register zero tools when the complete output-schema catalog was advertised; tool calls retain both readable content and structured results.
16
+
7
17
  ## [0.66.2] - 2026-08-24
8
18
 
9
19
  ### Changed
@@ -1088,7 +1098,8 @@ All notable changes to MCP Scraper are documented here. The format is based on [
1088
1098
  - Write actions remain unavailable until the account owner explicitly enables them.
1089
1099
  - Provider-specific connection data is normalized into one agent-facing contract.
1090
1100
 
1091
- [Unreleased]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.2...HEAD
1101
+ [Unreleased]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.3...HEAD
1102
+ [0.66.3]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.2...v0.66.3
1092
1103
  [0.66.2]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.1...v0.66.2
1093
1104
  [0.66.1]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.66.0...v0.66.1
1094
1105
  [0.66.0]: https://github.com/VilovietaSEO/mcp-scraper/compare/v0.65.1...v0.66.0
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.2`, SHA-256 `0ed9a49cc80f3d8b2da41039e9a9baeeb77b3f626cd9f98a4e2c84e566e1a79d`). 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.3`, SHA-256 `353b034b878340971fc1e07ca2ccf11578d6fd2e2ff894c8da1fa7df2c2bbd2d`). 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
 
@@ -315,7 +315,7 @@ For Google SERP and Maps tools, callers provide the query, two-letter country co
315
315
 
316
316
  The `mcp-scraper` server (and the MCPB bundle, which runs it) exposes both sections through one MCP server.
317
317
 
318
- All MCP tools expose output schemas and return `structuredContent` with the IDs, URLs, CSV paths, transcripts, browser session handles, replay paths, artifacts, recipe fields, or blueprint fields needed by the next step. Browser Agent tools keep a JSON text block for older clients, but structured data is the primary contract. All tools carry MCP annotations; file-writing tools such as replay downloads and annotations state their filesystem side effects.
318
+ All MCP tools return `structuredContent` with the IDs, URLs, CSV paths, transcripts, browser session handles, replay paths, artifacts, recipe fields, or blueprint fields needed by the next step, plus readable text content for compatibility. Runtime `tools/list` omits output schemas so strict clients can register the complete catalog; the generated developer manifest retains every canonical output schema for validation and typed SDK generation. All tools carry MCP annotations; file-writing tools such as replay downloads and annotations state their filesystem side effects.
319
319
 
320
320
  The canonical tool inventory is generated at `docs/mcp-tool-manifest.generated.json`. The unified server exposes 259 tools: 158 scraper, browser, workflow, billing, and connected-service tools plus 101 durable-memory tools. The scraper-side inventory includes rendered site-content similarity, governed Local Sourcebook tools, Transparent Commons entity, linkset, and publication tools, direct site-export text and image readers, the searchable News Publisher and Editorial Reading Room template workflow, and 24 X-Ray tools for pixel administration, reporting, attribution journeys, campaign links, exports, and scheduled reports. Successful evidence-compiled Local Sourcebook revisions publish automatically to their canonical `localsourcebook.com` category profile and review URLs; administrator controls handle exceptional rejection or unpublishing. Release verification compares the exact local and hosted tool-name sets, not only the count.
321
321
 
@@ -49679,7 +49679,7 @@ var PACKAGE_VERSION;
49679
49679
  var init_version = __esm({
49680
49680
  "src/version.ts"() {
49681
49681
  "use strict";
49682
- PACKAGE_VERSION = "0.66.2";
49682
+ PACKAGE_VERSION = "0.66.3";
49683
49683
  }
49684
49684
  });
49685
49685
 
@@ -50109,14 +50109,30 @@ var init_server_instructions = __esm({
50109
50109
  });
50110
50110
 
50111
50111
  // src/mcp/output-schema-registry.ts
50112
+ function resolveOutputSchemaMode(env = process.env) {
50113
+ const requested = env.MCP_SCRAPER_OUTPUT_SCHEMA_MODE?.trim().toLowerCase();
50114
+ if (requested) {
50115
+ if (requested === "contract" || requested === "all") return "contract";
50116
+ if (requested === "runtime" || requested === "none" || requested === "essential") return "runtime";
50117
+ throw new Error(`Unsupported MCP_SCRAPER_OUTPUT_SCHEMA_MODE: ${requested}`);
50118
+ }
50119
+ const legacyAdvertisement = env.MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS?.trim().toLowerCase();
50120
+ if (legacyAdvertisement === "true") return "contract";
50121
+ if (legacyAdvertisement === void 0 || legacyAdvertisement === "" || legacyAdvertisement === "false") {
50122
+ return "runtime";
50123
+ }
50124
+ throw new Error(`Unsupported MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS value: ${legacyAdvertisement}`);
50125
+ }
50112
50126
  function recordOutputSchema(name, schema) {
50113
50127
  OUTPUT_SCHEMAS[name] = schema;
50114
- return schema;
50128
+ return ADVERTISE_OUTPUT_SCHEMAS ? schema : void 0;
50115
50129
  }
50116
- var OUTPUT_SCHEMAS;
50130
+ var OUTPUT_SCHEMA_MODE, ADVERTISE_OUTPUT_SCHEMAS, OUTPUT_SCHEMAS;
50117
50131
  var init_output_schema_registry = __esm({
50118
50132
  "src/mcp/output-schema-registry.ts"() {
50119
50133
  "use strict";
50134
+ OUTPUT_SCHEMA_MODE = resolveOutputSchemaMode();
50135
+ ADVERTISE_OUTPUT_SCHEMAS = OUTPUT_SCHEMA_MODE === "contract";
50120
50136
  OUTPUT_SCHEMAS = {};
50121
50137
  }
50122
50138
  });
@@ -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-Q7VYGSGQ.js"),
20
+ import("../server-D47PNEXR.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.2";
33
+ var PACKAGE_VERSION = "0.66.3";
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-ALEBMPOW.js";
16
+ } from "../chunk-JBFLOJGM.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: "PAA work now starts immediately on the direct runtime, and every MCP Scraper install exposes the same complete typed tool contract."
6
+ message: "Strict MCP clients now discover all 259 tools through a compact runtime catalog, while generated SDKs retain complete output types."
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.2";
115
+ var PACKAGE_VERSION = "0.66.3";
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-OZDCTNUV.js";
4
+ } from "../chunk-2XVDLF6H.js";
5
5
  import {
6
6
  PACKAGE_VERSION
7
- } from "../chunk-ALEBMPOW.js";
7
+ } from "../chunk-JBFLOJGM.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;
@@ -1232,7 +1232,7 @@ render();
1232
1232
  }
1233
1233
 
1234
1234
  // src/version.ts
1235
- var PACKAGE_VERSION = "0.66.2";
1235
+ var PACKAGE_VERSION = "0.66.3";
1236
1236
 
1237
1237
  // src/mcp/input-field-descriptions.ts
1238
1238
  var import_zod = require("zod");
@@ -2237,10 +2237,26 @@ async function annotateReplayVideo(inputFilePath, outputFilePath, options) {
2237
2237
  }
2238
2238
 
2239
2239
  // src/mcp/output-schema-registry.ts
2240
+ function resolveOutputSchemaMode(env = process.env) {
2241
+ const requested = env.MCP_SCRAPER_OUTPUT_SCHEMA_MODE?.trim().toLowerCase();
2242
+ if (requested) {
2243
+ if (requested === "contract" || requested === "all") return "contract";
2244
+ if (requested === "runtime" || requested === "none" || requested === "essential") return "runtime";
2245
+ throw new Error(`Unsupported MCP_SCRAPER_OUTPUT_SCHEMA_MODE: ${requested}`);
2246
+ }
2247
+ const legacyAdvertisement = env.MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS?.trim().toLowerCase();
2248
+ if (legacyAdvertisement === "true") return "contract";
2249
+ if (legacyAdvertisement === void 0 || legacyAdvertisement === "" || legacyAdvertisement === "false") {
2250
+ return "runtime";
2251
+ }
2252
+ throw new Error(`Unsupported MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS value: ${legacyAdvertisement}`);
2253
+ }
2254
+ var OUTPUT_SCHEMA_MODE = resolveOutputSchemaMode();
2255
+ var ADVERTISE_OUTPUT_SCHEMAS = OUTPUT_SCHEMA_MODE === "contract";
2240
2256
  var OUTPUT_SCHEMAS = {};
2241
2257
  function recordOutputSchema(name, schema) {
2242
2258
  OUTPUT_SCHEMAS[name] = schema;
2243
- return schema;
2259
+ return ADVERTISE_OUTPUT_SCHEMAS ? schema : void 0;
2244
2260
  }
2245
2261
 
2246
2262
  // src/mcp/browser-agent-mcp-server.ts
@@ -18639,7 +18655,7 @@ var HostedMemoryMcpToolExecutor = class {
18639
18655
 
18640
18656
  // release-message.json
18641
18657
  var release_message_default = {
18642
- message: "PAA work now starts immediately on the direct runtime, and every MCP Scraper install exposes the same complete typed tool contract."
18658
+ message: "Strict MCP clients now discover all 259 tools through a compact runtime catalog, while generated SDKs retain complete output types."
18643
18659
  };
18644
18660
 
18645
18661
  // src/install-terminal.ts
@@ -13,18 +13,18 @@ import {
13
13
  registerScheduledResultsMcpTools,
14
14
  registerSerpIntelligenceCaptureTools,
15
15
  resolveDeploymentProfile
16
- } from "../chunk-YKL3O7IU.js";
16
+ } from "../chunk-LNLMOBP6.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-OZDCTNUV.js";
22
+ } from "../chunk-2XVDLF6H.js";
23
23
  import "../chunk-VXLU74YZ.js";
24
24
  import "../chunk-GGZEC22A.js";
25
25
  import {
26
26
  PACKAGE_VERSION
27
- } from "../chunk-ALEBMPOW.js";
27
+ } from "../chunk-JBFLOJGM.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: "PAA work now starts immediately on the direct runtime, and every MCP Scraper install exposes the same complete typed tool contract."
3
+ message: "Strict MCP clients now discover all 259 tools through a compact runtime catalog, while generated SDKs retain complete output types."
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.2";
2
+ var PACKAGE_VERSION = "0.66.3";
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-ALEBMPOW.js";
28
+ } from "./chunk-JBFLOJGM.js";
29
29
  import {
30
30
  createPrivateArtifact,
31
31
  privateArtifactOwnerId,
@@ -5006,10 +5006,26 @@ ${rows}` : ""
5006
5006
  }
5007
5007
 
5008
5008
  // src/mcp/output-schema-registry.ts
5009
+ function resolveOutputSchemaMode(env = process.env) {
5010
+ const requested = env.MCP_SCRAPER_OUTPUT_SCHEMA_MODE?.trim().toLowerCase();
5011
+ if (requested) {
5012
+ if (requested === "contract" || requested === "all") return "contract";
5013
+ if (requested === "runtime" || requested === "none" || requested === "essential") return "runtime";
5014
+ throw new Error(`Unsupported MCP_SCRAPER_OUTPUT_SCHEMA_MODE: ${requested}`);
5015
+ }
5016
+ const legacyAdvertisement = env.MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS?.trim().toLowerCase();
5017
+ if (legacyAdvertisement === "true") return "contract";
5018
+ if (legacyAdvertisement === void 0 || legacyAdvertisement === "" || legacyAdvertisement === "false") {
5019
+ return "runtime";
5020
+ }
5021
+ throw new Error(`Unsupported MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS value: ${legacyAdvertisement}`);
5022
+ }
5023
+ var OUTPUT_SCHEMA_MODE = resolveOutputSchemaMode();
5024
+ var ADVERTISE_OUTPUT_SCHEMAS = OUTPUT_SCHEMA_MODE === "contract";
5009
5025
  var OUTPUT_SCHEMAS = {};
5010
5026
  function recordOutputSchema(name, schema) {
5011
5027
  OUTPUT_SCHEMAS[name] = schema;
5012
- return schema;
5028
+ return ADVERTISE_OUTPUT_SCHEMAS ? schema : void 0;
5013
5029
  }
5014
5030
 
5015
5031
  // src/mcp/meta-ad-creative-media.ts
@@ -199,7 +199,7 @@ import {
199
199
  resolveDeploymentProfile,
200
200
  resolveLocalSourcebookSchemaType,
201
201
  transcribeMediaUrl
202
- } from "./chunk-YKL3O7IU.js";
202
+ } from "./chunk-LNLMOBP6.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-ALEBMPOW.js";
259
+ } from "./chunk-JBFLOJGM.js";
260
260
  import {
261
261
  SITE_EXTRACT_ARTIFACT_PREFIX,
262
262
  abandonExtractSettlement,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcp-scraper",
3
- "version": "0.66.2",
3
+ "version": "0.66.3",
4
4
  "description": "MCP server for MCP Scraper web intelligence tools",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -37,6 +37,7 @@
37
37
  "build": "tsup",
38
38
  "build:md": "node scripts/build-md-mirror.mjs",
39
39
  "build:mcpb": "npm run build && node scripts/build-mcpb.mjs",
40
+ "build:mcpb:candidate": "npm run build && node scripts/build-mcpb.mjs --candidate",
40
41
  "build:rates": "node --import tsx scripts/gen-rates.ts",
41
42
  "build:geotargets": "node --import tsx scripts/gen-geotargets.ts",
42
43
  "build:blog": "node scripts/run-ts-sandbox-safe.mjs scripts/build-blog.ts",
@@ -79,7 +80,8 @@
79
80
  "db:migrate": "node --import tsx scripts/run-core-migration.ts",
80
81
  "analytics:migrate": "node --import tsx scripts/run-analytics-migration.ts",
81
82
  "analytics:rollups": "node --import tsx scripts/run-analytics-rollups.ts",
82
- "mcp:verify": "npm run build && npm run mcp:manifest && npm run build:rates && npm run mcp:measure-catalog && npm run mcp:lint-tools && npm run typecheck && npm test && npm run package:verify-entrypoints",
83
+ "test:mcp-output-contract": "vitest run --config vitest.mcp-output-contract.config.ts tests/unit/golden-payloads.test.ts tests/unit/mcp-formatter-structured.test.ts tests/unit/mcp-2026-stdio.test.ts",
84
+ "mcp:verify": "npm run build && npm run mcp:manifest && npm run build:rates && npm run mcp:measure-catalog && npm run mcp:lint-tools && npm run test:mcp-output-contract && npm run typecheck && npm test && npm run package:verify-entrypoints",
83
85
  "prepack": "npm run mcp:verify",
84
86
  "package:verify-entrypoints": "node scripts/verify-package-entrypoints.mjs"
85
87
  },