mcp-scraper 0.66.0 → 0.66.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.
Files changed (88) hide show
  1. package/CHANGELOG.md +32 -1
  2. package/README.md +2 -2
  3. package/dist/{analytics-repository-IKE53S3E.js → analytics-repository-RUXBFSFX.js} +1 -2
  4. package/dist/bin/api-server.cjs +2898 -2075
  5. package/dist/bin/api-server.js +4 -5
  6. package/dist/bin/mcp-scraper-cli.cjs +1 -2
  7. package/dist/bin/mcp-scraper-cli.js +6 -7
  8. package/dist/bin/mcp-scraper-install.cjs +7 -3
  9. package/dist/bin/mcp-scraper-install.js +2 -3
  10. package/dist/bin/mcp-stdio-server.cjs +1669 -97
  11. package/dist/bin/mcp-stdio-server.js +11 -12
  12. package/dist/bin/paa-harvest.cjs +0 -1
  13. package/dist/bin/paa-harvest.js +4 -5
  14. package/dist/{chunk-VIWT35S6.js → chunk-3EYALCYK.js} +1 -2
  15. package/dist/{chunk-4LINSJNI.js → chunk-3TKKJQB4.js} +1 -2
  16. package/dist/{chunk-4VG3NUUY.js → chunk-55B3T5L2.js} +23 -28
  17. package/dist/{chunk-FG6LJGJ7.js → chunk-77LQV73B.js} +0 -1
  18. package/dist/{chunk-N54JS5WP.js → chunk-ABYBPODM.js} +1 -2
  19. package/dist/chunk-ALEBMPOW.js +6 -0
  20. package/dist/{chunk-2XUXVKT4.js → chunk-AYJHI2FK.js} +0 -1
  21. package/dist/{chunk-AAGVOPP5.js → chunk-CETDPNMZ.js} +24 -25
  22. package/dist/{chunk-5BEPOFKG.js → chunk-CNLLTD5B.js} +0 -1
  23. package/dist/{chunk-P7YFUNKR.js → chunk-DBWWIK7O.js} +3 -4
  24. package/dist/{chunk-EKJ65E3Z.js → chunk-DNM65UCK.js} +0 -1
  25. package/dist/{chunk-3YSEJTMC.js → chunk-GGZEC22A.js} +0 -1
  26. package/dist/{chunk-AJ4YGHG2.js → chunk-K7Y27ND3.js} +3 -14
  27. package/dist/{chunk-XPFRP5QT.js → chunk-KBTUPRTF.js} +3 -4
  28. package/dist/{chunk-5PIO7QBG.js → chunk-KXRWY7DZ.js} +3 -4
  29. package/dist/{chunk-DCWXVAQT.js → chunk-OZDCTNUV.js} +6 -2
  30. package/dist/{chunk-BIUQ6O2Y.js → chunk-OZJMVCDK.js} +0 -1
  31. package/dist/{chunk-X7UG2JCF.js → chunk-PGJQDMC2.js} +1 -2
  32. package/dist/{chunk-DKIG2TEE.js → chunk-PMCT2YQM.js} +2 -3
  33. package/dist/{chunk-G3P3ZDB4.js → chunk-RJ7JVYKU.js} +0 -1
  34. package/dist/{chunk-WD73OFL3.js → chunk-VXLU74YZ.js} +1 -2
  35. package/dist/{chunk-SRRI2HJL.js → chunk-YKL3O7IU.js} +1742 -104
  36. package/dist/{db-BRI465XQ.js → db-4RVZ3NYZ.js} +9 -10
  37. package/dist/{extract-bundle-QAI7JYV2.js → extract-bundle-EA5URLXN.js} +8 -9
  38. package/dist/index.cjs +0 -1
  39. package/dist/index.js +4 -5
  40. package/dist/{lead-list-enrichment-repository-ODWGRVCQ.js → lead-list-enrichment-repository-IBXNWM6H.js} +2 -3
  41. package/dist/{location-data-repository-67MMEVZQ.js → location-data-repository-WHHQUCUI.js} +3 -4
  42. package/dist/{server-MTKWBSAR.js → server-Q7VYGSGQ.js} +450 -1264
  43. package/dist/{site-extract-repository-J3RH3MOS.js → site-extract-repository-NTM4MDQN.js} +4 -5
  44. package/dist/{worker-K7MPPQ7I.js → worker-UTBUWEXQ.js} +8 -9
  45. package/package.json +4 -1
  46. package/dist/analytics-repository-IKE53S3E.js.map +0 -1
  47. package/dist/bin/api-server.cjs.map +0 -1
  48. package/dist/bin/api-server.js.map +0 -1
  49. package/dist/bin/mcp-scraper-cli.cjs.map +0 -1
  50. package/dist/bin/mcp-scraper-cli.js.map +0 -1
  51. package/dist/bin/mcp-scraper-install.cjs.map +0 -1
  52. package/dist/bin/mcp-scraper-install.js.map +0 -1
  53. package/dist/bin/mcp-stdio-server.cjs.map +0 -1
  54. package/dist/bin/mcp-stdio-server.js.map +0 -1
  55. package/dist/bin/paa-harvest.cjs.map +0 -1
  56. package/dist/bin/paa-harvest.js.map +0 -1
  57. package/dist/chunk-2XUXVKT4.js.map +0 -1
  58. package/dist/chunk-3YSEJTMC.js.map +0 -1
  59. package/dist/chunk-4LINSJNI.js.map +0 -1
  60. package/dist/chunk-4VG3NUUY.js.map +0 -1
  61. package/dist/chunk-5BEPOFKG.js.map +0 -1
  62. package/dist/chunk-5PIO7QBG.js.map +0 -1
  63. package/dist/chunk-AAGVOPP5.js.map +0 -1
  64. package/dist/chunk-AJ4YGHG2.js.map +0 -1
  65. package/dist/chunk-BIUQ6O2Y.js.map +0 -1
  66. package/dist/chunk-DCWXVAQT.js.map +0 -1
  67. package/dist/chunk-DKIG2TEE.js.map +0 -1
  68. package/dist/chunk-EKJ65E3Z.js.map +0 -1
  69. package/dist/chunk-FG6LJGJ7.js.map +0 -1
  70. package/dist/chunk-G3P3ZDB4.js.map +0 -1
  71. package/dist/chunk-HDYOVGC6.js +0 -7
  72. package/dist/chunk-HDYOVGC6.js.map +0 -1
  73. package/dist/chunk-N54JS5WP.js.map +0 -1
  74. package/dist/chunk-P7YFUNKR.js.map +0 -1
  75. package/dist/chunk-SRRI2HJL.js.map +0 -1
  76. package/dist/chunk-VIWT35S6.js.map +0 -1
  77. package/dist/chunk-WD73OFL3.js.map +0 -1
  78. package/dist/chunk-X7UG2JCF.js.map +0 -1
  79. package/dist/chunk-XPFRP5QT.js.map +0 -1
  80. package/dist/db-BRI465XQ.js.map +0 -1
  81. package/dist/extract-bundle-QAI7JYV2.js.map +0 -1
  82. package/dist/index.cjs.map +0 -1
  83. package/dist/index.js.map +0 -1
  84. package/dist/lead-list-enrichment-repository-ODWGRVCQ.js.map +0 -1
  85. package/dist/location-data-repository-67MMEVZQ.js.map +0 -1
  86. package/dist/server-MTKWBSAR.js.map +0 -1
  87. package/dist/site-extract-repository-J3RH3MOS.js.map +0 -1
  88. package/dist/worker-K7MPPQ7I.js.map +0 -1
@@ -35,7 +35,7 @@ var import_node_crypto = require("crypto");
35
35
 
36
36
  // src/harvest-timeout.ts
37
37
  var SCRAPE_FUNCTION_MAX_MS = 8e5;
38
- var DEFAULT_TOOL_CLIENT_TIMEOUT_MS = 3e5;
38
+ var DEFAULT_TOOL_CLIENT_TIMEOUT_MS = 59e4;
39
39
  var CLIENT_OVER_SERVER_MARGIN_MS = 15e3;
40
40
  function harvestTimeoutBudget(maxQuestions, serpOnly = false) {
41
41
  const requested = Number.isFinite(maxQuestions) && maxQuestions > 0 ? Math.trunc(maxQuestions) : 30;
@@ -213,8 +213,9 @@ function publicErrorMessage(code) {
213
213
  case "proxy_unavailable":
214
214
  return "The web request could not establish a working connection. Please retry later.";
215
215
  case "harvest_timeout":
216
- case "mcp_request_timeout":
217
216
  return "The request timed out before it completed. Please retry with a smaller request.";
217
+ case "mcp_request_timeout":
218
+ return "The MCP caller stopped waiting before a final response arrived. Durable work may still be running; continue with the returned Task or job handle instead of restarting it.";
218
219
  case "concurrency_limit_exceeded":
219
220
  return "The service is available, but this account has reached its parallel-operation limit. Wait for an active operation to finish or add capacity.";
220
221
  case "unauthorized":
@@ -515,7 +516,7 @@ var HttpMcpToolExecutor = class {
515
516
  retryable: true,
516
517
  path,
517
518
  timeoutMs,
518
- message: `MCP Scraper request exceeded ${Math.round(timeoutMs / 1e3)}s and was cancelled client-side. The operation may still be running or may have already completed and been billed on our side. Retry with fewer results or use the async API for deep harvests. ${timeoutGuidance}`
519
+ message: `MCP Scraper stopped waiting after ${Math.round(timeoutMs / 1e3)}s. This does not prove server-side work stopped: the operation may still be running or may have already completed and been billed. Prefer the returned Task or job handle for long work. ${timeoutGuidance}`
519
520
  })
520
521
  }],
