mcpscraper-cli 0.35.0 → 0.36.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Command-line interface for [mcpscraper.dev](https://mcpscraper.dev) and [memory.mcpscraper.dev](https://memory.mcpscraper.dev).
4
4
 
5
- The CLI provides friendly shortcuts for common operations plus universal discovery and invocation for every one of the 356 unified MCP tools, including the governed personal-assistant tools.
5
+ The CLI provides friendly shortcuts for common operations plus universal discovery and invocation for every one of the 363 unified MCP tools, including the governed personal-assistant tools.
6
6
 
7
7
  ## Install
8
8
 
package/dist/bin/cli.js CHANGED
@@ -10,7 +10,7 @@ import { randomUUID } from "crypto";
10
10
  import { ScraperClient, ScraperApiError } from "mcpscraper-sdk";
11
11
 
12
12
  // src/version.ts
13
- var CLI_VERSION = "0.35.0";
13
+ var CLI_VERSION = "0.36.0";
14
14
 
15
15
  // src/generated-tools.ts
16
16
  var MCP_TOOL_CATALOG = [
@@ -24992,17 +24992,17 @@ var MCP_TOOL_CATALOG = [
24992
24992
  "name": "reddit_thread",
24993
24993
  "category": "reddit",
24994
24994
  "title": "Reddit Thread + Comments",
24995
- "description": "Capture a Reddit post and its comment tree from a reddit.com thread URL. Opens normal Reddit in a managed stealth browser first and waits through automatic challenges for up to 300 seconds; only then tries the equivalent old Reddit URL. Returns retrievalSource so the caller can see which page worked. Pass maxComments to cap the list.",
24995
+ "description": "Read one known reddit.com post and its rendered comment tree on current Reddit. The managed residential browser is primary; a bounded managed-browser backup can recover the post and up to 25 comments when the primary fails. Use reddit_trending when no thread URL is known. Costs one Reddit base lookup plus the per-comment rate for comments returned; pass maxComments to bound both output and cost.",
24996
24996
  "inputSchema": {
24997
24997
  "type": "object",
24998
24998
  "properties": {
24999
24999
  "url": {
25000
25000
  "type": "string",
25001
25001
  "minLength": 1,
25002
- "description": "A reddit.com thread/post URL. The reader opens normal Reddit first, waits through automatic browser challenges, and uses the equivalent old Reddit URL only if the normal page remains unavailable."
25002
+ "description": "A reddit.com thread/post URL. Legacy reddit.com hostnames are normalized, but retrieval uses the current Reddit page only."
25003
25003
  },
25004
25004
  "maxComments": {
25005
- "description": "Optional cap on comments returned. Omit to return all captured comments.",
25005
+ "description": "Optional cap on comments returned. Omit to return the largest set captured within the bounded expansion window, up to 2,000.",
25006
25006
  "type": "integer",
25007
25007
  "minimum": 1,
25008
25008
  "maximum": 2e3
@@ -25025,7 +25025,7 @@ var MCP_TOOL_CATALOG = [
25025
25025
  "name": "reddit_trending",
25026
25026
  "category": "reddit",
25027
25027
  "title": "Reddit Trending",
25028
- "description": "Discover Reddit conversations through a managed Google site:reddit.com search for the last week, last 30 days, or all time. Exact phrases are supported by quoting the topic. Saved thread URLs are opened on normal Reddit in a managed stealth browser that waits through automatic challenges for up to 300 seconds, with old Reddit used only as a fallback. If Google finds no usable links, the fallback opens normal Reddit and uses its search bar before trying old Reddit. Inspect resultQuality and discoverySource; set includeComments:false for discovery only.",
25028
+ "description": "Discover Reddit conversations through a site-restricted web search for the last week, month, or all time. With includeComments:true, each candidate is opened on current Reddit through a managed residential browser, with a bounded backup of up to 25 comments after primary failure, and ranked from rendered engagement; discovery, each hydrated thread, and returned comments are billed separately. Set includeComments:false for the faster discovery-only result, and inspect resultQuality and discoverySource before treating an empty result as meaningful.",
25029
25029
  "inputSchema": {
25030
25030
  "type": "object",
25031
25031
  "properties": {
@@ -25041,7 +25041,7 @@ var MCP_TOOL_CATALOG = [
25041
25041
  },
25042
25042
  "window": {
25043
25043
  "default": "month",
25044
- "description": 'Discovery time range: "week", "month" (30 days, default), or "all" (no Google time filter).',
25044
+ "description": 'Web-discovery time range: "week", "month" (default), or "all" (no date filter).',
25045
25045
  "type": "string",
25046
25046
  "enum": [
25047
25047
  "week",
@@ -28157,6 +28157,851 @@ var MCP_TOOL_CATALOG = [
28157
28157
  "idempotentHint": true,
28158
28158
  "openWorldHint": true
28159
28159
  }
28160
+ },
28161
+ {
28162
+ "name": "analytics_apply_site_setup",
28163
+ "category": "analytics",
28164
+ "title": "Apply X-Ray Site Setup",
28165
+ "description": "Publish a confirmed measurement-plan revision to the installed X-Ray tag using an idempotent retry key. No repository access or visitor-experiment authority.",
28166
+ "inputSchema": {
28167
+ "type": "object",
28168
+ "properties": {
28169
+ "siteId": {
28170
+ "type": "string",
28171
+ "format": "uuid",
28172
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28173
+ "description": "Authorized Analytics Site id owning the setup."
28174
+ },
28175
+ "setupId": {
28176
+ "type": "string",
28177
+ "format": "uuid",
28178
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28179
+ "description": "Durable owner-bound setup id returned by an X-Ray setup operation; it is not a browser session id."
28180
+ },
28181
+ "revision": {
28182
+ "type": "integer",
28183
+ "exclusiveMinimum": 0,
28184
+ "maximum": 9007199254740991,
28185
+ "description": "Exact current setup revision. Reload stale revisions before any mutation or canary."
28186
+ },
28187
+ "confirmed": {
28188
+ "type": "boolean",
28189
+ "const": true,
28190
+ "description": "Confirms publishing this exact measurement manifest to the installed X-Ray tag runtime. This does not activate an experiment."
28191
+ },
28192
+ "idempotencyKey": {
28193
+ "type": "string",
28194
+ "minLength": 8,
28195
+ "maxLength": 160,
28196
+ "description": "Retry key; reuse only for this exact mutation."
28197
+ }
28198
+ },
28199
+ "required": [
28200
+ "siteId",
28201
+ "setupId",
28202
+ "revision",
28203
+ "confirmed",
28204
+ "idempotencyKey"
28205
+ ],
28206
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28207
+ },
28208
+ "annotations": {
28209
+ "title": "Apply X-Ray Site Setup",
28210
+ "readOnlyHint": false,
28211
+ "destructiveHint": false,
28212
+ "idempotentHint": true,
28213
+ "openWorldHint": true
28214
+ }
28215
+ },
28216
+ {
28217
+ "name": "analytics_create_experiment",
28218
+ "category": "analytics",
28219
+ "title": "Create X-Ray Experiment Draft",
28220
+ "description": "Create an owner-bound, preregistered experiment draft from a measured site. Requires a hypothesis, primary metric, guardrails, audience, duration, sample threshold, expiry, control, allocations, and only allowlisted visual operations. It never approves or activates the experiment.",
28221
+ "inputSchema": {
28222
+ "type": "object",
28223
+ "properties": {
28224
+ "siteId": {
28225
+ "type": "string",
28226
+ "format": "uuid",
28227
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28228
+ "description": "Authorized Analytics Site id."
28229
+ },
28230
+ "plan": {
28231
+ "type": "object",
28232
+ "properties": {
28233
+ "name": {
28234
+ "type": "string",
28235
+ "minLength": 1,
28236
+ "maxLength": 120,
28237
+ "description": "Owner-facing experiment name."
28238
+ },
28239
+ "hypothesis": {
28240
+ "type": "string",
28241
+ "minLength": 10,
28242
+ "maxLength": 500,
28243
+ "description": "Falsifiable prediction connecting the declared change to the primary metric."
28244
+ },
28245
+ "primaryMetricEvent": {
28246
+ "type": "string",
28247
+ "pattern": "^[a-z][a-z0-9_]{1,79}$",
28248
+ "description": "Persisted X-Ray event used as the sole primary outcome metric."
28249
+ },
28250
+ "guardrailEvents": {
28251
+ "default": [],
28252
+ "description": "Events monitored for unacceptable harm; these do not replace the primary metric.",
28253
+ "maxItems": 10,
28254
+ "type": "array",
28255
+ "items": {
28256
+ "type": "string",
28257
+ "pattern": "^[a-z][a-z0-9_]{1,79}$"
28258
+ }
28259
+ },
28260
+ "guardrailMaximumAbsoluteIncrease": {
28261
+ "default": 0.05,
28262
+ "description": "Maximum allowed absolute increase in any declared harm-event rate versus control before automatic pause.",
28263
+ "type": "number",
28264
+ "exclusiveMinimum": 0,
28265
+ "maximum": 1
28266
+ },
28267
+ "stoppingRule": {
28268
+ "default": {
28269
+ "method": "fixed_horizon",
28270
+ "actionOnSampleRatioMismatch": "pause",
28271
+ "actionOnGuardrailBreach": "pause",
28272
+ "winnerRequiresSignificance": true
28273
+ },
28274
+ "description": "Pre-registered stopping behavior; no continuous peeking or automatic winner rollout.",
28275
+ "type": "object",
28276
+ "properties": {
28277
+ "method": {
28278
+ "type": "string",
28279
+ "const": "fixed_horizon",
28280
+ "description": "Evaluate only after the registered minimum duration and sample."
28281
+ },
28282
+ "actionOnSampleRatioMismatch": {
28283
+ "type": "string",
28284
+ "const": "pause",
28285
+ "description": "Pause when assignment balance is invalid."
28286
+ },
28287
+ "actionOnGuardrailBreach": {
28288
+ "type": "string",
28289
+ "const": "pause",
28290
+ "description": "Pause when a registered harm guardrail is breached."
28291
+ },
28292
+ "winnerRequiresSignificance": {
28293
+ "type": "boolean",
28294
+ "const": true,
28295
+ "description": "Require the registered significance threshold before calling a winner."
28296
+ }
28297
+ },
28298
+ "required": [
28299
+ "method",
28300
+ "actionOnSampleRatioMismatch",
28301
+ "actionOnGuardrailBreach",
28302
+ "winnerRequiresSignificance"
28303
+ ],
28304
+ "additionalProperties": false
28305
+ },
28306
+ "rollbackPlan": {
28307
+ "default": {
28308
+ "action": "restore_control",
28309
+ "triggers": [
28310
+ "pause",
28311
+ "kill",
28312
+ "expiry",
28313
+ "manifest_error",
28314
+ "selector_ambiguity",
28315
+ "performance_guardrail"
28316
+ ]
28317
+ },
28318
+ "description": "Closed rollback contract executed by the Pixel.",
28319
+ "type": "object",
28320
+ "properties": {
28321
+ "action": {
28322
+ "type": "string",
28323
+ "const": "restore_control",
28324
+ "description": "Restore every captured control value."
28325
+ },
28326
+ "triggers": {
28327
+ "minItems": 6,
28328
+ "maxItems": 6,
28329
+ "type": "array",
28330
+ "items": {
28331
+ "type": "string",
28332
+ "enum": [
28333
+ "pause",
28334
+ "kill",
28335
+ "expiry",
28336
+ "manifest_error",
28337
+ "selector_ambiguity",
28338
+ "performance_guardrail"
28339
+ ],
28340
+ "description": "Fail-to-control condition."
28341
+ },
28342
+ "description": "Complete closed rollback trigger set."
28343
+ }
28344
+ },
28345
+ "required": [
28346
+ "action",
28347
+ "triggers"
28348
+ ],
28349
+ "additionalProperties": false
28350
+ },
28351
+ "performanceGuardrailMs": {
28352
+ "default": 16,
28353
+ "description": "Maximum synchronous DOM-application time before the Pixel restores control.",
28354
+ "type": "integer",
28355
+ "minimum": 1,
28356
+ "maximum": 50
28357
+ },
28358
+ "audience": {
28359
+ "type": "object",
28360
+ "properties": {
28361
+ "routePrefixes": {
28362
+ "minItems": 1,
28363
+ "maxItems": 25,
28364
+ "type": "array",
28365
+ "items": {
28366
+ "type": "string",
28367
+ "maxLength": 2e3,
28368
+ "pattern": "^\\/.*"
28369
+ },
28370
+ "description": "Approved route prefixes eligible for assignment."
28371
+ },
28372
+ "trafficClass": {
28373
+ "default": "production",
28374
+ "description": "Declared traffic population; canary state remains separately gated.",
28375
+ "type": "string",
28376
+ "enum": [
28377
+ "internal",
28378
+ "test",
28379
+ "production"
28380
+ ]
28381
+ }
28382
+ },
28383
+ "required": [
28384
+ "routePrefixes"
28385
+ ],
28386
+ "additionalProperties": false,
28387
+ "description": "Bounded route and traffic audience."
28388
+ },
28389
+ "assignmentUnit": {
28390
+ "default": "visitor",
28391
+ "description": "Stable mutually exclusive assignment unit.",
28392
+ "type": "string",
28393
+ "enum": [
28394
+ "visitor",
28395
+ "session"
28396
+ ]
28397
+ },
28398
+ "minimumDurationHours": {
28399
+ "type": "integer",
28400
+ "minimum": 24,
28401
+ "maximum": 2160,
28402
+ "description": "Minimum active hours before a result may be called."
28403
+ },
28404
+ "minimumExposures": {
28405
+ "type": "integer",
28406
+ "minimum": 100,
28407
+ "maximum": 1e7,
28408
+ "description": "Minimum visible variant exposures before evaluation."
28409
+ },
28410
+ "minimumDetectableEffect": {
28411
+ "type": "number",
28412
+ "exclusiveMinimum": 0,
28413
+ "maximum": 1,
28414
+ "description": "Smallest absolute effect worth detecting, expressed from 0 to 1."
28415
+ },
28416
+ "alpha": {
28417
+ "default": 0.05,
28418
+ "description": "Pre-registered false-positive threshold.",
28419
+ "type": "number",
28420
+ "exclusiveMinimum": 0,
28421
+ "maximum": 0.2
28422
+ },
28423
+ "power": {
28424
+ "default": 0.8,
28425
+ "description": "Pre-registered statistical power target.",
28426
+ "type": "number",
28427
+ "minimum": 0.7,
28428
+ "maximum": 0.99
28429
+ },
28430
+ "variants": {
28431
+ "minItems": 2,
28432
+ "maxItems": 8,
28433
+ "type": "array",
28434
+ "items": {
28435
+ "type": "object",
28436
+ "properties": {
28437
+ "variantId": {
28438
+ "type": "string",
28439
+ "pattern": "^[a-z][a-z0-9_-]{1,79}$",
28440
+ "description": "Stable variant identifier."
28441
+ },
28442
+ "label": {
28443
+ "type": "string",
28444
+ "minLength": 1,
28445
+ "maxLength": 120,
28446
+ "description": "Owner-facing variant label."
28447
+ },
28448
+ "allocation": {
28449
+ "type": "number",
28450
+ "exclusiveMinimum": 0,
28451
+ "maximum": 1,
28452
+ "description": "Traffic allocation from 0 to 1; all variants must total 1."
28453
+ },
28454
+ "operations": {
28455
+ "maxItems": 12,
28456
+ "type": "array",
28457
+ "items": {
28458
+ "oneOf": [
28459
+ {
28460
+ "type": "object",
28461
+ "properties": {
28462
+ "kind": {
28463
+ "type": "string",
28464
+ "const": "replace_text",
28465
+ "description": "Replace plain text only."
28466
+ },
28467
+ "selector": {
28468
+ "type": "string",
28469
+ "minLength": 1,
28470
+ "maxLength": 500,
28471
+ "description": "Unique bounded CSS selector."
28472
+ },
28473
+ "text": {
28474
+ "type": "string",
28475
+ "maxLength": 240,
28476
+ "description": "Replacement text without markup."
28477
+ }
28478
+ },
28479
+ "required": [
28480
+ "kind",
28481
+ "selector",
28482
+ "text"
28483
+ ],
28484
+ "additionalProperties": false
28485
+ },
28486
+ {
28487
+ "type": "object",
28488
+ "properties": {
28489
+ "kind": {
28490
+ "type": "string",
28491
+ "const": "set_style_token",
28492
+ "description": "Apply one product-owned style token."
28493
+ },
28494
+ "selector": {
28495
+ "type": "string",
28496
+ "minLength": 1,
28497
+ "maxLength": 500,
28498
+ "description": "Unique bounded CSS selector."
28499
+ },
28500
+ "token": {
28501
+ "type": "string",
28502
+ "enum": [
28503
+ "cta_primary",
28504
+ "cta_secondary",
28505
+ "cta_contrast",
28506
+ "muted",
28507
+ "highlight"
28508
+ ],
28509
+ "description": "Allowlisted style token."
28510
+ }
28511
+ },
28512
+ "required": [
28513
+ "kind",
28514
+ "selector",
28515
+ "token"
28516
+ ],
28517
+ "additionalProperties": false
28518
+ },
28519
+ {
28520
+ "type": "object",
28521
+ "properties": {
28522
+ "kind": {
28523
+ "type": "string",
28524
+ "const": "swap_image",
28525
+ "description": "Swap one image using HTTPS."
28526
+ },
28527
+ "selector": {
28528
+ "type": "string",
28529
+ "minLength": 1,
28530
+ "maxLength": 500,
28531
+ "description": "Unique image selector."
28532
+ },
28533
+ "src": {
28534
+ "type": "string",
28535
+ "maxLength": 2e3,
28536
+ "format": "uri",
28537
+ "description": "HTTPS image URL."
28538
+ },
28539
+ "alt": {
28540
+ "type": "string",
28541
+ "maxLength": 240,
28542
+ "description": "Required bounded alternative text."
28543
+ }
28544
+ },
28545
+ "required": [
28546
+ "kind",
28547
+ "selector",
28548
+ "src",
28549
+ "alt"
28550
+ ],
28551
+ "additionalProperties": false
28552
+ },
28553
+ {
28554
+ "type": "object",
28555
+ "properties": {
28556
+ "kind": {
28557
+ "type": "string",
28558
+ "const": "move_relative",
28559
+ "description": "Move one sibling before or after another."
28560
+ },
28561
+ "selector": {
28562
+ "type": "string",
28563
+ "minLength": 1,
28564
+ "maxLength": 500,
28565
+ "description": "Unique element selector."
28566
+ },
28567
+ "anchorSelector": {
28568
+ "type": "string",
28569
+ "minLength": 1,
28570
+ "maxLength": 500,
28571
+ "description": "Unique sibling anchor selector."
28572
+ },
28573
+ "position": {
28574
+ "type": "string",
28575
+ "enum": [
28576
+ "before",
28577
+ "after"
28578
+ ],
28579
+ "description": "Placement relative to the anchor."
28580
+ }
28581
+ },
28582
+ "required": [
28583
+ "kind",
28584
+ "selector",
28585
+ "anchorSelector",
28586
+ "position"
28587
+ ],
28588
+ "additionalProperties": false
28589
+ },
28590
+ {
28591
+ "type": "object",
28592
+ "properties": {
28593
+ "kind": {
28594
+ "type": "string",
28595
+ "const": "set_visibility",
28596
+ "description": "Show or hide one unique element."
28597
+ },
28598
+ "selector": {
28599
+ "type": "string",
28600
+ "minLength": 1,
28601
+ "maxLength": 500,
28602
+ "description": "Unique bounded CSS selector."
28603
+ },
28604
+ "visible": {
28605
+ "type": "boolean",
28606
+ "description": "Whether the selected element should be visible."
28607
+ }
28608
+ },
28609
+ "required": [
28610
+ "kind",
28611
+ "selector",
28612
+ "visible"
28613
+ ],
28614
+ "additionalProperties": false
28615
+ }
28616
+ ]
28617
+ },
28618
+ "description": "Closed, data-only presentation operations; an empty list is the control."
28619
+ }
28620
+ },
28621
+ "required": [
28622
+ "variantId",
28623
+ "label",
28624
+ "allocation",
28625
+ "operations"
28626
+ ],
28627
+ "additionalProperties": false,
28628
+ "description": "One control or treatment variant."
28629
+ },
28630
+ "description": "Two to eight mutually exclusive variants including one control."
28631
+ },
28632
+ "expiresAt": {
28633
+ "type": "string",
28634
+ "format": "date-time",
28635
+ "pattern": "^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$",
28636
+ "description": "Hard experiment expiry; the Pixel rolls back after this instant."
28637
+ }
28638
+ },
28639
+ "required": [
28640
+ "name",
28641
+ "hypothesis",
28642
+ "primaryMetricEvent",
28643
+ "audience",
28644
+ "minimumDurationHours",
28645
+ "minimumExposures",
28646
+ "minimumDetectableEffect",
28647
+ "variants",
28648
+ "expiresAt"
28649
+ ],
28650
+ "additionalProperties": false,
28651
+ "description": "Preregistered hypothesis, metric, audience, sample requirements, expiry, allocations, and allowlisted visual operations. One control variant must have no operations."
28652
+ },
28653
+ "idempotencyKey": {
28654
+ "type": "string",
28655
+ "minLength": 8,
28656
+ "maxLength": 160,
28657
+ "description": "Retry key; reuse only for this exact mutation."
28658
+ }
28659
+ },
28660
+ "required": [
28661
+ "siteId",
28662
+ "plan",
28663
+ "idempotencyKey"
28664
+ ],
28665
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28666
+ },
28667
+ "annotations": {
28668
+ "title": "Create X-Ray Experiment Draft",
28669
+ "readOnlyHint": false,
28670
+ "destructiveHint": false,
28671
+ "idempotentHint": true,
28672
+ "openWorldHint": false
28673
+ }
28674
+ },
28675
+ {
28676
+ "name": "analytics_get_experiment",
28677
+ "category": "analytics",
28678
+ "title": "Get X-Ray Experiment",
28679
+ "description": "Read the preregistered plan, exact state, assignment counts, exposures, outcomes, and decision status for one authorized experiment. Browser intent is never reported as a terminal business outcome.",
28680
+ "inputSchema": {
28681
+ "type": "object",
28682
+ "properties": {
28683
+ "siteId": {
28684
+ "type": "string",
28685
+ "format": "uuid",
28686
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28687
+ "description": "Authorized Analytics Site id."
28688
+ },
28689
+ "experimentId": {
28690
+ "type": "string",
28691
+ "format": "uuid",
28692
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28693
+ "description": "Owner-bound experiment id returned by analytics_create_experiment."
28694
+ }
28695
+ },
28696
+ "required": [
28697
+ "siteId",
28698
+ "experimentId"
28699
+ ],
28700
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28701
+ },
28702
+ "annotations": {
28703
+ "title": "Get X-Ray Experiment",
28704
+ "readOnlyHint": true,
28705
+ "destructiveHint": false,
28706
+ "idempotentHint": true,
28707
+ "openWorldHint": false
28708
+ }
28709
+ },
28710
+ {
28711
+ "name": "analytics_prepare_site_setup",
28712
+ "category": "analytics",
28713
+ "title": "Prepare X-Ray Site Setup",
28714
+ "description": "Inspect the public site and prepare an expiring measurement plan for an already installed X-Ray tag. No repository access, credentials, code changes, visitor delivery, or MCP Scraper Credits.",
28715
+ "inputSchema": {
28716
+ "type": "object",
28717
+ "properties": {
28718
+ "siteId": {
28719
+ "type": "string",
28720
+ "format": "uuid",
28721
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28722
+ "description": "Authorized Analytics Site id returned by analytics_list_sites."
28723
+ },
28724
+ "startUrl": {
28725
+ "type": "string",
28726
+ "maxLength": 3e3,
28727
+ "format": "uri",
28728
+ "description": "Public same-origin URL from which X-Ray discovers bounded routes and rendering surfaces."
28729
+ },
28730
+ "goal": {
28731
+ "type": "string",
28732
+ "minLength": 1,
28733
+ "maxLength": 500,
28734
+ "description": "Plain-language customer outcome to measure; do not paste credentials, source code, form contents, or visitor data."
28735
+ },
28736
+ "businessModel": {
28737
+ "description": "Optional user-confirmed model; omit to receive an evidence-backed recommendation.",
28738
+ "type": "string",
28739
+ "enum": [
28740
+ "saas",
28741
+ "lead_generation",
28742
+ "ecommerce"
28743
+ ]
28744
+ },
28745
+ "scope": {
28746
+ "default": "same_origin",
28747
+ "description": "Bounded route discovery scope; neither mode authorizes third-party crawling.",
28748
+ "type": "string",
28749
+ "enum": [
28750
+ "same_origin",
28751
+ "sitemap"
28752
+ ]
28753
+ },
28754
+ "maxPages": {
28755
+ "default": 50,
28756
+ "description": "Maximum pages inspected under the X-Ray entitlement; this consumes zero MCP Scraper Credits.",
28757
+ "type": "integer",
28758
+ "minimum": 1,
28759
+ "maximum": 250
28760
+ },
28761
+ "pixelId": {
28762
+ "description": "Optional existing Pixel belonging to the Site; omit to let the service resolve the canonical Pixel.",
28763
+ "type": "string",
28764
+ "format": "uuid",
28765
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
28766
+ },
28767
+ "consentMode": {
28768
+ "default": "required",
28769
+ "description": "Consent expectation for non-delivering discovery. It never grants a visitor consent choice.",
28770
+ "type": "string",
28771
+ "enum": [
28772
+ "required",
28773
+ "granted_test",
28774
+ "unknown"
28775
+ ]
28776
+ }
28777
+ },
28778
+ "required": [
28779
+ "siteId",
28780
+ "startUrl"
28781
+ ],
28782
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28783
+ },
28784
+ "annotations": {
28785
+ "title": "Prepare X-Ray Site Setup",
28786
+ "readOnlyHint": true,
28787
+ "destructiveHint": false,
28788
+ "idempotentHint": false,
28789
+ "openWorldHint": true
28790
+ }
28791
+ },
28792
+ {
28793
+ "name": "analytics_set_experiment_state",
28794
+ "category": "analytics",
28795
+ "title": "Set X-Ray Experiment State",
28796
+ "description": "Approve, canary, activate, pause, kill, or archive one exact experiment revision. Approval and visitor activation are separate confirmed steps. Activation publishes the signed tag manifest; pause and kill publish rollback. Reuse the same idempotency key only for the identical transition.",
28797
+ "inputSchema": {
28798
+ "type": "object",
28799
+ "properties": {
28800
+ "siteId": {
28801
+ "type": "string",
28802
+ "format": "uuid",
28803
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28804
+ "description": "Authorized Analytics Site id."
28805
+ },
28806
+ "experimentId": {
28807
+ "type": "string",
28808
+ "format": "uuid",
28809
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28810
+ "description": "Owner-bound experiment id returned by analytics_create_experiment."
28811
+ },
28812
+ "revision": {
28813
+ "type": "integer",
28814
+ "exclusiveMinimum": 0,
28815
+ "maximum": 9007199254740991,
28816
+ "description": "Exact experiment revision being changed."
28817
+ },
28818
+ "operation": {
28819
+ "type": "string",
28820
+ "enum": [
28821
+ "approve",
28822
+ "activate_canary",
28823
+ "activate",
28824
+ "pause",
28825
+ "kill",
28826
+ "archive"
28827
+ ],
28828
+ "description": "Approval and activation are distinct operations. Pause and kill publish rollback immediately."
28829
+ },
28830
+ "confirmed": {
28831
+ "description": "Required for approve, activate_canary, and activate. This confirms only the exact state transition.",
28832
+ "type": "boolean",
28833
+ "const": true
28834
+ },
28835
+ "idempotencyKey": {
28836
+ "type": "string",
28837
+ "minLength": 8,
28838
+ "maxLength": 160,
28839
+ "description": "Retry key; reuse only for this exact mutation."
28840
+ }
28841
+ },
28842
+ "required": [
28843
+ "siteId",
28844
+ "experimentId",
28845
+ "revision",
28846
+ "operation",
28847
+ "idempotencyKey"
28848
+ ],
28849
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28850
+ },
28851
+ "annotations": {
28852
+ "title": "Set X-Ray Experiment State",
28853
+ "readOnlyHint": false,
28854
+ "destructiveHint": true,
28855
+ "idempotentHint": true,
28856
+ "openWorldHint": false
28857
+ }
28858
+ },
28859
+ {
28860
+ "name": "analytics_setup_site",
28861
+ "category": "analytics",
28862
+ "title": "Install X-Ray on a Site",
28863
+ "description": "Use for \u201Cset up X-Ray\u201D or \u201Ctell me what drives customers.\u201D One installed X-Ray tag loads a digest-bound, versioned measurement manifest across approved pages; GitHub access is not required. State is a durable owner-bound setupId and revision, never a browser session. Setup charges zero MCP Scraper Credits. Apply publishes measurement rules only. Experiment approval and activation are separate. Returns exactly one honest next action.",
28864
+ "inputSchema": {
28865
+ "type": "object",
28866
+ "properties": {
28867
+ "siteId": {
28868
+ "description": "Authorized Analytics Site id. Supply siteId or startUrl on the first call.",
28869
+ "type": "string",
28870
+ "format": "uuid",
28871
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
28872
+ },
28873
+ "startUrl": {
28874
+ "description": "Public same-origin URL to set up. Supply only when siteId is not yet known.",
28875
+ "type": "string",
28876
+ "maxLength": 3e3,
28877
+ "format": "uri"
28878
+ },
28879
+ "goal": {
28880
+ "type": "string",
28881
+ "minLength": 1,
28882
+ "maxLength": 500,
28883
+ "description": "Plain-language customer outcome to measure; do not paste credentials, source code, form contents, or visitor data."
28884
+ },
28885
+ "setupId": {
28886
+ "description": "Reuse to continue an existing durable setup after approval, deployment, or reconnecting.",
28887
+ "type": "string",
28888
+ "format": "uuid",
28889
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
28890
+ },
28891
+ "revision": {
28892
+ "type": "integer",
28893
+ "exclusiveMinimum": 0,
28894
+ "maximum": 9007199254740991,
28895
+ "description": "Exact current setup revision. Reload stale revisions before any mutation or canary."
28896
+ },
28897
+ "businessModel": {
28898
+ "description": "Optional explicit business model; omit to infer it from bounded site evidence.",
28899
+ "type": "string",
28900
+ "enum": [
28901
+ "saas",
28902
+ "lead_generation",
28903
+ "ecommerce"
28904
+ ]
28905
+ },
28906
+ "goalAction": {
28907
+ "default": "continue",
28908
+ "description": "Desired lifecycle step. Continue lets the fa\xE7ade select the single safe next operation from durable state.",
28909
+ "type": "string",
28910
+ "enum": [
28911
+ "continue",
28912
+ "prepare",
28913
+ "apply",
28914
+ "verify",
28915
+ "first_answers"
28916
+ ]
28917
+ },
28918
+ "authority": {
28919
+ "description": "Source authority or ownership context supporting this content.",
28920
+ "type": "object",
28921
+ "properties": {
28922
+ "confirmed": {
28923
+ "description": "Confirms publishing this exact setup revision to the installed X-Ray tag runtime. It does not authorize a visitor experiment.",
28924
+ "type": "boolean",
28925
+ "const": true
28926
+ },
28927
+ "confirmedCanary": {
28928
+ "description": "Separately authorizes labeled verification canaries for this exact revision; it does not authorize apply, merge, or deploy.",
28929
+ "type": "boolean",
28930
+ "const": true
28931
+ }
28932
+ },
28933
+ "additionalProperties": false
28934
+ },
28935
+ "idempotencyKey": {
28936
+ "description": "Required only for apply or canary-capable verify; reuse for the exact same intent after an unknown result.",
28937
+ "type": "string",
28938
+ "minLength": 8,
28939
+ "maxLength": 160
28940
+ }
28941
+ },
28942
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28943
+ },
28944
+ "annotations": {
28945
+ "title": "Install X-Ray on a Site",
28946
+ "readOnlyHint": false,
28947
+ "destructiveHint": false,
28948
+ "idempotentHint": false,
28949
+ "openWorldHint": true
28950
+ }
28951
+ },
28952
+ {
28953
+ "name": "analytics_verify_site_setup",
28954
+ "category": "analytics",
28955
+ "title": "Verify X-Ray Site Setup",
28956
+ "description": "Expert live proof. Defaults non-delivering; confirmedCanary allows labeled canaries. A PR/build is not deployed definition or outcome proof.",
28957
+ "inputSchema": {
28958
+ "type": "object",
28959
+ "properties": {
28960
+ "siteId": {
28961
+ "type": "string",
28962
+ "format": "uuid",
28963
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28964
+ "description": "Authorized Analytics Site id owning the setup."
28965
+ },
28966
+ "setupId": {
28967
+ "type": "string",
28968
+ "format": "uuid",
28969
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
28970
+ "description": "Durable owner-bound setup id returned by an X-Ray setup operation; it is not a browser session id."
28971
+ },
28972
+ "revision": {
28973
+ "type": "integer",
28974
+ "exclusiveMinimum": 0,
28975
+ "maximum": 9007199254740991,
28976
+ "description": "Exact current setup revision. Reload stale revisions before any mutation or canary."
28977
+ },
28978
+ "confirmedCanary": {
28979
+ "description": "Omit for non-delivering interception. True separately authorizes only labeled, bounded canaries; it does not authorize merge or deploy.",
28980
+ "type": "boolean",
28981
+ "const": true
28982
+ },
28983
+ "idempotencyKey": {
28984
+ "type": "string",
28985
+ "minLength": 8,
28986
+ "maxLength": 160,
28987
+ "description": "Retry key; reuse only for this exact mutation."
28988
+ }
28989
+ },
28990
+ "required": [
28991
+ "siteId",
28992
+ "setupId",
28993
+ "revision",
28994
+ "idempotencyKey"
28995
+ ],
28996
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
28997
+ },
28998
+ "annotations": {
28999
+ "title": "Verify X-Ray Site Setup",
29000
+ "readOnlyHint": false,
29001
+ "destructiveHint": false,
29002
+ "idempotentHint": true,
29003
+ "openWorldHint": true
29004
+ }
28160
29005
  }
28161
29006
  ];
28162
29007
  var MCP_TOOL_NAMES = MCP_TOOL_CATALOG.map((tool) => tool.name);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mcpscraper-cli",
3
- "version": "0.35.0",
3
+ "version": "0.36.0",
4
4
  "description": "Command-line interface for mcpscraper.dev and memory.mcpscraper.dev",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -19,7 +19,7 @@
19
19
  },
20
20
  "dependencies": {
21
21
  "commander": "^12.0.0",
22
- "mcpscraper-sdk": "^0.35.1"
22
+ "mcpscraper-sdk": "^0.37.0"
23
23
  },
24
24
  "devDependencies": {
25
25
  "@types/node": "^22.0.0"