mcpscraper-cli 0.35.1 → 0.37.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/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.1";
13
+ var CLI_VERSION = "0.37.0";
14
14
 
15
15
  // src/generated-tools.ts
16
16
  var MCP_TOOL_CATALOG = [
@@ -28157,6 +28157,1529 @@ 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
+ }
29005
+ },
29006
+ {
29007
+ "name": "analytics_apply_revenue_source",
29008
+ "category": "analytics",
29009
+ "title": "Apply SaaS Revenue Authority",
29010
+ "description": "Apply one exact reviewed revenue-source revision using an idempotency key. It binds an authorized provider account and authority role; it never accepts credentials and does not claim the source live before provider receipt verification.",
29011
+ "inputSchema": {
29012
+ "type": "object",
29013
+ "properties": {
29014
+ "siteId": {
29015
+ "type": "string",
29016
+ "format": "uuid",
29017
+ "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)$",
29018
+ "description": "Authorized Analytics Site id."
29019
+ },
29020
+ "setupId": {
29021
+ "type": "string",
29022
+ "format": "uuid",
29023
+ "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)$",
29024
+ "description": "Owner-bound revenue setup id returned by prepare or the facade."
29025
+ },
29026
+ "revision": {
29027
+ "type": "integer",
29028
+ "exclusiveMinimum": 0,
29029
+ "maximum": 9007199254740991,
29030
+ "description": "Exact current revenue setup revision; reload before retrying a stale mutation."
29031
+ },
29032
+ "confirmed": {
29033
+ "type": "boolean",
29034
+ "const": true,
29035
+ "description": "Confirms this exact provider account, role, and event-family revision."
29036
+ },
29037
+ "idempotencyKey": {
29038
+ "type": "string",
29039
+ "minLength": 8,
29040
+ "maxLength": 160,
29041
+ "description": "Retry key; reuse only for this exact mutation."
29042
+ }
29043
+ },
29044
+ "required": [
29045
+ "siteId",
29046
+ "setupId",
29047
+ "revision",
29048
+ "confirmed",
29049
+ "idempotencyKey"
29050
+ ],
29051
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29052
+ },
29053
+ "annotations": {
29054
+ "title": "Apply SaaS Revenue Authority",
29055
+ "readOnlyHint": false,
29056
+ "destructiveHint": false,
29057
+ "idempotentHint": true,
29058
+ "openWorldHint": true
29059
+ }
29060
+ },
29061
+ {
29062
+ "name": "analytics_create_post_purchase_survey",
29063
+ "category": "analytics",
29064
+ "title": "Create Post-Purchase Survey Draft",
29065
+ "description": "Create an idempotent, structured, contact-free post-purchase survey draft. Customer answers remain reported influence and cannot establish identity, mutate CRM, qualify activation, or change observed touches.",
29066
+ "inputSchema": {
29067
+ "type": "object",
29068
+ "properties": {
29069
+ "siteId": {
29070
+ "type": "string",
29071
+ "format": "uuid",
29072
+ "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)$",
29073
+ "description": "Authorized Analytics Site id."
29074
+ },
29075
+ "name": {
29076
+ "type": "string",
29077
+ "minLength": 1,
29078
+ "maxLength": 160,
29079
+ "description": "Owner-facing survey name."
29080
+ },
29081
+ "question": {
29082
+ "type": "string",
29083
+ "minLength": 1,
29084
+ "maxLength": 500,
29085
+ "description": "Customer-visible structured influence question; do not request contact data or free text."
29086
+ },
29087
+ "selectionMode": {
29088
+ "type": "string",
29089
+ "enum": [
29090
+ "single",
29091
+ "multiple"
29092
+ ],
29093
+ "description": "Whether a respondent may select one influence or several."
29094
+ },
29095
+ "eligibleOutcomeFamilies": {
29096
+ "minItems": 1,
29097
+ "maxItems": 20,
29098
+ "type": "array",
29099
+ "items": {
29100
+ "type": "string",
29101
+ "minLength": 1,
29102
+ "maxLength": 80
29103
+ },
29104
+ "description": "Authoritative outcome families eligible to receive an invitation."
29105
+ },
29106
+ "exchangeTtlSeconds": {
29107
+ "type": "integer",
29108
+ "minimum": 60,
29109
+ "maximum": 86400,
29110
+ "description": "Short-lived merchant exchange-code lifetime."
29111
+ },
29112
+ "sessionTtlSeconds": {
29113
+ "type": "integer",
29114
+ "minimum": 60,
29115
+ "maximum": 86400,
29116
+ "description": "Hosted survey session lifetime after one-time exchange."
29117
+ },
29118
+ "approvedCopyId": {
29119
+ "description": "Versioned privacy disclosure approval. A draft may omit it; production publication may not.",
29120
+ "anyOf": [
29121
+ {
29122
+ "type": "string",
29123
+ "minLength": 1,
29124
+ "maxLength": 200
29125
+ },
29126
+ {
29127
+ "type": "null"
29128
+ }
29129
+ ]
29130
+ },
29131
+ "options": {
29132
+ "minItems": 2,
29133
+ "maxItems": 20,
29134
+ "type": "array",
29135
+ "items": {
29136
+ "type": "object",
29137
+ "properties": {
29138
+ "optionId": {
29139
+ "type": "string",
29140
+ "minLength": 1,
29141
+ "maxLength": 80,
29142
+ "description": "Stable opaque option id; changing a label never changes this id."
29143
+ },
29144
+ "label": {
29145
+ "type": "string",
29146
+ "minLength": 1,
29147
+ "maxLength": 160,
29148
+ "description": "Bounded owner-authored influence label. Free-text customer testimony is not accepted."
29149
+ }
29150
+ },
29151
+ "required": [
29152
+ "optionId",
29153
+ "label"
29154
+ ],
29155
+ "additionalProperties": false
29156
+ },
29157
+ "description": "Two to twenty stable structured influences."
29158
+ },
29159
+ "idempotencyKey": {
29160
+ "type": "string",
29161
+ "minLength": 8,
29162
+ "maxLength": 160,
29163
+ "description": "Retry key; reuse only for this exact mutation."
29164
+ }
29165
+ },
29166
+ "required": [
29167
+ "siteId",
29168
+ "name",
29169
+ "question",
29170
+ "selectionMode",
29171
+ "eligibleOutcomeFamilies",
29172
+ "exchangeTtlSeconds",
29173
+ "sessionTtlSeconds",
29174
+ "options",
29175
+ "idempotencyKey"
29176
+ ],
29177
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29178
+ },
29179
+ "annotations": {
29180
+ "title": "Create Post-Purchase Survey Draft",
29181
+ "readOnlyHint": false,
29182
+ "destructiveHint": false,
29183
+ "idempotentHint": true,
29184
+ "openWorldHint": false
29185
+ }
29186
+ },
29187
+ {
29188
+ "name": "analytics_get_attribution_methodology",
29189
+ "category": "analytics",
29190
+ "title": "Get X-Ray Attribution Methodology",
29191
+ "description": "Read the seven observed models, default position weights, explicit observed-plus-reported methodology, and evidence boundaries. Use before requesting combined impact; this never turns survey testimony or aggregate impressions into deterministic touches.",
29192
+ "inputSchema": {
29193
+ "type": "object",
29194
+ "properties": {
29195
+ "siteId": {
29196
+ "type": "string",
29197
+ "format": "uuid",
29198
+ "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)$",
29199
+ "description": "Authorized Analytics Site id."
29200
+ }
29201
+ },
29202
+ "required": [
29203
+ "siteId"
29204
+ ],
29205
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29206
+ },
29207
+ "annotations": {
29208
+ "title": "Get X-Ray Attribution Methodology",
29209
+ "readOnlyHint": true,
29210
+ "destructiveHint": false,
29211
+ "idempotentHint": true,
29212
+ "openWorldHint": false
29213
+ }
29214
+ },
29215
+ {
29216
+ "name": "analytics_get_impact_report",
29217
+ "category": "analytics",
29218
+ "title": "Get Observed and Reported Impact",
29219
+ "description": "Read an opt-in impact projection that keeps observed attribution and customer-reported influence in separate ledgers. Requires a published survey, one existing observed model, an immutable methodology version, and explicit weights totaling 1,000,000 micros.",
29220
+ "inputSchema": {
29221
+ "type": "object",
29222
+ "properties": {
29223
+ "siteId": {
29224
+ "type": "string",
29225
+ "format": "uuid",
29226
+ "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)$",
29227
+ "description": "Authorized Analytics Site id."
29228
+ },
29229
+ "surveyId": {
29230
+ "type": "string",
29231
+ "format": "uuid",
29232
+ "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)$",
29233
+ "description": "Published or paused post-purchase survey whose immutable responses supply the reported ledger."
29234
+ },
29235
+ "baseModel": {
29236
+ "type": "string",
29237
+ "enum": [
29238
+ "first_touch",
29239
+ "last_touch",
29240
+ "last_non_direct",
29241
+ "linear",
29242
+ "time_decay",
29243
+ "position_based",
29244
+ "custom_weighted"
29245
+ ],
29246
+ "description": "Existing observed attribution model; observed_plus_reported is deliberately not an observed model."
29247
+ },
29248
+ "observedWeightMicros": {
29249
+ "type": "integer",
29250
+ "minimum": 0,
29251
+ "maximum": 1e6,
29252
+ "description": "Observed share in micros. It must total exactly 1,000,000 with reportedWeightMicros."
29253
+ },
29254
+ "reportedWeightMicros": {
29255
+ "type": "integer",
29256
+ "minimum": 0,
29257
+ "maximum": 1e6,
29258
+ "description": "Customer-reported share in micros. It must total exactly 1,000,000 with observedWeightMicros."
29259
+ },
29260
+ "methodologyVersion": {
29261
+ "type": "string",
29262
+ "const": "xray_observed_plus_reported_equal_selected_v1",
29263
+ "description": "Immutable methodology selected after reading analytics_get_attribution_methodology."
29264
+ },
29265
+ "from": {
29266
+ "description": "Inclusive observed-evidence start. Omit with to for the last 30 days.",
29267
+ "type": "string",
29268
+ "format": "date-time",
29269
+ "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))$"
29270
+ },
29271
+ "to": {
29272
+ "description": "Exclusive observed-evidence end. Omit to use now.",
29273
+ "type": "string",
29274
+ "format": "date-time",
29275
+ "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))$"
29276
+ },
29277
+ "clickWindow": {
29278
+ "default": 90,
29279
+ "description": "Independent observed click window.",
29280
+ "anyOf": [
29281
+ {
29282
+ "type": "number",
29283
+ "const": 7
29284
+ },
29285
+ {
29286
+ "type": "number",
29287
+ "const": 14
29288
+ },
29289
+ {
29290
+ "type": "number",
29291
+ "const": 30
29292
+ },
29293
+ {
29294
+ "type": "number",
29295
+ "const": 60
29296
+ },
29297
+ {
29298
+ "type": "number",
29299
+ "const": 90
29300
+ },
29301
+ {
29302
+ "type": "number",
29303
+ "const": 180
29304
+ },
29305
+ {
29306
+ "type": "number",
29307
+ "const": 365
29308
+ },
29309
+ {
29310
+ "type": "string",
29311
+ "const": "lifetime"
29312
+ }
29313
+ ]
29314
+ },
29315
+ "viewWindow": {
29316
+ "default": 90,
29317
+ "description": "Independent view window; provider-unavailable state never manufactures view touches.",
29318
+ "anyOf": [
29319
+ {
29320
+ "type": "number",
29321
+ "const": 7
29322
+ },
29323
+ {
29324
+ "type": "number",
29325
+ "const": 14
29326
+ },
29327
+ {
29328
+ "type": "number",
29329
+ "const": 30
29330
+ },
29331
+ {
29332
+ "type": "number",
29333
+ "const": 60
29334
+ },
29335
+ {
29336
+ "type": "number",
29337
+ "const": 90
29338
+ },
29339
+ {
29340
+ "type": "number",
29341
+ "const": 180
29342
+ },
29343
+ {
29344
+ "type": "number",
29345
+ "const": 365
29346
+ },
29347
+ {
29348
+ "type": "string",
29349
+ "const": "lifetime"
29350
+ }
29351
+ ]
29352
+ }
29353
+ },
29354
+ "required": [
29355
+ "siteId",
29356
+ "surveyId",
29357
+ "baseModel",
29358
+ "observedWeightMicros",
29359
+ "reportedWeightMicros",
29360
+ "methodologyVersion"
29361
+ ],
29362
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29363
+ },
29364
+ "annotations": {
29365
+ "title": "Get Observed and Reported Impact",
29366
+ "readOnlyHint": true,
29367
+ "destructiveHint": false,
29368
+ "idempotentHint": true,
29369
+ "openWorldHint": false
29370
+ }
29371
+ },
29372
+ {
29373
+ "name": "analytics_get_post_purchase_survey_report",
29374
+ "category": "analytics",
29375
+ "title": "Get Post-Purchase Survey Report",
29376
+ "description": "Read aggregate response coverage, option counts, and separately labeled reported-influence evidence for one survey. The output excludes contact fields, raw invitation tokens, and deterministic touch claims.",
29377
+ "inputSchema": {
29378
+ "type": "object",
29379
+ "properties": {
29380
+ "siteId": {
29381
+ "type": "string",
29382
+ "format": "uuid",
29383
+ "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)$",
29384
+ "description": "Authorized Analytics Site id."
29385
+ },
29386
+ "surveyId": {
29387
+ "type": "string",
29388
+ "format": "uuid",
29389
+ "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)$",
29390
+ "description": "Owner-bound survey id."
29391
+ }
29392
+ },
29393
+ "required": [
29394
+ "siteId",
29395
+ "surveyId"
29396
+ ],
29397
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29398
+ },
29399
+ "annotations": {
29400
+ "title": "Get Post-Purchase Survey Report",
29401
+ "readOnlyHint": true,
29402
+ "destructiveHint": false,
29403
+ "idempotentHint": true,
29404
+ "openWorldHint": false
29405
+ }
29406
+ },
29407
+ {
29408
+ "name": "analytics_get_view_evidence_status",
29409
+ "category": "analytics",
29410
+ "title": "Get Provider View Evidence Status",
29411
+ "description": "Read provider-by-provider availability for event-level view evidence. Unavailable or unproven is an honest result; aggregate campaign impressions can never create person-level attribution touches.",
29412
+ "inputSchema": {
29413
+ "type": "object",
29414
+ "properties": {
29415
+ "siteId": {
29416
+ "type": "string",
29417
+ "format": "uuid",
29418
+ "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)$",
29419
+ "description": "Authorized Analytics Site id."
29420
+ }
29421
+ },
29422
+ "required": [
29423
+ "siteId"
29424
+ ],
29425
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29426
+ },
29427
+ "annotations": {
29428
+ "title": "Get Provider View Evidence Status",
29429
+ "readOnlyHint": true,
29430
+ "destructiveHint": false,
29431
+ "idempotentHint": true,
29432
+ "openWorldHint": false
29433
+ }
29434
+ },
29435
+ {
29436
+ "name": "analytics_prepare_revenue_source",
29437
+ "category": "analytics",
29438
+ "title": "Prepare SaaS Revenue Authority",
29439
+ "description": "Inspect an already-authorized provider connection and return a revisioned primary-or-observation revenue plan. This read-like preparation may query the provider but cannot create revenue or receive a provider credential.",
29440
+ "inputSchema": {
29441
+ "type": "object",
29442
+ "properties": {
29443
+ "siteId": {
29444
+ "type": "string",
29445
+ "format": "uuid",
29446
+ "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)$",
29447
+ "description": "Authorized Analytics Site id."
29448
+ },
29449
+ "serviceConnectionRef": {
29450
+ "type": "string",
29451
+ "minLength": 1,
29452
+ "maxLength": 240,
29453
+ "description": "Already-authorized connected-account reference. Credentials never belong in this input."
29454
+ },
29455
+ "role": {
29456
+ "default": "primary",
29457
+ "description": "Choose one primary authority per subscription-revenue outcome family; observation sources cannot create revenue.",
29458
+ "type": "string",
29459
+ "enum": [
29460
+ "primary",
29461
+ "observation"
29462
+ ]
29463
+ },
29464
+ "idempotencyKey": {
29465
+ "type": "string",
29466
+ "minLength": 8,
29467
+ "maxLength": 160,
29468
+ "description": "Retry key; reuse only for this exact mutation."
29469
+ }
29470
+ },
29471
+ "required": [
29472
+ "siteId",
29473
+ "serviceConnectionRef",
29474
+ "idempotencyKey"
29475
+ ],
29476
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29477
+ },
29478
+ "annotations": {
29479
+ "title": "Prepare SaaS Revenue Authority",
29480
+ "readOnlyHint": false,
29481
+ "destructiveHint": false,
29482
+ "idempotentHint": true,
29483
+ "openWorldHint": true
29484
+ }
29485
+ },
29486
+ {
29487
+ "name": "analytics_set_post_purchase_survey_state",
29488
+ "category": "analytics",
29489
+ "title": "Set Post-Purchase Survey State",
29490
+ "description": "Publish, pause, or irreversibly archive one exact survey revision. Production publication requires approved privacy disclosure evidence. Reuse the same idempotency key only for the identical transition; archive cannot be undone.",
29491
+ "inputSchema": {
29492
+ "type": "object",
29493
+ "properties": {
29494
+ "siteId": {
29495
+ "type": "string",
29496
+ "format": "uuid",
29497
+ "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)$",
29498
+ "description": "Authorized Analytics Site id."
29499
+ },
29500
+ "surveyId": {
29501
+ "type": "string",
29502
+ "format": "uuid",
29503
+ "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)$",
29504
+ "description": "Owner-bound survey id."
29505
+ },
29506
+ "revision": {
29507
+ "type": "integer",
29508
+ "exclusiveMinimum": 0,
29509
+ "maximum": 9007199254740991,
29510
+ "description": "Exact survey revision being changed."
29511
+ },
29512
+ "state": {
29513
+ "type": "string",
29514
+ "enum": [
29515
+ "published",
29516
+ "paused",
29517
+ "archived"
29518
+ ],
29519
+ "description": "Publish or pause this revision. Archive is irreversible."
29520
+ },
29521
+ "approvedCopyId": {
29522
+ "description": "Approved privacy disclosure identifier required for production publication; it is not legal approval by itself.",
29523
+ "anyOf": [
29524
+ {
29525
+ "type": "string",
29526
+ "minLength": 1,
29527
+ "maxLength": 200
29528
+ },
29529
+ {
29530
+ "type": "null"
29531
+ }
29532
+ ]
29533
+ },
29534
+ "idempotencyKey": {
29535
+ "type": "string",
29536
+ "minLength": 8,
29537
+ "maxLength": 160,
29538
+ "description": "Retry key; reuse only for this exact mutation."
29539
+ }
29540
+ },
29541
+ "required": [
29542
+ "siteId",
29543
+ "surveyId",
29544
+ "revision",
29545
+ "state",
29546
+ "idempotencyKey"
29547
+ ],
29548
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29549
+ },
29550
+ "annotations": {
29551
+ "title": "Set Post-Purchase Survey State",
29552
+ "readOnlyHint": false,
29553
+ "destructiveHint": true,
29554
+ "idempotentHint": true,
29555
+ "openWorldHint": false
29556
+ }
29557
+ },
29558
+ {
29559
+ "name": "analytics_setup_revenue_source",
29560
+ "category": "analytics",
29561
+ "title": "Set Up SaaS Revenue Authority",
29562
+ "description": "Use as the customer-facing SaaS revenue setup facade after tag and measurement readiness. It prepares, reads, applies, or verifies one owner-authorized subscription authority without accepting credentials. Provider calls may occur only through the approved connected account; reuse setupId and revision.",
29563
+ "inputSchema": {
29564
+ "type": "object",
29565
+ "properties": {
29566
+ "siteId": {
29567
+ "type": "string",
29568
+ "format": "uuid",
29569
+ "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)$",
29570
+ "description": "Authorized Analytics Site id."
29571
+ },
29572
+ "action": {
29573
+ "default": "continue",
29574
+ "description": "Lifecycle action. Continue reads an existing setup or prepares one when serviceConnectionRef is supplied.",
29575
+ "type": "string",
29576
+ "enum": [
29577
+ "continue",
29578
+ "prepare",
29579
+ "apply",
29580
+ "verify"
29581
+ ]
29582
+ },
29583
+ "setupId": {
29584
+ "type": "string",
29585
+ "format": "uuid",
29586
+ "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)$",
29587
+ "description": "Owner-bound revenue setup id returned by prepare or the facade."
29588
+ },
29589
+ "serviceConnectionRef": {
29590
+ "description": "Already-authorized connected-account reference. Never supply a credential, token, or provider key.",
29591
+ "type": "string",
29592
+ "minLength": 1,
29593
+ "maxLength": 240
29594
+ },
29595
+ "role": {
29596
+ "default": "primary",
29597
+ "description": "Primary may create subscription outcomes; observation only compares provider evidence.",
29598
+ "type": "string",
29599
+ "enum": [
29600
+ "primary",
29601
+ "observation"
29602
+ ]
29603
+ },
29604
+ "revision": {
29605
+ "type": "integer",
29606
+ "exclusiveMinimum": 0,
29607
+ "maximum": 9007199254740991,
29608
+ "description": "Exact current revenue setup revision; reload before retrying a stale mutation."
29609
+ },
29610
+ "confirmed": {
29611
+ "description": "Required only to apply the exact reviewed revision.",
29612
+ "type": "boolean",
29613
+ "const": true
29614
+ },
29615
+ "idempotencyKey": {
29616
+ "description": "Required for apply and verify. Reuse only for the identical operation.",
29617
+ "type": "string",
29618
+ "minLength": 8,
29619
+ "maxLength": 160
29620
+ }
29621
+ },
29622
+ "required": [
29623
+ "siteId"
29624
+ ],
29625
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29626
+ },
29627
+ "annotations": {
29628
+ "title": "Set Up SaaS Revenue Authority",
29629
+ "readOnlyHint": false,
29630
+ "destructiveHint": false,
29631
+ "idempotentHint": true,
29632
+ "openWorldHint": true
29633
+ }
29634
+ },
29635
+ {
29636
+ "name": "analytics_verify_revenue_source",
29637
+ "category": "analytics",
29638
+ "title": "Verify SaaS Revenue Authority",
29639
+ "description": "Verify one applied revenue source through the approved provider connection and return a redacted non-customer receipt state. A successful API call without a signed webhook or reconciliation receipt is not live proof.",
29640
+ "inputSchema": {
29641
+ "type": "object",
29642
+ "properties": {
29643
+ "siteId": {
29644
+ "type": "string",
29645
+ "format": "uuid",
29646
+ "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)$",
29647
+ "description": "Authorized Analytics Site id."
29648
+ },
29649
+ "setupId": {
29650
+ "type": "string",
29651
+ "format": "uuid",
29652
+ "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)$",
29653
+ "description": "Owner-bound revenue setup id returned by prepare or the facade."
29654
+ },
29655
+ "revision": {
29656
+ "type": "integer",
29657
+ "exclusiveMinimum": 0,
29658
+ "maximum": 9007199254740991,
29659
+ "description": "Exact current revenue setup revision; reload before retrying a stale mutation."
29660
+ },
29661
+ "idempotencyKey": {
29662
+ "type": "string",
29663
+ "minLength": 8,
29664
+ "maxLength": 160,
29665
+ "description": "Retry key; reuse only for this exact mutation."
29666
+ }
29667
+ },
29668
+ "required": [
29669
+ "siteId",
29670
+ "setupId",
29671
+ "revision",
29672
+ "idempotencyKey"
29673
+ ],
29674
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
29675
+ },
29676
+ "annotations": {
29677
+ "title": "Verify SaaS Revenue Authority",
29678
+ "readOnlyHint": false,
29679
+ "destructiveHint": false,
29680
+ "idempotentHint": true,
29681
+ "openWorldHint": true
29682
+ }
28160
29683
  }
28161
29684
  ];
28162
29685
  var MCP_TOOL_NAMES = MCP_TOOL_CATALOG.map((tool) => tool.name);