521
522
  isError: true
@@ -598,8 +599,17 @@ var HttpMcpToolExecutor = class {
598
599
  }
599
600
  harvestPaa(input) {
600
601
  const timeoutMs = this.httpTimeoutOverrideMs ?? harvestTimeoutBudget(input.maxQuestions ?? 30).clientMs;
601
- const headers = input.idempotencyKey ? { "Idempotency-Key": input.idempotencyKey } : {};
602
- return this.call("/harvest/sync", input, timeoutMs, "POST", headers, true);
602
+ const { idempotencyKey, ...body } = input;
603
+ const headers = idempotencyKey ? { "Idempotency-Key": idempotencyKey } : {};
604
+ return this.call("/harvest/sync", body, timeoutMs, "POST", headers, true);
605
+ }
606
+ startHarvestPaa(input) {
607
+ const { idempotencyKey, ...body } = input;
608
+ const headers = idempotencyKey ? { "Idempotency-Key": idempotencyKey } : {};
609
+ return this.call("/harvest", body, this.timeoutMs, "POST", headers, true);
610
+ }
611
+ harvestPaaStatus(input) {
612
+ return this.getJson(`/jobs/${encodeURIComponent(input.jobId)}`);
603
613
  }
604
614
  searchSerp(input) {
605
615
  const timeoutMs = this.httpTimeoutOverrideMs ?? harvestTimeoutBudget(0, true).clientMs;
@@ -1222,7 +1232,7 @@ render();
1222
1232
  }
1223
1233
 
1224
1234
  // src/version.ts
1225
- var PACKAGE_VERSION = "0.66.0";
1235
+ var PACKAGE_VERSION = "0.66.2";
1226
1236
 
1227
1237
  // src/mcp/input-field-descriptions.ts
1228
1238
  var import_zod = require("zod");
@@ -2227,60 +2237,10 @@ async function annotateReplayVideo(inputFilePath, outputFilePath, options) {
2227
2237
  }
2228
2238
 
2229
2239
  // src/mcp/output-schema-registry.ts
2230
- var ESSENTIAL_OUTPUT_SCHEMA_TOOLS = /* @__PURE__ */ new Set([
2231
- "extract_url",
2232
- "extract_site",
2233
- "analyze_site_similarity",
2234
- "audit_site",
2235
- "check_site_export",
2236
- "site_export_read",
2237
- "site_export_image",
2238
- "archive_read",
2239
- "report_artifact_read",
2240
- "directory_workflow",
2241
- "directory_workflow_status",
2242
- "lead_list_upload_start",
2243
- "lead_list_import",
2244
- "lead_list_enrich",
2245
- "lead_list_enrich_status",
2246
- "video_frame_analysis",
2247
- "video_frame_analysis_status",
2248
- "workflow_run",
2249
- "workflow_step",
2250
- "workflow_status",
2251
- "workflow_artifact_read",
2252
- "export_connected_service_data",
2253
- "export_search_console_table_data",
2254
- "renew_connected_data_download",
2255
- "browser_open",
2256
- "browser_screenshot",
2257
- "browser_replay_start",
2258
- "browser_replay_stop",
2259
- "browser_replay_download",
2260
- "create_scheduled_run_view_link",
2261
- "get_scheduled_run",
2262
- "library-ingest",
2263
- "image_project_create",
2264
- "image_project_list",
2265
- "image_folder_create",
2266
- "image_folder_list",
2267
- "image_asset_save",
2268
- "image_asset_get",
2269
- "image_asset_list",
2270
- "image_asset_search",
2271
- "image_asset_move",
2272
- "image_asset_delete"
2273
- ]);
2274
- function resolveOutputSchemaMode(env = process.env) {
2275
- const explicit = env.MCP_SCRAPER_OUTPUT_SCHEMA_MODE?.trim().toLowerCase();
2276
- if (explicit === "none" || explicit === "essential" || explicit === "all") return explicit;
2277
- return env.MCP_SCRAPER_ADVERTISE_OUTPUT_SCHEMAS === "true" ? "all" : "none";
2278
- }
2279
- var OUTPUT_SCHEMA_MODE = resolveOutputSchemaMode();
2280
2240
  var OUTPUT_SCHEMAS = {};
2281
2241
  function recordOutputSchema(name, schema) {
2282
2242
  OUTPUT_SCHEMAS[name] = schema;
2283
- return OUTPUT_SCHEMA_MODE === "all" || OUTPUT_SCHEMA_MODE === "essential" && ESSENTIAL_OUTPUT_SCHEMA_TOOLS.has(name) ? schema : void 0;
2243
+ return schema;
2284
2244
  }
2285
2245
 
2286
2246
  // src/mcp/browser-agent-mcp-server.ts
@@ -9772,7 +9732,7 @@ var HarvestPaaInputSchema = {
9772
9732
  gl: import_zod8.z.string().length(2).default("us").describe("Google country code inferred from location or user language."),
9773
9733
  hl: import_zod8.z.string().default("en").describe("Google interface/content language inferred from the user request."),
9774
9734
  device: import_zod8.z.enum(["desktop", "mobile"]).default("desktop").describe("SERP device context. Use mobile only for mobile rankings."),
9775
- idempotencyKey: import_zod8.z.string().trim().min(8).max(200).optional().describe("Retry key: reuse after a timeout to avoid re-billing. New key per harvest."),
9735
+ idempotencyKey: import_zod8.z.string().trim().min(8).max(200).optional().describe("Optional duplicate-start key. Reuse it only after an uncertain or lost response to the same logical call; use a new key for an intentional retry after a terminal failure. This is not the run identifier."),
9776
9736
  serpIdentity: import_zod8.z.string().regex(/^[a-z0-9][a-z0-9_-]{0,63}$/).optional().describe("Optional persistent SERP identity created with serp_identity_create. Reuses the same saved browser state and fixed network address across calls."),
9777
9737
  includeAllSerpFeatures: import_zod8.z.boolean().default(false).describe("Capture every optional same-page SERP surface: local pack, forums, videos, AI Overview/AI Mode, and What People Are Saying."),
9778
9738
  includeLocalPack: import_zod8.z.boolean().default(false).describe("Include Google local/map-pack businesses and merge their entity IDs."),
@@ -9782,6 +9742,9 @@ var HarvestPaaInputSchema = {
9782
9742
  includeWhatPeopleSaying: import_zod8.z.boolean().default(false).describe("Include the What People Are Saying social surface when present."),
9783
9743
  debug: import_zod8.z.boolean().default(false).describe("Include sanitized diagnostics for debugging.")
9784
9744
  };
9745
+ var HarvestPaaHostedInputSchema = Object.fromEntries(
9746
+ Object.entries(HarvestPaaInputSchema).filter(([name]) => name !== "debug")
9747
+ );
9785
9748
  var ExtractUrlBaseInputSchema = {
9786
9749
  url: import_zod8.z.string().url().describe("Public http/https URL to extract."),
9787
9750
  screenshot: import_zod8.z.boolean().default(false).describe("Capture a full-page screenshot. Large captures may be offloaded to an owned artifact."),
@@ -13043,7 +13006,7 @@ function decodeTaskHandle(taskId, secret, ownerId) {
13043
13006
  decipher.update(ciphertext),
13044
13007
  decipher.final()
13045
13008
  ]).toString("utf8"));
13046
- if (parsed.v !== 1 || parsed.ownerId !== ownerId || !["site_export", "directory_workflow", "video_frame_analysis", "lead_list_enrichment"].includes(String(parsed.kind)) || typeof parsed.operationId !== "string" || !parsed.operationId || typeof parsed.createdAtMs !== "number" || typeof parsed.expiresAtMs !== "number") throw new Error("invalid payload");
13009
+ if (parsed.v !== 1 || parsed.ownerId !== ownerId || !["paa_harvest", "site_export", "directory_workflow", "video_frame_analysis", "lead_list_enrichment"].includes(String(parsed.kind)) || typeof parsed.operationId !== "string" || !parsed.operationId || typeof parsed.createdAtMs !== "number" || typeof parsed.expiresAtMs !== "number") throw new Error("invalid payload");
13047
13010
  if (Date.now() > parsed.expiresAtMs) {
13048
13011
  throw new import_server2.ProtocolError(TASK_INVALID_PARAMS, "Failed to retrieve task: Task has expired");
13049
13012
  }
@@ -13056,9 +13019,25 @@ function decodeTaskHandle(taskId, secret, ownerId) {
13056
13019
  function objectValue(value) {
13057
13020
  return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
13058
13021
  }
13059
- function taskSeed(kind, result) {
13022
+ function resultValue(result) {
13060
13023
  const structured = objectValue(result.structuredContent);
13024
+ if (structured) return structured;
13025
+ const block = result.content.find((item) => item.type === "text");
13026
+ if (!block || block.type !== "text") return void 0;
13027
+ try {
13028
+ return objectValue(JSON.parse(block.text));
13029
+ } catch {
13030
+ return void 0;
13031
+ }
13032
+ }
13033
+ function taskSeed(kind, result) {
13034
+ const structured = resultValue(result);
13061
13035
  if (!structured || result.isError === true) return void 0;
13036
+ if (kind === "paa_harvest") {
13037
+ const operationId2 = structured.job_id ?? structured.jobId;
13038
+ if (typeof operationId2 !== "string" || !["pending", "running"].includes(String(structured.status))) return void 0;
13039
+ return { kind, operationId: operationId2, statusMessage: "PAA harvest started. Progress will be preserved while the client polls this Task." };
13040
+ }
13062
13041
  if (kind === "site_export") {
13063
13042
  const operationId2 = structured.jobId;
13064
13043
  if (typeof operationId2 !== "string" || structured.status !== "pending") return void 0;
@@ -13079,6 +13058,34 @@ function taskSeed(kind, result) {
13079
13058
  if (structured.ok !== true || !["queued", "running", "processing", "pending"].includes(String(structured.status))) return void 0;
13080
13059
  return { kind, operationId, statusMessage: "Video analysis is running." };
13081
13060
  }
13061
+ function createTaskResult(kind, result, options) {
13062
+ const seed = taskSeed(kind, result);
13063
+ if (!seed) return result;
13064
+ const createdAtMs2 = Date.now();
13065
+ const payload = {
13066
+ v: 1,
13067
+ ownerId: options.ownerId,
13068
+ kind: seed.kind,
13069
+ operationId: seed.operationId,
13070
+ createdAtMs: createdAtMs2,
13071
+ expiresAtMs: createdAtMs2 + TASK_TTL_MS
13072
+ };
13073
+ return {
13074
+ resultType: "task",
13075
+ taskId: encodeTaskHandle(payload, options.secret),
13076
+ status: "working",
13077
+ statusMessage: seed.statusMessage,
13078
+ createdAt: new Date(createdAtMs2).toISOString(),
13079
+ lastUpdatedAt: new Date(createdAtMs2).toISOString(),
13080
+ ttlMs: TASK_TTL_MS,
13081
+ pollIntervalMs: TASK_POLL_INTERVAL_MS,
13082
+ // The registered SDK path validates structuredContent against the tool's
13083
+ // terminal output schema before it can serialize a Task envelope. Retain
13084
+ // the bounded start receipt for that path; the hosted HTTP Task seam runs
13085
+ // before terminal-output serialization.
13086
+ ...result.structuredContent ? { structuredContent: result.structuredContent } : {}
13087
+ };
13088
+ }
13082
13089
  function taskBase(payload, taskId) {
13083
13090
  return {
13084
13091
  taskId,
@@ -13089,10 +13096,13 @@ function taskBase(payload, taskId) {
13089
13096
  };
13090
13097
  }
13091
13098
  function statusFrom(result) {
13092
- const status = objectValue(result.structuredContent)?.status;
13099
+ const status = resultValue(result)?.status;
13093
13100
  return typeof status === "string" ? status : void 0;
13094
13101
  }
13095
13102
  async function pollTask(executor, payload) {
13103
+ if (payload.kind === "paa_harvest") {
13104
+ return executor.harvestPaaStatus({ jobId: payload.operationId });
13105
+ }
13096
13106
  if (payload.kind === "site_export") {
13097
13107
  return executor.checkSiteExport({ jobId: payload.operationId });
13098
13108
  }
@@ -13104,6 +13114,30 @@ async function pollTask(executor, payload) {
13104
13114
  }
13105
13115
  return executor.videoFrameAnalysisStatus({ runId: payload.operationId });
13106
13116
  }
13117
+ function taskProgressMessage(kind, result, status) {
13118
+ const value = resultValue(result) ?? {};
13119
+ if (kind === "paa_harvest") {
13120
+ const resultRecord = objectValue(value.result) ?? {};
13121
+ const progress = objectValue(resultRecord.progress) ?? {};
13122
+ const records = Array.isArray(progress.records) ? progress.records.length : 0;
13123
+ const attempts = Array.isArray(value.attempts) ? value.attempts.length : 0;
13124
+ const pieces = [records > 0 ? `${records} questions preserved` : null, attempts > 0 ? `${attempts} attempts recorded` : null].filter(Boolean);
13125
+ return pieces.length > 0 ? `PAA harvest is ${status ?? "running"}: ${pieces.join(", ")}.` : `PAA harvest is ${status ?? "running"}; no question checkpoint has been persisted yet.`;
13126
+ }
13127
+ if (kind === "lead_list_enrichment") {
13128
+ const progress = objectValue(value.progress) ?? {};
13129
+ const completed = typeof progress.completedRows === "number" ? progress.completedRows : null;
13130
+ const total = typeof progress.totalRows === "number" ? progress.totalRows : null;
13131
+ if (completed !== null && total !== null) return `Lead list enrichment is ${status ?? "running"}: ${completed}/${total} rows completed.`;
13132
+ }
13133
+ if (kind === "directory_workflow") {
13134
+ const progress = objectValue(value.progress) ?? {};
13135
+ const completed = typeof progress.completedCities === "number" ? progress.completedCities : null;
13136
+ const total = typeof progress.totalCities === "number" ? progress.totalCities : null;
13137
+ if (completed !== null && total !== null) return `Directory workflow is ${status ?? "running"}: ${completed}/${total} markets completed.`;
13138
+ }
13139
+ return status ? `Underlying operation status: ${status}.` : "Underlying operation is running.";
13140
+ }
13107
13141
  async function cancelTask(executor, payload) {
13108
13142
  if (payload.kind !== "lead_list_enrichment") return;
13109
13143
  const result = await executor.leadListEnrichCancel({ jobId: payload.operationId });
@@ -13120,7 +13154,7 @@ async function detailedTask(executor, taskId, options) {
13120
13154
  return {
13121
13155
  ...base,
13122
13156
  status: "working",
13123
- statusMessage: status ? `Underlying operation status: ${status}.` : "Underlying operation is running."
13157
+ statusMessage: taskProgressMessage(payload.kind, result, status)
13124
13158
  };
13125
13159
  }
13126
13160
  if (payload.kind === "lead_list_enrichment" && status === "failed") {
@@ -13131,6 +13165,22 @@ async function detailedTask(executor, taskId, options) {
13131
13165
  result
13132
13166
  };
13133
13167
  }
13168
+ if (payload.kind === "paa_harvest" && status === "failed") {
13169
+ return {
13170
+ ...base,
13171
+ status: "failed",
13172
+ statusMessage: "PAA harvest failed; persisted attempts and billing state are included in the result.",
13173
+ result
13174
+ };
13175
+ }
13176
+ if (payload.kind === "paa_harvest" && status === "cancelled") {
13177
+ return {
13178
+ ...base,
13179
+ status: "cancelled",
13180
+ statusMessage: "PAA harvest was cancelled.",
13181
+ result
13182
+ };
13183
+ }
13134
13184
  if (payload.kind === "lead_list_enrichment" && status === "cancelled") {
13135
13185
  return {
13136
13186
  ...base,
@@ -13147,12 +13197,20 @@ async function detailedTask(executor, taskId, options) {
13147
13197
  };
13148
13198
  }
13149
13199
  function isWorking(kind, status) {
13200
+ if (kind === "paa_harvest") return status === "pending" || status === "running";
13150
13201
  if (kind === "site_export") return status === "pending" || status === "running";
13151
13202
  if (kind === "directory_workflow") return status === "queued" || status === "running";
13152
13203
  if (kind === "lead_list_enrichment") return status === "queued" || status === "running";
13153
13204
  return status === "queued" || status === "running" || status === "processing" || status === "pending";
13154
13205
  }
13155
13206
  function registerMcpTasksExtension(server, executor, options) {
13207
+ const enabled = options.enableTaskStarts !== false;
13208
+ if (!enabled) {
13209
+ return {
13210
+ supportsTasks: () => false,
13211
+ taskify: (_kind, result) => result
13212
+ };
13213
+ }
13156
13214
  server.server.registerCapabilities({
13157
13215
  extensions: { [MCP_TASKS_EXTENSION_ID]: {} }
13158
13216
  });
@@ -13178,34 +13236,12 @@ function registerMcpTasksExtension(server, executor, options) {
13178
13236
  return {};
13179
13237
  });
13180
13238
  return {
13239
+ supportsTasks() {
13240
+ return hasTasksCapability(server.server.getClientCapabilities());
13241
+ },
13181
13242
  taskify(kind, result) {
13182
13243
  if (!hasTasksCapability(server.server.getClientCapabilities())) return result;
13183
- const seed = taskSeed(kind, result);
13184
- if (!seed) return result;
13185
- const createdAtMs2 = Date.now();
13186
- const payload = {
13187
- v: 1,
13188
- ownerId: options.ownerId,
13189
- kind: seed.kind,
13190
- operationId: seed.operationId,
13191
- createdAtMs: createdAtMs2,
13192
- expiresAtMs: createdAtMs2 + TASK_TTL_MS
13193
- };
13194
- const taskId = encodeTaskHandle(payload, options.secret);
13195
- return {
13196
- resultType: "task",
13197
- taskId,
13198
- status: "working",
13199
- statusMessage: seed.statusMessage,
13200
- createdAt: new Date(createdAtMs2).toISOString(),
13201
- lastUpdatedAt: new Date(createdAtMs2).toISOString(),
13202
- ttlMs: TASK_TTL_MS,
13203
- pollIntervalMs: TASK_POLL_INTERVAL_MS,
13204
- // The SDK validates advertised outputSchema before serializing the
13205
- // Task envelope. Preserve the already-bounded start receipt so typed
13206
- // tools remain task-capable when essential output schemas are on.
13207
- ...result.structuredContent ? { structuredContent: result.structuredContent } : {}
13208
- };
13244
+ return createTaskResult(kind, result, options);
13209
13245
  }
13210
13246
  };
13211
13247
  }
@@ -13609,19 +13645,21 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
13609
13645
  const fileBehavior = (local, hosted) => savesReports ? local : hosted;
13610
13646
  const ownerId = options.ownerId ?? "local";
13611
13647
  const ctx = { hosted: !savesReports, ownerId };
13648
+ const transportProfile = options.transportProfile ?? (savesReports ? "stdio" : "hosted_http");
13612
13649
  registerAnalyticsMcpTools(server, executor);
13613
13650
  const exposesLocalNetworkAccess = options.localNetworkAccess ?? permitsLocalNetworkAccess({
13614
13651
  deploymentProfile: options.deploymentProfile ?? "production",
13615
- transportProfile: options.transportProfile ?? (savesReports ? "stdio" : "hosted_http"),
13652
+ transportProfile,
13616
13653
  baseUrl: options.baseUrl
13617
13654
  });
13618
13655
  const exposesDevelopmentDiagnostics = options.deploymentProfile === "development" || options.deploymentProfile === "test";
13619
13656
  const tasks = registerMcpTasksExtension(server, executor, {
13620
13657
  ownerId,
13621
- secret: options.taskHandleSecret ?? `local:${ownerId}`
13658
+ secret: options.taskHandleSecret ?? `local:${ownerId}`,
13659
+ enableTaskStarts: transportProfile === "hosted_http"
13622
13660
  });
13623
13661
  const privateSearchFields = exposesDevelopmentDiagnostics ? [] : ["debug"];
13624
- const harvestPaaInputSchema = schemaWithoutFields(HarvestPaaInputSchema, privateSearchFields);
13662
+ const harvestPaaInputSchema = exposesDevelopmentDiagnostics ? HarvestPaaInputSchema : HarvestPaaHostedInputSchema;
13625
13663
  const searchSerpInputSchema = schemaWithoutFields(SearchSerpInputSchema, privateSearchFields);
13626
13664
  const mapsSearchInputSchema = schemaWithoutFields(MapsSearchInputSchema, privateSearchFields);
13627
13665
  const directoryWorkflowInputSchema = schemaWithoutFields(
@@ -13635,7 +13673,13 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
13635
13673
  inputSchema: harvestPaaInputSchema,
13636
13674
  outputSchema: recordOutputSchema("harvest_paa", HarvestPaaOutputSchema),
13637
13675
  annotations: liveWebToolAnnotations("Google PAA + SERP Harvest")
13638
- }, async (input) => formatHarvestPaa(await executor.harvestPaa(input), input));
13676
+ }, async (input, requestContext) => {
13677
+ const executionInput = { ...input, debug: input.debug === true };
13678
+ if (tasks.supportsTasks() && !executionInput.serpIdentity) {
13679
+ return tasks.taskify("paa_harvest", await executor.startHarvestPaa(executionInput), requestContext);
13680
+ }
13681
+ return formatHarvestPaa(await executor.harvestPaa(executionInput), executionInput);
13682
+ });
13639
13683
  server.registerTool("search_serp", {
13640
13684
  title: "Google SERP Lookup",
13641
13685
  description: `Google SERP lookup without PAA expansion. Defaults to organic rankings and Google entity IDs; request local pack, forums, videos, AI surfaces, and What People Are Saying with individual include flags or includeAllSerpFeatures at the same product price. Use gl for country and location only when city or regional context matters. Costs ${SERP_SEARCH_CREDITS} Credits per search. Call credits_info for current pricing and balance.`,
@@ -14453,8 +14497,1532 @@ function registerPaaExtractorMcpTools(server, executor, options = {}) {
14453
14497
  // src/mcp/memory-mcp-server.ts
14454
14498
  var import_server4 = require("@modelcontextprotocol/server");
14455
14499
 
14456
- // src/mcp/memory-tool-registry.ts
14457
- var import_image_assets = require("mcpscraper-memory-tools/tools/assets/image-assets");
14500
+ // src/mcp/memory-image-tool-schemas.generated.ts
14501
+ var MEMORY_IMAGE_TOOL_SCHEMAS = [
14502
+ {
14503
+ "id": "image_project_create",
14504
+ "upstreamName": "image_project_create",
14505
+ "description": "Create a stable image project inside a writable hosted Memory vault. Projects organize governed private image assets; they do not create local folders or change object keys.",
14506
+ "inputJsonSchema": {
14507
+ "type": "object",
14508
+ "properties": {
14509
+ "vault": {
14510
+ "type": "string",
14511
+ "description": "Writable logical Memory vault. Defaults to the active vault."
14512
+ },
14513
+ "name": {
14514
+ "type": "string",
14515
+ "minLength": 1,
14516
+ "maxLength": 120
14517
+ },
14518
+ "description": {
14519
+ "type": "string",
14520
+ "maxLength": 2e3
14521
+ }
14522
+ },
14523
+ "required": [
14524
+ "name"
14525
+ ],
14526
+ "additionalProperties": false,
14527
+ "$schema": "http://json-schema.org/draft-07/schema#"
14528
+ },
14529
+ "outputJsonSchema": {
14530
+ "type": "object",
14531
+ "properties": {
14532
+ "ok": {
14533
+ "type": "boolean",
14534
+ "enum": [
14535
+ true,
14536
+ false
14537
+ ]
14538
+ },
14539
+ "project": {
14540
+ "type": "object",
14541
+ "properties": {
14542
+ "id": {
14543
+ "type": "string"
14544
+ },
14545
+ "name": {
14546
+ "type": "string"
14547
+ },
14548
+ "description": {
14549
+ "type": [
14550
+ "string",
14551
+ "null"
14552
+ ]
14553
+ },
14554
+ "createdAt": {
14555
+ "type": "string"
14556
+ }
14557
+ },
14558
+ "required": [
14559
+ "id",
14560
+ "name",
14561
+ "description",
14562
+ "createdAt"
14563
+ ],
14564
+ "additionalProperties": false
14565
+ },
14566
+ "code": {
14567
+ "type": "string"
14568
+ },
14569
+ "error": {
14570
+ "type": "string"
14571
+ }
14572
+ },
14573
+ "required": [
14574
+ "ok"
14575
+ ],
14576
+ "additionalProperties": false,
14577
+ "$schema": "http://json-schema.org/draft-07/schema#"
14578
+ },
14579
+ "annotations": {
14580
+ "title": "Create Image Project",
14581
+ "readOnlyHint": false,
14582
+ "destructiveHint": false,
14583
+ "idempotentHint": false,
14584
+ "openWorldHint": false
14585
+ }
14586
+ },
14587
+ {
14588
+ "id": "image_project_list",
14589
+ "upstreamName": "image_project_list",
14590
+ "description": "List image projects in an accessible hosted Memory vault. Returns organization metadata only, never object-store keys.",
14591
+ "inputJsonSchema": {
14592
+ "type": "object",
14593
+ "properties": {
14594
+ "vault": {
14595
+ "type": "string"
14596
+ }
14597
+ },
14598
+ "additionalProperties": false,
14599
+ "$schema": "http://json-schema.org/draft-07/schema#"
14600
+ },
14601
+ "outputJsonSchema": {
14602
+ "type": "object",
14603
+ "properties": {
14604
+ "ok": {
14605
+ "type": "boolean",
14606
+ "enum": [
14607
+ true,
14608
+ false
14609
+ ]
14610
+ },
14611
+ "projects": {
14612
+ "type": "array",
14613
+ "items": {
14614
+ "type": "object",
14615
+ "properties": {
14616
+ "id": {
14617
+ "type": "string"
14618
+ },
14619
+ "name": {
14620
+ "type": "string"
14621
+ },
14622
+ "description": {
14623
+ "type": [
14624
+ "string",
14625
+ "null"
14626
+ ]
14627
+ },
14628
+ "status": {
14629
+ "type": "string"
14630
+ },
14631
+ "createdAt": {
14632
+ "type": "string"
14633
+ },
14634
+ "updatedAt": {
14635
+ "type": "string"
14636
+ }
14637
+ },
14638
+ "required": [
14639
+ "id",
14640
+ "name",
14641
+ "description",
14642
+ "status",
14643
+ "createdAt",
14644
+ "updatedAt"
14645
+ ],
14646
+ "additionalProperties": false
14647
+ }
14648
+ },
14649
+ "code": {
14650
+ "type": "string"
14651
+ },
14652
+ "error": {
14653
+ "type": "string"
14654
+ }
14655
+ },
14656
+ "required": [
14657
+ "ok"
14658
+ ],
14659
+ "additionalProperties": false,
14660
+ "$schema": "http://json-schema.org/draft-07/schema#"
14661
+ },
14662
+ "annotations": {
14663
+ "title": "List Image Projects",
14664
+ "readOnlyHint": true,
14665
+ "destructiveHint": false,
14666
+ "idempotentHint": true,
14667
+ "openWorldHint": false
14668
+ }
14669
+ },
14670
+ {
14671
+ "id": "image_folder_create",
14672
+ "upstreamName": "image_folder_create",
14673
+ "description": "Create a nested image folder inside one writable Memory image project. Maximum nesting depth is eight; this changes logical organization only.",
14674
+ "inputJsonSchema": {
14675
+ "type": "object",
14676
+ "properties": {
14677
+ "vault": {
14678
+ "type": "string"
14679
+ },
14680
+ "projectId": {
14681
+ "type": "string",
14682
+ "minLength": 1
14683
+ },
14684
+ "parentId": {
14685
+ "type": "string",
14686
+ "minLength": 1
14687
+ },
14688
+ "name": {
14689
+ "type": "string",
14690
+ "minLength": 1,
14691
+ "maxLength": 120
14692
+ }
14693
+ },
14694
+ "required": [
14695
+ "projectId",
14696
+ "name"
14697
+ ],
14698
+ "additionalProperties": false,
14699
+ "$schema": "http://json-schema.org/draft-07/schema#"
14700
+ },
14701
+ "outputJsonSchema": {
14702
+ "type": "object",
14703
+ "properties": {
14704
+ "ok": {
14705
+ "type": "boolean",
14706
+ "enum": [
14707
+ true,
14708
+ false
14709
+ ]
14710
+ },
14711
+ "folder": {
14712
+ "type": "object",
14713
+ "properties": {
14714
+ "id": {
14715
+ "type": "string"
14716
+ },
14717
+ "projectId": {
14718
+ "type": "string"
14719
+ },
14720
+ "parentId": {
14721
+ "type": [
14722
+ "string",
14723
+ "null"
14724
+ ]
14725
+ },
14726
+ "name": {
14727
+ "type": "string"
14728
+ },
14729
+ "depth": {
14730
+ "type": "number"
14731
+ },
14732
+ "createdAt": {
14733
+ "type": "string"
14734
+ }
14735
+ },
14736
+ "required": [
14737
+ "id",
14738
+ "projectId",
14739
+ "parentId",
14740
+ "name",
14741
+ "depth",
14742
+ "createdAt"
14743
+ ],
14744
+ "additionalProperties": false
14745
+ },
14746
+ "code": {
14747
+ "type": "string"
14748
+ },
14749
+ "error": {
14750
+ "type": "string"
14751
+ }
14752
+ },
14753
+ "required": [
14754
+ "ok"
14755
+ ],
14756
+ "additionalProperties": false,
14757
+ "$schema": "http://json-schema.org/draft-07/schema#"
14758
+ },
14759
+ "annotations": {
14760
+ "title": "Create Image Folder",
14761
+ "readOnlyHint": false,
14762
+ "destructiveHint": false,
14763
+ "idempotentHint": false,
14764
+ "openWorldHint": false
14765
+ }
14766
+ },
14767
+ {
14768
+ "id": "image_folder_list",
14769
+ "upstreamName": "image_folder_list",
14770
+ "description": "List the bounded folder tree for one accessible Memory image project.",
14771
+ "inputJsonSchema": {
14772
+ "type": "object",
14773
+ "properties": {
14774
+ "vault": {
14775
+ "type": "string"
14776
+ },
14777
+ "projectId": {
14778
+ "type": "string",
14779
+ "minLength": 1
14780
+ }
14781
+ },
14782
+ "required": [
14783
+ "projectId"
14784
+ ],
14785
+ "additionalProperties": false,
14786
+ "$schema": "http://json-schema.org/draft-07/schema#"
14787
+ },
14788
+ "outputJsonSchema": {
14789
+ "type": "object",
14790
+ "properties": {
14791
+ "ok": {
14792
+ "type": "boolean",
14793
+ "enum": [
14794
+ true,
14795
+ false
14796
+ ]
14797
+ },
14798
+ "folders": {
14799
+ "type": "array",
14800
+ "items": {
14801
+ "type": "object",
14802
+ "properties": {
14803
+ "id": {
14804
+ "type": "string"
14805
+ },
14806
+ "projectId": {
14807
+ "type": "string"
14808
+ },
14809
+ "parentId": {
14810
+ "type": [
14811
+ "string",
14812
+ "null"
14813
+ ]
14814
+ },
14815
+ "name": {
14816
+ "type": "string"
14817
+ },
14818
+ "depth": {
14819
+ "type": "number"
14820
+ },
14821
+ "createdAt": {
14822
+ "type": "string"
14823
+ },
14824
+ "updatedAt": {
14825
+ "type": "string"
14826
+ }
14827
+ },
14828
+ "required": [
14829
+ "id",
14830
+ "projectId",
14831
+ "parentId",
14832
+ "name",
14833
+ "depth",
14834
+ "createdAt",
14835
+ "updatedAt"
14836
+ ],
14837
+ "additionalProperties": false
14838
+ }
14839
+ },
14840
+ "code": {
14841
+ "type": "string"
14842
+ },
14843
+ "error": {
14844
+ "type": "string"
14845
+ }
14846
+ },
14847
+ "required": [
14848
+ "ok"
14849
+ ],
14850
+ "additionalProperties": false,
14851
+ "$schema": "http://json-schema.org/draft-07/schema#"
14852
+ },
14853
+ "annotations": {
14854
+ "title": "List Image Folders",
14855
+ "readOnlyHint": true,
14856
+ "destructiveHint": false,
14857
+ "idempotentHint": true,
14858
+ "openWorldHint": false
14859
+ }
14860
+ },
14861
+ {
14862
+ "id": "image_asset_save",
14863
+ "upstreamName": "image_asset_save",
14864
+ "description": "Opt in to preserving one image in hosted Memory. Saves immutable private bytes, creates a sanitized preview, consumes storage/embedding quota, and queues visual plus useful fused embeddings. Use for durable image recall; do not use merely to view a transient scrape result.",
14865
+ "inputJsonSchema": {
14866
+ "type": "object",
14867
+ "properties": {
14868
+ "vault": {
14869
+ "type": "string"
14870
+ },
14871
+ "projectId": {
14872
+ "type": "string",
14873
+ "minLength": 1
14874
+ },
14875
+ "folderId": {
14876
+ "type": "string",
14877
+ "minLength": 1
14878
+ },
14879
+ "sourceUrl": {
14880
+ "type": "string",
14881
+ "format": "uri",
14882
+ "description": "Public HTTPS image URL. Private-network and redirect targets are rejected."
14883
+ },
14884
+ "artifactId": {
14885
+ "type": "string",
14886
+ "minLength": 1,
14887
+ "description": "Owned MCP Scraper artifact ID. Available through the aggregate MCP handoff."
14888
+ },
14889
+ "imageBase64": {
14890
+ "type": "string",
14891
+ "minLength": 1,
14892
+ "description": "Bounded base64 image for clients without an upload transport; maximum decoded size is 20 MiB."
14893
+ },
14894
+ "title": {
14895
+ "type": "string",
14896
+ "minLength": 1,
14897
+ "maxLength": 240
14898
+ },
14899
+ "description": {
14900
+ "type": "string",
14901
+ "maxLength": 4e3
14902
+ },
14903
+ "altText": {
14904
+ "type": "string",
14905
+ "maxLength": 2e3
14906
+ },
14907
+ "tags": {
14908
+ "type": "array",
14909
+ "items": {
14910
+ "type": "string",
14911
+ "minLength": 1,
14912
+ "maxLength": 80
14913
+ },
14914
+ "maxItems": 20
14915
+ },
14916
+ "sourceRef": {
14917
+ "type": "object",
14918
+ "additionalProperties": {
14919
+ "anyOf": [
14920
+ {
14921
+ "type": "string",
14922
+ "maxLength": 1e3
14923
+ },
14924
+ {
14925
+ "type": "number"
14926
+ },
14927
+ {
14928
+ "type": "boolean"
14929
+ },
14930
+ {
14931
+ "type": "null"
14932
+ }
14933
+ ]
14934
+ }
14935
+ },
14936
+ "idempotencyKey": {
14937
+ "type": "string",
14938
+ "minLength": 8,
14939
+ "maxLength": 200,
14940
+ "description": "Stable key for this logical save. Retrying the same request returns the same asset without another write."
14941
+ }
14942
+ },
14943
+ "required": [
14944
+ "title",
14945
+ "idempotencyKey"
14946
+ ],
14947
+ "additionalProperties": false,
14948
+ "$schema": "http://json-schema.org/draft-07/schema#"
14949
+ },
14950
+ "outputJsonSchema": {
14951
+ "type": "object",
14952
+ "properties": {
14953
+ "ok": {
14954
+ "type": "boolean",
14955
+ "enum": [
14956
+ true,
14957
+ false
14958
+ ]
14959
+ },
14960
+ "asset": {
14961
+ "type": "object",
14962
+ "properties": {
14963
+ "assetId": {
14964
+ "type": "string"
14965
+ },
14966
+ "title": {
14967
+ "type": "string"
14968
+ },
14969
+ "description": {
14970
+ "type": [
14971
+ "string",
14972
+ "null"
14973
+ ]
14974
+ },
14975
+ "altText": {
14976
+ "type": [
14977
+ "string",
14978
+ "null"
14979
+ ]
14980
+ },
14981
+ "sourceUrl": {
14982
+ "type": [
14983
+ "string",
14984
+ "null"
14985
+ ]
14986
+ },
14987
+ "sourceKind": {
14988
+ "type": "string"
14989
+ },
14990
+ "mimeType": {
14991
+ "type": "string"
14992
+ },
14993
+ "bytes": {
14994
+ "type": "number"
14995
+ },
14996
+ "width": {
14997
+ "type": "number"
14998
+ },
14999
+ "height": {
15000
+ "type": "number"
15001
+ },
15002
+ "projectId": {
15003
+ "type": [
15004
+ "string",
15005
+ "null"
15006
+ ]
15007
+ },
15008
+ "folderId": {
15009
+ "type": [
15010
+ "string",
15011
+ "null"
15012
+ ]
15013
+ },
15014
+ "tags": {
15015
+ "type": "array",
15016
+ "items": {
15017
+ "type": "string"
15018
+ }
15019
+ },
15020
+ "status": {
15021
+ "type": "string"
15022
+ },
15023
+ "embeddingStatus": {
15024
+ "type": "string"
15025
+ },
15026
+ "createdAt": {
15027
+ "type": "string"
15028
+ },
15029
+ "updatedAt": {
15030
+ "type": "string"
15031
+ },
15032
+ "preview": {
15033
+ "type": "object",
15034
+ "properties": {
15035
+ "url": {
15036
+ "type": "string",
15037
+ "format": "uri"
15038
+ },
15039
+ "expiresAt": {
15040
+ "type": "string",
15041
+ "format": "date-time"
15042
+ },
15043
+ "mimeType": {
15044
+ "type": "string",
15045
+ "const": "image/webp"
15046
+ }
15047
+ },
15048
+ "required": [
15049
+ "url",
15050
+ "expiresAt",
15051
+ "mimeType"
15052
+ ],
15053
+ "additionalProperties": false
15054
+ }
15055
+ },
15056
+ "required": [
15057
+ "assetId",
15058
+ "title",
15059
+ "description",
15060
+ "altText",
15061
+ "sourceUrl",
15062
+ "sourceKind",
15063
+ "mimeType",
15064
+ "bytes",
15065
+ "width",
15066
+ "height",
15067
+ "projectId",
15068
+ "folderId",
15069
+ "tags",
15070
+ "status",
15071
+ "embeddingStatus",
15072
+ "createdAt",
15073
+ "updatedAt"
15074
+ ],
15075
+ "additionalProperties": false
15076
+ },
15077
+ "reusedObject": {
15078
+ "type": "boolean"
15079
+ },
15080
+ "nextAction": {
15081
+ "type": "string"
15082
+ },
15083
+ "code": {
15084
+ "type": "string"
15085
+ },
15086
+ "error": {
15087
+ "type": "string"
15088
+ }
15089
+ },
15090
+ "required": [
15091
+ "ok"
15092
+ ],
15093
+ "additionalProperties": false,
15094
+ "$schema": "http://json-schema.org/draft-07/schema#"
15095
+ },
15096
+ "annotations": {
15097
+ "title": "Save Image Asset",
15098
+ "readOnlyHint": false,
15099
+ "destructiveHint": false,
15100
+ "idempotentHint": true,
15101
+ "openWorldHint": true
15102
+ }
15103
+ },
15104
+ {
15105
+ "id": "image_asset_get",
15106
+ "upstreamName": "image_asset_get",
15107
+ "description": "Read one authorized private image asset and optionally mint a five-minute preview URL. The URL is never persisted; call again after expiry.",
15108
+ "inputJsonSchema": {
15109
+ "type": "object",
15110
+ "properties": {
15111
+ "vault": {
15112
+ "type": "string"
15113
+ },
15114
+ "assetId": {
15115
+ "type": "string",
15116
+ "minLength": 1
15117
+ },
15118
+ "includePreview": {
15119
+ "type": "boolean",
15120
+ "default": true
15121
+ }
15122
+ },
15123
+ "required": [
15124
+ "assetId"
15125
+ ],
15126
+ "additionalProperties": false,
15127
+ "$schema": "http://json-schema.org/draft-07/schema#"
15128
+ },
15129
+ "outputJsonSchema": {
15130
+ "type": "object",
15131
+ "properties": {
15132
+ "ok": {
15133
+ "type": "boolean",
15134
+ "enum": [
15135
+ true,
15136
+ false
15137
+ ]
15138
+ },
15139
+ "asset": {
15140
+ "type": "object",
15141
+ "properties": {
15142
+ "assetId": {
15143
+ "type": "string"
15144
+ },
15145
+ "title": {
15146
+ "type": "string"
15147
+ },
15148
+ "description": {
15149
+ "type": [
15150
+ "string",
15151
+ "null"
15152
+ ]
15153
+ },
15154
+ "altText": {
15155
+ "type": [
15156
+ "string",
15157
+ "null"
15158
+ ]
15159
+ },
15160
+ "sourceUrl": {
15161
+ "type": [
15162
+ "string",
15163
+ "null"
15164
+ ]
15165
+ },
15166
+ "sourceKind": {
15167
+ "type": "string"
15168
+ },
15169
+ "mimeType": {
15170
+ "type": "string"
15171
+ },
15172
+ "bytes": {
15173
+ "type": "number"
15174
+ },
15175
+ "width": {
15176
+ "type": "number"
15177
+ },
15178
+ "height": {
15179
+ "type": "number"
15180
+ },
15181
+ "projectId": {
15182
+ "type": [
15183
+ "string",
15184
+ "null"
15185
+ ]
15186
+ },
15187
+ "folderId": {
15188
+ "type": [
15189
+ "string",
15190
+ "null"
15191
+ ]
15192
+ },
15193
+ "tags": {
15194
+ "type": "array",
15195
+ "items": {
15196
+ "type": "string"
15197
+ }
15198
+ },
15199
+ "status": {
15200
+ "type": "string"
15201
+ },
15202
+ "embeddingStatus": {
15203
+ "type": "string"
15204
+ },
15205
+ "createdAt": {
15206
+ "type": "string"
15207
+ },
15208
+ "updatedAt": {
15209
+ "type": "string"
15210
+ },
15211
+ "preview": {
15212
+ "type": "object",
15213
+ "properties": {
15214
+ "url": {
15215
+ "type": "string",
15216
+ "format": "uri"
15217
+ },
15218
+ "expiresAt": {
15219
+ "type": "string",
15220
+ "format": "date-time"
15221
+ },
15222
+ "mimeType": {
15223
+ "type": "string",
15224
+ "const": "image/webp"
15225
+ }
15226
+ },
15227
+ "required": [
15228
+ "url",
15229
+ "expiresAt",
15230
+ "mimeType"
15231
+ ],
15232
+ "additionalProperties": false
15233
+ }
15234
+ },
15235
+ "required": [
15236
+ "assetId",
15237
+ "title",
15238
+ "description",
15239
+ "altText",
15240
+ "sourceUrl",
15241
+ "sourceKind",
15242
+ "mimeType",
15243
+ "bytes",
15244
+ "width",
15245
+ "height",
15246
+ "projectId",
15247
+ "folderId",
15248
+ "tags",
15249
+ "status",
15250
+ "embeddingStatus",
15251
+ "createdAt",
15252
+ "updatedAt"
15253
+ ],
15254
+ "additionalProperties": false
15255
+ },
15256
+ "code": {
15257
+ "type": "string"
15258
+ },
15259
+ "error": {
15260
+ "type": "string"
15261
+ }
15262
+ },
15263
+ "required": [
15264
+ "ok"
15265
+ ],
15266
+ "additionalProperties": false,
15267
+ "$schema": "http://json-schema.org/draft-07/schema#"
15268
+ },
15269
+ "annotations": {
15270
+ "title": "Get Image Asset",
15271
+ "readOnlyHint": true,
15272
+ "destructiveHint": false,
15273
+ "idempotentHint": true,
15274
+ "openWorldHint": false
15275
+ }
15276
+ },
15277
+ {
15278
+ "id": "image_asset_list",
15279
+ "upstreamName": "image_asset_list",
15280
+ "description": "List authorized private image metadata with exact location, provenance, media, tag, and creation-time filters. Use image_asset_search for semantic retrieval.",
15281
+ "inputJsonSchema": {
15282
+ "type": "object",
15283
+ "properties": {
15284
+ "vault": {
15285
+ "type": "string"
15286
+ },
15287
+ "projectId": {
15288
+ "type": "string"
15289
+ },
15290
+ "folderId": {
15291
+ "type": "string"
15292
+ },
15293
+ "sourceKind": {
15294
+ "type": "string",
15295
+ "enum": [
15296
+ "upload",
15297
+ "scrape",
15298
+ "screenshot",
15299
+ "instagram",
15300
+ "external_url",
15301
+ "import"
15302
+ ]
15303
+ },
15304
+ "sourceHost": {
15305
+ "type": "string",
15306
+ "minLength": 1,
15307
+ "maxLength": 253
15308
+ },
15309
+ "mimeType": {
15310
+ "type": "string",
15311
+ "enum": [
15312
+ "image/jpeg",
15313
+ "image/png",
15314
+ "image/webp",
15315
+ "image/gif"
15316
+ ]
15317
+ },
15318
+ "tags": {
15319
+ "type": "array",
15320
+ "items": {
15321
+ "type": "string",
15322
+ "minLength": 1,
15323
+ "maxLength": 80
15324
+ },
15325
+ "maxItems": 20
15326
+ },
15327
+ "createdAfter": {
15328
+ "type": "string",
15329
+ "format": "date-time"
15330
+ },
15331
+ "createdBefore": {
15332
+ "type": "string",
15333
+ "format": "date-time"
15334
+ },
15335
+ "limit": {
15336
+ "type": "integer",
15337
+ "minimum": 1,
15338
+ "maximum": 100,
15339
+ "default": 30
15340
+ }
15341
+ },
15342
+ "additionalProperties": false,
15343
+ "$schema": "http://json-schema.org/draft-07/schema#"
15344
+ },
15345
+ "outputJsonSchema": {
15346
+ "type": "object",
15347
+ "properties": {
15348
+ "ok": {
15349
+ "type": "boolean",
15350
+ "enum": [
15351
+ true,
15352
+ false
15353
+ ]
15354
+ },
15355
+ "assets": {
15356
+ "type": "array",
15357
+ "items": {
15358
+ "type": "object",
15359
+ "properties": {
15360
+ "assetId": {
15361
+ "type": "string"
15362
+ },
15363
+ "title": {
15364
+ "type": "string"
15365
+ },
15366
+ "description": {
15367
+ "type": [
15368
+ "string",
15369
+ "null"
15370
+ ]
15371
+ },
15372
+ "altText": {
15373
+ "type": [
15374
+ "string",
15375
+ "null"
15376
+ ]
15377
+ },
15378
+ "sourceUrl": {
15379
+ "type": [
15380
+ "string",
15381
+ "null"
15382
+ ]
15383
+ },
15384
+ "sourceKind": {
15385
+ "type": "string"
15386
+ },
15387
+ "mimeType": {
15388
+ "type": "string"
15389
+ },
15390
+ "bytes": {
15391
+ "type": "number"
15392
+ },
15393
+ "width": {
15394
+ "type": "number"
15395
+ },
15396
+ "height": {
15397
+ "type": "number"
15398
+ },
15399
+ "projectId": {
15400
+ "type": [
15401
+ "string",
15402
+ "null"
15403
+ ]
15404
+ },
15405
+ "folderId": {
15406
+ "type": [
15407
+ "string",
15408
+ "null"
15409
+ ]
15410
+ },
15411
+ "tags": {
15412
+ "type": "array",
15413
+ "items": {
15414
+ "type": "string"
15415
+ }
15416
+ },
15417
+ "status": {
15418
+ "type": "string"
15419
+ },
15420
+ "embeddingStatus": {
15421
+ "type": "string"
15422
+ },
15423
+ "createdAt": {
15424
+ "type": "string"
15425
+ },
15426
+ "updatedAt": {
15427
+ "type": "string"
15428
+ },
15429
+ "preview": {
15430
+ "type": "object",
15431
+ "properties": {
15432
+ "url": {
15433
+ "type": "string",
15434
+ "format": "uri"
15435
+ },
15436
+ "expiresAt": {
15437
+ "type": "string",
15438
+ "format": "date-time"
15439
+ },
15440
+ "mimeType": {
15441
+ "type": "string",
15442
+ "const": "image/webp"
15443
+ }
15444
+ },
15445
+ "required": [
15446
+ "url",
15447
+ "expiresAt",
15448
+ "mimeType"
15449
+ ],
15450
+ "additionalProperties": false
15451
+ }
15452
+ },
15453
+ "required": [
15454
+ "assetId",
15455
+ "title",
15456
+ "description",
15457
+ "altText",
15458
+ "sourceUrl",
15459
+ "sourceKind",
15460
+ "mimeType",
15461
+ "bytes",
15462
+ "width",
15463
+ "height",
15464
+ "projectId",
15465
+ "folderId",
15466
+ "tags",
15467
+ "status",
15468
+ "embeddingStatus",
15469
+ "createdAt",
15470
+ "updatedAt"
15471
+ ],
15472
+ "additionalProperties": false
15473
+ }
15474
+ },
15475
+ "count": {
15476
+ "type": "number"
15477
+ },
15478
+ "code": {
15479
+ "type": "string"
15480
+ },
15481
+ "error": {
15482
+ "type": "string"
15483
+ }
15484
+ },
15485
+ "required": [
15486
+ "ok"
15487
+ ],
15488
+ "additionalProperties": false,
15489
+ "$schema": "http://json-schema.org/draft-07/schema#"
15490
+ },
15491
+ "annotations": {
15492
+ "title": "List Image Assets",
15493
+ "readOnlyHint": true,
15494
+ "destructiveHint": false,
15495
+ "idempotentHint": true,
15496
+ "openWorldHint": false
15497
+ }
15498
+ },
15499
+ {
15500
+ "id": "image_asset_search",
15501
+ "upstreamName": "image_asset_search",
15502
+ "description": "Semantically search authorized private image Memory using text, a stored asset, a public HTTPS image, or bounded base64. Text plus one image performs a fused query. This consumes query-embedding usage.",
15503
+ "inputJsonSchema": {
15504
+ "type": "object",
15505
+ "properties": {
15506
+ "vault": {
15507
+ "type": "string"
15508
+ },
15509
+ "queryText": {
15510
+ "type": "string",
15511
+ "minLength": 1,
15512
+ "maxLength": 4e3
15513
+ },
15514
+ "queryAssetId": {
15515
+ "type": "string",
15516
+ "minLength": 1
15517
+ },
15518
+ "queryUrl": {
15519
+ "type": "string",
15520
+ "format": "uri"
15521
+ },
15522
+ "queryImageBase64": {
15523
+ "type": "string",
15524
+ "minLength": 1
15525
+ },
15526
+ "projectId": {
15527
+ "type": "string"
15528
+ },
15529
+ "folderId": {
15530
+ "type": "string"
15531
+ },
15532
+ "sourceKind": {
15533
+ "type": "string",
15534
+ "enum": [
15535
+ "upload",
15536
+ "scrape",
15537
+ "screenshot",
15538
+ "instagram",
15539
+ "external_url",
15540
+ "import"
15541
+ ]
15542
+ },
15543
+ "sourceHost": {
15544
+ "type": "string",
15545
+ "minLength": 1,
15546
+ "maxLength": 253
15547
+ },
15548
+ "mimeType": {
15549
+ "type": "string",
15550
+ "enum": [
15551
+ "image/jpeg",
15552
+ "image/png",
15553
+ "image/webp",
15554
+ "image/gif"
15555
+ ]
15556
+ },
15557
+ "tags": {
15558
+ "type": "array",
15559
+ "items": {
15560
+ "type": "string",
15561
+ "minLength": 1,
15562
+ "maxLength": 80
15563
+ },
15564
+ "maxItems": 20
15565
+ },
15566
+ "createdAfter": {
15567
+ "type": "string",
15568
+ "format": "date-time"
15569
+ },
15570
+ "createdBefore": {
15571
+ "type": "string",
15572
+ "format": "date-time"
15573
+ },
15574
+ "limit": {
15575
+ "type": "integer",
15576
+ "minimum": 1,
15577
+ "maximum": 30,
15578
+ "default": 10
15579
+ },
15580
+ "includePreview": {
15581
+ "type": "boolean",
15582
+ "default": false
15583
+ }
15584
+ },
15585
+ "additionalProperties": false,
15586
+ "$schema": "http://json-schema.org/draft-07/schema#"
15587
+ },
15588
+ "outputJsonSchema": {
15589
+ "type": "object",
15590
+ "properties": {
15591
+ "ok": {
15592
+ "type": "boolean",
15593
+ "enum": [
15594
+ true,
15595
+ false
15596
+ ]
15597
+ },
15598
+ "results": {
15599
+ "type": "array",
15600
+ "items": {
15601
+ "type": "object",
15602
+ "properties": {
15603
+ "asset": {
15604
+ "type": "object",
15605
+ "properties": {
15606
+ "assetId": {
15607
+ "type": "string"
15608
+ },
15609
+ "title": {
15610
+ "type": "string"
15611
+ },
15612
+ "description": {
15613
+ "type": [
15614
+ "string",
15615
+ "null"
15616
+ ]
15617
+ },
15618
+ "altText": {
15619
+ "type": [
15620
+ "string",
15621
+ "null"
15622
+ ]
15623
+ },
15624
+ "sourceUrl": {
15625
+ "type": [
15626
+ "string",
15627
+ "null"
15628
+ ]
15629
+ },
15630
+ "sourceKind": {
15631
+ "type": "string"
15632
+ },
15633
+ "mimeType": {
15634
+ "type": "string"
15635
+ },
15636
+ "bytes": {
15637
+ "type": "number"
15638
+ },
15639
+ "width": {
15640
+ "type": "number"
15641
+ },
15642
+ "height": {
15643
+ "type": "number"
15644
+ },
15645
+ "projectId": {
15646
+ "type": [
15647
+ "string",
15648
+ "null"
15649
+ ]
15650
+ },
15651
+ "folderId": {
15652
+ "type": [
15653
+ "string",
15654
+ "null"
15655
+ ]
15656
+ },
15657
+ "tags": {
15658
+ "type": "array",
15659
+ "items": {
15660
+ "type": "string"
15661
+ }
15662
+ },
15663
+ "status": {
15664
+ "type": "string"
15665
+ },
15666
+ "embeddingStatus": {
15667
+ "type": "string"
15668
+ },
15669
+ "createdAt": {
15670
+ "type": "string"
15671
+ },
15672
+ "updatedAt": {
15673
+ "type": "string"
15674
+ },
15675
+ "preview": {
15676
+ "type": "object",
15677
+ "properties": {
15678
+ "url": {
15679
+ "type": "string",
15680
+ "format": "uri"
15681
+ },
15682
+ "expiresAt": {
15683
+ "type": "string",
15684
+ "format": "date-time"
15685
+ },
15686
+ "mimeType": {
15687
+ "type": "string",
15688
+ "const": "image/webp"
15689
+ }
15690
+ },
15691
+ "required": [
15692
+ "url",
15693
+ "expiresAt",
15694
+ "mimeType"
15695
+ ],
15696
+ "additionalProperties": false
15697
+ }
15698
+ },
15699
+ "required": [
15700
+ "assetId",
15701
+ "title",
15702
+ "description",
15703
+ "altText",
15704
+ "sourceUrl",
15705
+ "sourceKind",
15706
+ "mimeType",
15707
+ "bytes",
15708
+ "width",
15709
+ "height",
15710
+ "projectId",
15711
+ "folderId",
15712
+ "tags",
15713
+ "status",
15714
+ "embeddingStatus",
15715
+ "createdAt",
15716
+ "updatedAt"
15717
+ ],
15718
+ "additionalProperties": false
15719
+ },
15720
+ "score": {
15721
+ "type": "number"
15722
+ },
15723
+ "matchRepresentations": {
15724
+ "type": "array",
15725
+ "items": {
15726
+ "type": "string",
15727
+ "enum": [
15728
+ "visual",
15729
+ "fused"
15730
+ ]
15731
+ }
15732
+ },
15733
+ "embeddingModel": {
15734
+ "type": "string"
15735
+ }
15736
+ },
15737
+ "required": [
15738
+ "asset",
15739
+ "score",
15740
+ "matchRepresentations",
15741
+ "embeddingModel"
15742
+ ],
15743
+ "additionalProperties": false
15744
+ }
15745
+ },
15746
+ "count": {
15747
+ "type": "number"
15748
+ },
15749
+ "code": {
15750
+ "type": "string"
15751
+ },
15752
+ "error": {
15753
+ "type": "string"
15754
+ }
15755
+ },
15756
+ "required": [
15757
+ "ok"
15758
+ ],
15759
+ "additionalProperties": false,
15760
+ "$schema": "http://json-schema.org/draft-07/schema#"
15761
+ },
15762
+ "annotations": {
15763
+ "title": "Search Image Assets",
15764
+ "readOnlyHint": true,
15765
+ "destructiveHint": false,
15766
+ "idempotentHint": true,
15767
+ "openWorldHint": true
15768
+ }
15769
+ },
15770
+ {
15771
+ "id": "image_asset_move",
15772
+ "upstreamName": "image_asset_move",
15773
+ "description": "Move an image asset between project/folder locations in the same writable Memory vault. This updates metadata only and never copies private image bytes.",
15774
+ "inputJsonSchema": {
15775
+ "type": "object",
15776
+ "properties": {
15777
+ "vault": {
15778
+ "type": "string"
15779
+ },
15780
+ "assetId": {
15781
+ "type": "string",
15782
+ "minLength": 1
15783
+ },
15784
+ "projectId": {
15785
+ "anyOf": [
15786
+ {
15787
+ "type": "string",
15788
+ "minLength": 1
15789
+ },
15790
+ {
15791
+ "type": "null"
15792
+ }
15793
+ ]
15794
+ },
15795
+ "folderId": {
15796
+ "anyOf": [
15797
+ {
15798
+ "type": "string",
15799
+ "minLength": 1
15800
+ },
15801
+ {
15802
+ "type": "null"
15803
+ }
15804
+ ]
15805
+ }
15806
+ },
15807
+ "required": [
15808
+ "assetId"
15809
+ ],
15810
+ "additionalProperties": false,
15811
+ "$schema": "http://json-schema.org/draft-07/schema#"
15812
+ },
15813
+ "outputJsonSchema": {
15814
+ "type": "object",
15815
+ "properties": {
15816
+ "ok": {
15817
+ "type": "boolean",
15818
+ "enum": [
15819
+ true,
15820
+ false
15821
+ ]
15822
+ },
15823
+ "asset": {
15824
+ "type": "object",
15825
+ "properties": {
15826
+ "assetId": {
15827
+ "type": "string"
15828
+ },
15829
+ "title": {
15830
+ "type": "string"
15831
+ },
15832
+ "description": {
15833
+ "type": [
15834
+ "string",
15835
+ "null"
15836
+ ]
15837
+ },
15838
+ "altText": {
15839
+ "type": [
15840
+ "string",
15841
+ "null"
15842
+ ]
15843
+ },
15844
+ "sourceUrl": {
15845
+ "type": [
15846
+ "string",
15847
+ "null"
15848
+ ]
15849
+ },
15850
+ "sourceKind": {
15851
+ "type": "string"
15852
+ },
15853
+ "mimeType": {
15854
+ "type": "string"
15855
+ },
15856
+ "bytes": {
15857
+ "type": "number"
15858
+ },
15859
+ "width": {
15860
+ "type": "number"
15861
+ },
15862
+ "height": {
15863
+ "type": "number"
15864
+ },
15865
+ "projectId": {
15866
+ "type": [
15867
+ "string",
15868
+ "null"
15869
+ ]
15870
+ },
15871
+ "folderId": {
15872
+ "type": [
15873
+ "string",
15874
+ "null"
15875
+ ]
15876
+ },
15877
+ "tags": {
15878
+ "type": "array",
15879
+ "items": {
15880
+ "type": "string"
15881
+ }
15882
+ },
15883
+ "status": {
15884
+ "type": "string"
15885
+ },
15886
+ "embeddingStatus": {
15887
+ "type": "string"
15888
+ },
15889
+ "createdAt": {
15890
+ "type": "string"
15891
+ },
15892
+ "updatedAt": {
15893
+ "type": "string"
15894
+ },
15895
+ "preview": {
15896
+ "type": "object",
15897
+ "properties": {
15898
+ "url": {
15899
+ "type": "string",
15900
+ "format": "uri"
15901
+ },
15902
+ "expiresAt": {
15903
+ "type": "string",
15904
+ "format": "date-time"
15905
+ },
15906
+ "mimeType": {
15907
+ "type": "string",
15908
+ "const": "image/webp"
15909
+ }
15910
+ },
15911
+ "required": [
15912
+ "url",
15913
+ "expiresAt",
15914
+ "mimeType"
15915
+ ],
15916
+ "additionalProperties": false
15917
+ }
15918
+ },
15919
+ "required": [
15920
+ "assetId",
15921
+ "title",
15922
+ "description",
15923
+ "altText",
15924
+ "sourceUrl",
15925
+ "sourceKind",
15926
+ "mimeType",
15927
+ "bytes",
15928
+ "width",
15929
+ "height",
15930
+ "projectId",
15931
+ "folderId",
15932
+ "tags",
15933
+ "status",
15934
+ "embeddingStatus",
15935
+ "createdAt",
15936
+ "updatedAt"
15937
+ ],
15938
+ "additionalProperties": false
15939
+ },
15940
+ "code": {
15941
+ "type": "string"
15942
+ },
15943
+ "error": {
15944
+ "type": "string"
15945
+ }
15946
+ },
15947
+ "required": [
15948
+ "ok"
15949
+ ],
15950
+ "additionalProperties": false,
15951
+ "$schema": "http://json-schema.org/draft-07/schema#"
15952
+ },
15953
+ "annotations": {
15954
+ "title": "Move Image Asset",
15955
+ "readOnlyHint": false,
15956
+ "destructiveHint": false,
15957
+ "idempotentHint": true,
15958
+ "openWorldHint": false
15959
+ }
15960
+ },
15961
+ {
15962
+ "id": "image_asset_delete",
15963
+ "upstreamName": "image_asset_delete",
15964
+ "description": "DESTRUCTIVE: delete one governed image asset, remove its semantic vectors, and purge private bytes when no other logical asset uses them. Retry with the same assetId if an earlier response was lost.",
15965
+ "inputJsonSchema": {
15966
+ "type": "object",
15967
+ "properties": {
15968
+ "vault": {
15969
+ "type": "string"
15970
+ },
15971
+ "assetId": {
15972
+ "type": "string",
15973
+ "minLength": 1
15974
+ },
15975
+ "confirmDelete": {
15976
+ "type": "boolean",
15977
+ "const": true,
15978
+ "description": "Must be true after the caller has confirmed deletion."
15979
+ }
15980
+ },
15981
+ "required": [
15982
+ "assetId",
15983
+ "confirmDelete"
15984
+ ],
15985
+ "additionalProperties": false,
15986
+ "$schema": "http://json-schema.org/draft-07/schema#"
15987
+ },
15988
+ "outputJsonSchema": {
15989
+ "type": "object",
15990
+ "properties": {
15991
+ "ok": {
15992
+ "type": "boolean",
15993
+ "enum": [
15994
+ true,
15995
+ false
15996
+ ]
15997
+ },
15998
+ "deleted": {
15999
+ "type": "boolean"
16000
+ },
16001
+ "assetId": {
16002
+ "type": "string"
16003
+ },
16004
+ "code": {
16005
+ "type": "string"
16006
+ },
16007
+ "error": {
16008
+ "type": "string"
16009
+ }
16010
+ },
16011
+ "required": [
16012
+ "ok"
16013
+ ],
16014
+ "additionalProperties": false,
16015
+ "$schema": "http://json-schema.org/draft-07/schema#"
16016
+ },
16017
+ "annotations": {
16018
+ "title": "Delete Image Asset",
16019
+ "readOnlyHint": false,
16020
+ "destructiveHint": true,
16021
+ "idempotentHint": true,
16022
+ "openWorldHint": false
16023
+ }
16024
+ }
16025
+ ];
14458
16026
 
14459
16027
  // src/mcp/memory-tool-schemas.ts
14460
16028
  var import_zod12 = require("zod");
@@ -16987,7 +18555,7 @@ var MEMORY_TOOL_REGISTRY = [
16987
18555
  ...schema,
16988
18556
  description: MEMORY_TOOL_DESCRIPTION_OVERRIDES[schema.id] ?? schema.description
16989
18557
  })),
16990
- ...import_image_assets.IMAGE_ASSET_MCP_DEFINITIONS
18558
+ ...MEMORY_IMAGE_TOOL_SCHEMAS
16991
18559
  ];
16992
18560
 
16993
18561
  // src/mcp/memory-mcp-server.ts
@@ -17069,6 +18637,11 @@ var HostedMemoryMcpToolExecutor = class {
17069
18637
  }
17070
18638
  };
17071
18639
 
18640
+ // release-message.json
18641
+ 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."
18643
+ };
18644
+
17072
18645
  // src/install-terminal.ts
17073
18646
  var CODES = {
17074
18647
  reset: "\x1B[0m",
@@ -17119,7 +18692,7 @@ function renderInstallTerminal(options) {
17119
18692
  colorize(ascii, "amber", color),
17120
18693
  `${colorize("MCP Scraper Agent", "cyan", color)} . v${options.version} . mcpscraper.dev`,
17121
18694
  "1/1 install surfaces ready",
17122
- colorize("Newest: any approved connection read can become an indexed Memory snapshot in one call. OAuth stays tenant-isolated and provider content is redacted and marked untrusted.", "lime", color),
18695
+ colorize(`Newest in v${options.version}: ${release_message_default.message}`, "lime", color),
17123
18696
  "",
17124
18697
  `${colorize("Tools", "cyan", color)} ${colorize("(259 MCP tools)", "muted", color)}`,
17125
18698
  toolRow("search", ["harvest_paa", "search_serp", "maps_search", "maps_place_intel"], color),
@@ -17905,4 +19478,3 @@ function buildStdioServer() {
17905
19478
  `);
17906
19479
  }
17907
19480
  });
17908
- //# sourceMappingURL=mcp-stdio-server.cjs.map