mcpscraper-cli 0.29.7 → 0.29.8

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 (3) hide show
  1. package/README.md +2 -2
  2. package/dist/bin/cli.js +1534 -360
  3. package/package.json +1 -1
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.29.7";
13
+ var CLI_VERSION = "0.29.8";
14
14
 
15
15
  // src/generated-tools.ts
16
16
  var MCP_TOOL_CATALOG = [
@@ -719,6 +719,41 @@ var MCP_TOOL_CATALOG = [
719
719
  "openWorldHint": false
720
720
  }
721
721
  },
722
+ {
723
+ "name": "analytics_archive_event_definition",
724
+ "category": "analytics",
725
+ "title": "Archive Browser Event Definition",
726
+ "description": "Idempotently archive a browser event definition so the Pixel no longer receives it.",
727
+ "inputSchema": {
728
+ "type": "object",
729
+ "properties": {
730
+ "siteId": {
731
+ "type": "string",
732
+ "format": "uuid",
733
+ "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)$",
734
+ "description": "Analytics Site id returned by analytics_list_sites."
735
+ },
736
+ "definitionId": {
737
+ "type": "string",
738
+ "format": "uuid",
739
+ "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)$",
740
+ "description": "Event definition id returned by analytics_list_event_definitions."
741
+ }
742
+ },
743
+ "required": [
744
+ "siteId",
745
+ "definitionId"
746
+ ],
747
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
748
+ },
749
+ "annotations": {
750
+ "title": "Archive Browser Event Definition",
751
+ "readOnlyHint": false,
752
+ "destructiveHint": true,
753
+ "idempotentHint": true,
754
+ "openWorldHint": false
755
+ }
756
+ },
722
757
  {
723
758
  "name": "analytics_create_activation_destination",
724
759
  "category": "analytics",
@@ -750,20 +785,24 @@ var MCP_TOOL_CATALOG = [
750
785
  "description": "Human-readable name for the record being created or updated."
751
786
  },
752
787
  "connectionRef": {
753
- "description": "Existing provider connection reference authorized for this analytics account.",
754
788
  "type": "string",
755
- "maxLength": 240
789
+ "minLength": 1,
790
+ "maxLength": 240,
791
+ "description": "Existing provider connection reference authorized for this analytics account."
756
792
  },
757
793
  "externalDatasetId": {
758
- "description": "Optional provider dataset identifier already owned by the connected account.",
759
794
  "type": "string",
760
- "maxLength": 240
795
+ "minLength": 1,
796
+ "maxLength": 240,
797
+ "description": "Provider destination identifier already owned by the connected account."
761
798
  }
762
799
  },
763
800
  "required": [
764
801
  "siteId",
765
802
  "platform",
766
- "name"
803
+ "name",
804
+ "connectionRef",
805
+ "externalDatasetId"
767
806
  ],
768
807
  "$schema": "https://json-schema.org/draft/2020-12/schema"
769
808
  },
@@ -870,10 +909,10 @@ var MCP_TOOL_CATALOG = [
870
909
  }
871
910
  },
872
911
  {
873
- "name": "analytics_create_export",
912
+ "name": "analytics_create_connection",
874
913
  "category": "analytics",
875
- "title": "Create Analytics Export",
876
- "description": "Create a persisted, versioned CSV, JSON, or Markdown analytics artifact. Supply a caller-owned idempotencyKey and reuse it only when retrying the same logical export.",
914
+ "title": "Create X-Ray Connection",
915
+ "description": "Create a CallRail, CallTrackingMetrics, Twilio, HubSpot, HighLevel, or generic CRM connection. Creation is configured-unverified until a signed receipt succeeds.",
877
916
  "inputSchema": {
878
917
  "type": "object",
879
918
  "properties": {
@@ -883,176 +922,71 @@ var MCP_TOOL_CATALOG = [
883
922
  "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)$",
884
923
  "description": "Analytics Site id returned by analytics_list_sites."
885
924
  },
886
- "start": {
887
- "description": "Inclusive ISO 8601 report start. Omit with end to use the last 30 days.",
888
- "type": "string",
889
- "format": "date-time",
890
- "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))$"
891
- },
892
- "end": {
893
- "description": "Exclusive ISO 8601 report end. Omit with start to use now.",
894
- "type": "string",
895
- "format": "date-time",
896
- "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))$"
897
- },
898
- "pixelIds": {
899
- "description": "Optional Pixel ids belonging to this Site. Omit for every active Pixel.",
900
- "maxItems": 20,
901
- "type": "array",
902
- "items": {
903
- "type": "string",
904
- "format": "uuid",
905
- "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)$"
906
- }
907
- },
908
- "hostnames": {
909
- "description": "Optional approved detected hostnames within the selected Pixels.",
910
- "maxItems": 20,
911
- "type": "array",
912
- "items": {
913
- "type": "string",
914
- "minLength": 1,
915
- "maxLength": 253
916
- }
917
- },
918
- "source": {
919
- "description": "Optional source or provenance constraint appropriate to this tool; omit when no source restriction is intended.",
920
- "type": "string",
921
- "minLength": 1,
922
- "maxLength": 180
923
- },
924
- "medium": {
925
- "description": "Exact normalized campaign medium used to filter or label analytics data.",
926
- "type": "string",
927
- "minLength": 1,
928
- "maxLength": 180
929
- },
930
- "campaign": {
931
- "description": "Exact normalized campaign value used to filter or label analytics data.",
932
- "type": "string",
933
- "minLength": 1,
934
- "maxLength": 240
935
- },
936
- "eventName": {
937
- "description": "Optional normalized analytics event-name filter.",
938
- "type": "string",
939
- "pattern": "^[a-z][a-z0-9_]{1,79}$"
940
- },
941
- "attributionModel": {
942
- "default": "first_touch",
943
- "description": "Attribution model applied to the report; defaults to first touch.",
944
- "type": "string",
945
- "enum": [
946
- "first_touch",
947
- "last_touch"
948
- ]
949
- },
950
- "channelFamily": {
951
- "description": "Optional normalized acquisition-channel family filter.",
925
+ "provider": {
952
926
  "type": "string",
953
927
  "enum": [
954
- "llm",
955
- "social",
956
- "review",
957
- "search",
958
- "email",
959
- "referral",
960
- "direct",
961
- "other"
962
- ]
963
- },
964
- "platform": {
965
- "description": "Normalized external platform selected for this operation.",
966
- "type": "string",
967
- "minLength": 1,
968
- "maxLength": 180
928
+ "callrail",
929
+ "calltrackingmetrics",
930
+ "twilio",
931
+ "hubspot",
932
+ "highlevel",
933
+ "generic_crm"
934
+ ],
935
+ "description": "Supported phone, CRM, or advertising provider for this governed connection."
969
936
  },
970
- "referrer": {
971
- "description": "Optional exact or normalized referrer filter for analytics rows.",
937
+ "name": {
972
938
  "type": "string",
973
939
  "minLength": 1,
974
- "maxLength": 500
975
- },
976
- "path": {
977
- "description": "Exact path value used by this tool; preserve its leading slash or vault-relative form as required.",
978
- "type": "string",
979
- "maxLength": 2e3,
980
- "pattern": "^\\/.*"
981
- },
982
- "deviceClass": {
983
- "description": "Optional normalized device-class filter.",
984
- "type": "string",
985
- "enum": [
986
- "desktop",
987
- "tablet",
988
- "mobile",
989
- "unknown"
990
- ]
991
- },
992
- "countryCode": {
993
- "description": "Two-letter country code used to filter analytics rows.",
994
- "type": "string",
995
- "minLength": 2,
996
- "maxLength": 2
940
+ "maxLength": 120,
941
+ "description": "Human-readable name for the record being created or updated."
997
942
  },
998
- "regionCode": {
999
- "description": "Optional regional subdivision code filter.",
943
+ "sourceAccountRef": {
1000
944
  "type": "string",
1001
945
  "minLength": 1,
1002
- "maxLength": 8
1003
- },
1004
- "conversionKind": {
1005
- "description": "Optional normalized conversion event kind filter.",
1006
- "type": "string",
1007
- "pattern": "^[a-z][a-z0-9_]{1,79}$"
1008
- },
1009
- "report": {
1010
- "default": "overview",
1011
- "description": "Analytics report family to render into the exported artifact.",
1012
- "type": "string",
1013
- "enum": [
1014
- "overview",
1015
- "acquisition",
1016
- "content",
1017
- "conversions"
1018
- ]
946
+ "maxLength": 240,
947
+ "description": "Stable non-secret account identifier at the phone, CRM, or event source."
1019
948
  },
1020
- "format": {
1021
- "default": "markdown",
1022
- "description": "Artifact serialization format to generate.",
949
+ "serviceConnectionRef": {
950
+ "description": "Optional MCP Scraper connected-service identifier used for governed provider actions.",
1023
951
  "type": "string",
1024
- "enum": [
1025
- "csv",
1026
- "json",
1027
- "markdown"
1028
- ]
952
+ "maxLength": 240
1029
953
  },
1030
- "idempotencyKey": {
954
+ "webhookSecret": {
955
+ "description": "Provider webhook validation secret; it is encrypted at rest and never returned.",
1031
956
  "type": "string",
1032
957
  "minLength": 8,
1033
- "maxLength": 160,
1034
- "description": "Caller-owned opaque key for this intended operation; reuse only when retrying the same operation."
958
+ "maxLength": 1e3
959
+ },
960
+ "config": {
961
+ "description": "Validated renderer configuration for the new immutable template version; arbitrary code is rejected.",
962
+ "type": "object",
963
+ "propertyNames": {
964
+ "type": "string"
965
+ },
966
+ "additionalProperties": {}
1035
967
  }
1036
968
  },
1037
969
  "required": [
1038
970
  "siteId",
1039
- "idempotencyKey"
971
+ "provider",
972
+ "name",
973
+ "sourceAccountRef"
1040
974
  ],
1041
975
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1042
976
  },
1043
977
  "annotations": {
1044
- "title": "Create Analytics Export",
978
+ "title": "Create X-Ray Connection",
1045
979
  "readOnlyHint": false,
1046
980
  "destructiveHint": false,
1047
- "idempotentHint": true,
981
+ "idempotentHint": false,
1048
982
  "openWorldHint": false
1049
983
  }
1050
984
  },
1051
985
  {
1052
- "name": "analytics_create_form",
986
+ "name": "analytics_create_conversion_rule",
1053
987
  "category": "analytics",
1054
- "title": "Create Pixel-linked Form",
1055
- "description": "Create and optionally publish a branded form that inherits the parent Pixel identity and session.",
988
+ "title": "Create Conversion Rule",
989
+ "description": "Create a versioned declarative conversion rule. This is a safe event-routing layer, not arbitrary JavaScript like Google Tag Manager.",
1056
990
  "inputSchema": {
1057
991
  "type": "object",
1058
992
  "properties": {
@@ -1062,141 +996,253 @@ var MCP_TOOL_CATALOG = [
1062
996
  "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)$",
1063
997
  "description": "Analytics Site id returned by analytics_list_sites."
1064
998
  },
1065
- "pixelId": {
1066
- "type": "string",
1067
- "format": "uuid",
1068
- "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)$",
1069
- "description": "Analytics Pixel id belonging to the selected Site."
1070
- },
1071
999
  "name": {
1072
1000
  "type": "string",
1073
1001
  "minLength": 1,
1074
1002
  "maxLength": 120,
1075
1003
  "description": "Human-readable name for the record being created or updated."
1076
1004
  },
1077
- "fields": {
1078
- "minItems": 1,
1079
- "maxItems": 30,
1080
- "type": "array",
1081
- "items": {
1082
- "type": "object",
1083
- "properties": {
1084
- "id": {
1005
+ "conversionKind": {
1006
+ "type": "string",
1007
+ "pattern": "^[a-z][a-z0-9_]{1,79}$",
1008
+ "description": "Optional normalized conversion event kind filter."
1009
+ },
1010
+ "condition": {
1011
+ "type": "object",
1012
+ "properties": {
1013
+ "eventName": {
1014
+ "description": "Optional normalized analytics event-name filter.",
1015
+ "type": "string",
1016
+ "pattern": "^[a-z][a-z0-9_]{1,79}$"
1017
+ },
1018
+ "eventKind": {
1019
+ "description": "Canonical event family used for journey storage and conversion-rule evaluation.",
1020
+ "type": "string",
1021
+ "enum": [
1022
+ "browser",
1023
+ "form",
1024
+ "call",
1025
+ "crm",
1026
+ "transaction",
1027
+ "custom_server",
1028
+ "conversion",
1029
+ "delivery"
1030
+ ]
1031
+ },
1032
+ "source": {
1033
+ "description": "Optional source or provenance constraint appropriate to this tool; omit when no source restriction is intended.",
1034
+ "type": "string",
1035
+ "minLength": 1,
1036
+ "maxLength": 80
1037
+ },
1038
+ "stageId": {
1039
+ "description": "Exact CRM stage identifier required for the conversion rule to match.",
1040
+ "type": "string",
1041
+ "maxLength": 240
1042
+ },
1043
+ "status": {
1044
+ "description": "Lifecycle status used to filter or update the selected records.",
1045
+ "type": "string",
1046
+ "enum": [
1047
+ "open",
1048
+ "won",
1049
+ "lost",
1050
+ "spam",
1051
+ "unknown"
1052
+ ]
1053
+ },
1054
+ "answered": {
1055
+ "description": "Optional call-answer state required for this conversion rule to match.",
1056
+ "type": "boolean"
1057
+ },
1058
+ "minimumCallDurationSeconds": {
1059
+ "description": "Minimum connected call duration required for the conversion rule to match.",
1060
+ "type": "integer",
1061
+ "minimum": 0,
1062
+ "maximum": 86400
1063
+ },
1064
+ "excludedTags": {
1065
+ "default": [],
1066
+ "description": "Event tags that prevent this conversion rule from matching, such as spam.",
1067
+ "maxItems": 30,
1068
+ "type": "array",
1069
+ "items": {
1085
1070
  "type": "string",
1086
- "pattern": "^[a-z][a-z0-9_]{0,47}$",
1087
- "description": "Stable identifier for this nested record."
1088
- },
1089
- "type": {
1071
+ "maxLength": 80
1072
+ }
1073
+ },
1074
+ "requiredTags": {
1075
+ "default": [],
1076
+ "description": "Event tags that must all be present before this conversion rule matches.",
1077
+ "maxItems": 30,
1078
+ "type": "array",
1079
+ "items": {
1090
1080
  "type": "string",
1091
- "enum": [
1092
- "text",
1093
- "email",
1094
- "tel",
1095
- "textarea",
1096
- "select",
1097
- "checkbox",
1098
- "radio",
1099
- "number"
1100
- ],
1101
- "description": "Governed content or record type used for routing and validation."
1102
- },
1103
- "label": {
1104
- "type": "string",
1105
- "minLength": 1,
1106
- "maxLength": 120,
1107
- "description": "Human-readable label displayed for this field, link, or section."
1108
- },
1109
- "required": {
1110
- "type": "boolean",
1111
- "description": "Whether the form field must be completed before submission."
1112
- },
1113
- "options": {
1114
- "description": "Allowed selectable values for this form field.",
1115
- "maxItems": 30,
1116
- "type": "array",
1117
- "items": {
1118
- "type": "string",
1119
- "minLength": 1,
1120
- "maxLength": 120
1121
- }
1081
+ "maxLength": 80
1122
1082
  }
1123
- },
1124
- "required": [
1125
- "id",
1126
- "type",
1127
- "label",
1128
- "required"
1129
- ]
1083
+ }
1130
1084
  },
1131
- "description": "Ordered form-field definitions to render and validate for submissions."
1085
+ "description": "Declarative event conditions that must match before X-Ray creates a conversion."
1132
1086
  },
1133
- "brand": {
1087
+ "defaultValueMinor": {
1088
+ "description": "Optional default conversion value in the currency minor unit.",
1089
+ "type": "integer",
1090
+ "minimum": 0,
1091
+ "maximum": 9007199254740991
1092
+ },
1093
+ "defaultCurrency": {
1094
+ "default": "USD",
1095
+ "description": "Three-letter default currency code used when a matched event has no value currency.",
1096
+ "type": "string",
1097
+ "minLength": 3,
1098
+ "maxLength": 3
1099
+ },
1100
+ "enabled": {
1101
+ "default": true,
1102
+ "description": "Whether the new rule should begin evaluating events immediately.",
1103
+ "type": "boolean"
1104
+ }
1105
+ },
1106
+ "required": [
1107
+ "siteId",
1108
+ "name",
1109
+ "conversionKind",
1110
+ "condition"
1111
+ ],
1112
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
1113
+ },
1114
+ "annotations": {
1115
+ "title": "Create Conversion Rule",
1116
+ "readOnlyHint": false,
1117
+ "destructiveHint": false,
1118
+ "idempotentHint": false,
1119
+ "openWorldHint": false
1120
+ }
1121
+ },
1122
+ {
1123
+ "name": "analytics_create_event_definition",
1124
+ "category": "analytics",
1125
+ "title": "Create Browser Event Definition",
1126
+ "description": "Create a declarative page, click, or third-party form-submit event tag without injecting arbitrary JavaScript or capturing form fields.",
1127
+ "inputSchema": {
1128
+ "type": "object",
1129
+ "properties": {
1130
+ "siteId": {
1131
+ "type": "string",
1132
+ "format": "uuid",
1133
+ "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)$",
1134
+ "description": "Analytics Site id returned by analytics_list_sites."
1135
+ },
1136
+ "name": {
1137
+ "type": "string",
1138
+ "minLength": 1,
1139
+ "maxLength": 120,
1140
+ "description": "Human-readable definition name unique within the Site."
1141
+ },
1142
+ "eventName": {
1143
+ "type": "string",
1144
+ "pattern": "^[a-z][a-z0-9_]{1,79}$",
1145
+ "description": "Canonical event name emitted when this definition matches."
1146
+ },
1147
+ "triggerKind": {
1148
+ "type": "string",
1149
+ "enum": [
1150
+ "page",
1151
+ "click",
1152
+ "form",
1153
+ "semantic"
1154
+ ],
1155
+ "description": "Declarative browser trigger. Semantic uses a data-xray-event tag."
1156
+ },
1157
+ "path": {
1158
+ "description": "URL path required for page triggers.",
1159
+ "type": "string",
1160
+ "maxLength": 2e3,
1161
+ "pattern": "^\\/.*"
1162
+ },
1163
+ "pathMatch": {
1164
+ "default": "exact",
1165
+ "description": "Whether the page path must equal or begin with path.",
1166
+ "type": "string",
1167
+ "enum": [
1168
+ "exact",
1169
+ "prefix"
1170
+ ]
1171
+ },
1172
+ "selector": {
1173
+ "description": "CSS selector evaluated only by the first-party Pixel for click or form triggers.",
1174
+ "type": "string",
1175
+ "minLength": 1,
1176
+ "maxLength": 500
1177
+ },
1178
+ "hostnames": {
1179
+ "default": [],
1180
+ "description": "Optional approved bare hostnames. Empty applies across the Site Pixel hosts.",
1181
+ "maxItems": 25,
1182
+ "type": "array",
1183
+ "items": {
1184
+ "type": "string",
1185
+ "minLength": 1,
1186
+ "maxLength": 253
1187
+ }
1188
+ },
1189
+ "metadata": {
1190
+ "description": "Safe fixed event metadata; never form field values or arbitrary code.",
1134
1191
  "type": "object",
1135
1192
  "properties": {
1136
- "primaryColor": {
1193
+ "value": {
1194
+ "description": "Optional non-negative conversion value in major currency units.",
1195
+ "type": "number",
1196
+ "minimum": 0,
1197
+ "maximum": 1e12
1198
+ },
1199
+ "currency": {
1200
+ "description": "ISO 4217 currency code for value.",
1137
1201
  "type": "string",
1138
- "pattern": "^#[0-9a-f]{6}$",
1139
- "description": "Six-digit hexadecimal primary action color for the rendered form."
1202
+ "pattern": "^[A-Za-z]{3}$"
1140
1203
  },
1141
- "backgroundColor": {
1204
+ "orderId": {
1205
+ "description": "Optional stable order identifier.",
1142
1206
  "type": "string",
1143
- "pattern": "^#[0-9a-f]{6}$",
1144
- "description": "Six-digit hexadecimal background color for the rendered form."
1207
+ "minLength": 1,
1208
+ "maxLength": 200
1145
1209
  },
1146
- "textColor": {
1210
+ "contentId": {
1211
+ "description": "Optional product or content identifier.",
1147
1212
  "type": "string",
1148
- "pattern": "^#[0-9a-f]{6}$",
1149
- "description": "Six-digit hexadecimal text color for the rendered form."
1213
+ "minLength": 1,
1214
+ "maxLength": 200
1150
1215
  },
1151
- "radius": {
1152
- "type": "integer",
1153
- "minimum": 0,
1154
- "maximum": 32,
1155
- "description": "Corner radius in pixels for rendered form controls."
1216
+ "contentType": {
1217
+ "description": "Optional bounded content category.",
1218
+ "type": "string",
1219
+ "minLength": 1,
1220
+ "maxLength": 80
1156
1221
  }
1157
1222
  },
1158
- "required": [
1159
- "primaryColor",
1160
- "backgroundColor",
1161
- "textColor",
1162
- "radius"
1163
- ],
1164
- "description": "Validated visual-brand settings applied to the generated form."
1165
- },
1166
- "submitLabel": {
1167
- "description": "Optional text displayed on the form submission button.",
1168
- "type": "string",
1169
- "minLength": 1,
1170
- "maxLength": 80
1171
- },
1172
- "successMessage": {
1173
- "description": "Optional confirmation shown after a successful form submission.",
1174
- "type": "string",
1175
- "minLength": 1,
1176
- "maxLength": 500
1223
+ "additionalProperties": false
1177
1224
  },
1178
- "consentText": {
1179
- "description": "Optional consent disclosure displayed with the form submission control.",
1180
- "type": "string",
1181
- "maxLength": 1e3
1225
+ "oncePerSession": {
1226
+ "default": false,
1227
+ "description": "Emit at most once per browser session when true.",
1228
+ "type": "boolean"
1182
1229
  },
1183
- "publish": {
1230
+ "enabled": {
1184
1231
  "default": true,
1185
- "description": "When true, publish the created form immediately; set false to keep it unpublished.",
1232
+ "description": "Whether the Pixel may emit this definition.",
1186
1233
  "type": "boolean"
1187
1234
  }
1188
1235
  },
1189
1236
  "required": [
1190
1237
  "siteId",
1191
- "pixelId",
1192
1238
  "name",
1193
- "fields",
1194
- "brand"
1239
+ "eventName",
1240
+ "triggerKind"
1195
1241
  ],
1196
1242
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1197
1243
  },
1198
1244
  "annotations": {
1199
- "title": "Create Pixel-linked Form",
1245
+ "title": "Create Browser Event Definition",
1200
1246
  "readOnlyHint": false,
1201
1247
  "destructiveHint": false,
1202
1248
  "idempotentHint": false,
@@ -1204,10 +1250,10 @@ var MCP_TOOL_CATALOG = [
1204
1250
  }
1205
1251
  },
1206
1252
  {
1207
- "name": "analytics_get_acquisition",
1253
+ "name": "analytics_create_export",
1208
1254
  "category": "analytics",
1209
- "title": "Analytics Acquisition",
1210
- "description": "Read the acquisition report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1255
+ "title": "Create Analytics Export",
1256
+ "description": "Create a persisted, versioned CSV, JSON, or Markdown analytics artifact. Supply a caller-owned idempotencyKey and reuse it only when retrying the same logical export.",
1211
1257
  "inputSchema": {
1212
1258
  "type": "object",
1213
1259
  "properties": {
@@ -1339,26 +1385,54 @@ var MCP_TOOL_CATALOG = [
1339
1385
  "description": "Optional normalized conversion event kind filter.",
1340
1386
  "type": "string",
1341
1387
  "pattern": "^[a-z][a-z0-9_]{1,79}$"
1388
+ },
1389
+ "report": {
1390
+ "default": "overview",
1391
+ "description": "Analytics report family to render into the exported artifact.",
1392
+ "type": "string",
1393
+ "enum": [
1394
+ "overview",
1395
+ "acquisition",
1396
+ "content",
1397
+ "conversions"
1398
+ ]
1399
+ },
1400
+ "format": {
1401
+ "default": "markdown",
1402
+ "description": "Artifact serialization format to generate.",
1403
+ "type": "string",
1404
+ "enum": [
1405
+ "csv",
1406
+ "json",
1407
+ "markdown"
1408
+ ]
1409
+ },
1410
+ "idempotencyKey": {
1411
+ "type": "string",
1412
+ "minLength": 8,
1413
+ "maxLength": 160,
1414
+ "description": "Caller-owned opaque key for this intended operation; reuse only when retrying the same operation."
1342
1415
  }
1343
1416
  },
1344
1417
  "required": [
1345
- "siteId"
1418
+ "siteId",
1419
+ "idempotencyKey"
1346
1420
  ],
1347
1421
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1348
1422
  },
1349
1423
  "annotations": {
1350
- "title": "Analytics Acquisition",
1351
- "readOnlyHint": true,
1424
+ "title": "Create Analytics Export",
1425
+ "readOnlyHint": false,
1352
1426
  "destructiveHint": false,
1353
1427
  "idempotentHint": true,
1354
1428
  "openWorldHint": false
1355
1429
  }
1356
1430
  },
1357
1431
  {
1358
- "name": "analytics_get_business_metrics",
1432
+ "name": "analytics_create_form",
1359
1433
  "category": "analytics",
1360
- "title": "Analytics Business Metrics",
1361
- "description": "Read the configured lead-generation, SaaS, or e-commerce metric pack with explicit missing-input signals.",
1434
+ "title": "Create Pixel-linked Form",
1435
+ "description": "Create and optionally publish a branded form that inherits the parent Pixel identity and session.",
1362
1436
  "inputSchema": {
1363
1437
  "type": "object",
1364
1438
  "properties": {
@@ -1368,41 +1442,196 @@ var MCP_TOOL_CATALOG = [
1368
1442
  "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)$",
1369
1443
  "description": "Analytics Site id returned by analytics_list_sites."
1370
1444
  },
1371
- "start": {
1372
- "description": "Inclusive ISO 8601 report start. Omit with end to use the last 30 days.",
1445
+ "pixelId": {
1373
1446
  "type": "string",
1374
- "format": "date-time",
1375
- "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))$"
1447
+ "format": "uuid",
1448
+ "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)$",
1449
+ "description": "Analytics Pixel id belonging to the selected Site."
1376
1450
  },
1377
- "end": {
1378
- "description": "Exclusive ISO 8601 report end. Omit with start to use now.",
1451
+ "name": {
1379
1452
  "type": "string",
1380
- "format": "date-time",
1381
- "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))$"
1382
- },
1383
- "pixelIds": {
1384
- "description": "Optional Pixel ids belonging to this Site. Omit for every active Pixel.",
1385
- "maxItems": 20,
1386
- "type": "array",
1387
- "items": {
1388
- "type": "string",
1389
- "format": "uuid",
1390
- "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)$"
1391
- }
1453
+ "minLength": 1,
1454
+ "maxLength": 120,
1455
+ "description": "Human-readable name for the record being created or updated."
1392
1456
  },
1393
- "hostnames": {
1394
- "description": "Optional approved detected hostnames within the selected Pixels.",
1395
- "maxItems": 20,
1457
+ "fields": {
1458
+ "minItems": 1,
1459
+ "maxItems": 30,
1396
1460
  "type": "array",
1397
1461
  "items": {
1398
- "type": "string",
1399
- "minLength": 1,
1400
- "maxLength": 253
1401
- }
1402
- },
1403
- "source": {
1404
- "description": "Optional source or provenance constraint appropriate to this tool; omit when no source restriction is intended.",
1405
- "type": "string",
1462
+ "type": "object",
1463
+ "properties": {
1464
+ "id": {
1465
+ "type": "string",
1466
+ "pattern": "^[a-z][a-z0-9_]{0,47}$",
1467
+ "description": "Stable identifier for this nested record."
1468
+ },
1469
+ "type": {
1470
+ "type": "string",
1471
+ "enum": [
1472
+ "text",
1473
+ "email",
1474
+ "tel",
1475
+ "textarea",
1476
+ "select",
1477
+ "checkbox",
1478
+ "radio",
1479
+ "number"
1480
+ ],
1481
+ "description": "Governed content or record type used for routing and validation."
1482
+ },
1483
+ "label": {
1484
+ "type": "string",
1485
+ "minLength": 1,
1486
+ "maxLength": 120,
1487
+ "description": "Human-readable label displayed for this field, link, or section."
1488
+ },
1489
+ "required": {
1490
+ "type": "boolean",
1491
+ "description": "Whether the form field must be completed before submission."
1492
+ },
1493
+ "options": {
1494
+ "description": "Allowed selectable values for this form field.",
1495
+ "maxItems": 30,
1496
+ "type": "array",
1497
+ "items": {
1498
+ "type": "string",
1499
+ "minLength": 1,
1500
+ "maxLength": 120
1501
+ }
1502
+ }
1503
+ },
1504
+ "required": [
1505
+ "id",
1506
+ "type",
1507
+ "label",
1508
+ "required"
1509
+ ]
1510
+ },
1511
+ "description": "Ordered form-field definitions to render and validate for submissions."
1512
+ },
1513
+ "brand": {
1514
+ "type": "object",
1515
+ "properties": {
1516
+ "primaryColor": {
1517
+ "type": "string",
1518
+ "pattern": "^#[0-9a-f]{6}$",
1519
+ "description": "Six-digit hexadecimal primary action color for the rendered form."
1520
+ },
1521
+ "backgroundColor": {
1522
+ "type": "string",
1523
+ "pattern": "^#[0-9a-f]{6}$",
1524
+ "description": "Six-digit hexadecimal background color for the rendered form."
1525
+ },
1526
+ "textColor": {
1527
+ "type": "string",
1528
+ "pattern": "^#[0-9a-f]{6}$",
1529
+ "description": "Six-digit hexadecimal text color for the rendered form."
1530
+ },
1531
+ "radius": {
1532
+ "type": "integer",
1533
+ "minimum": 0,
1534
+ "maximum": 32,
1535
+ "description": "Corner radius in pixels for rendered form controls."
1536
+ }
1537
+ },
1538
+ "required": [
1539
+ "primaryColor",
1540
+ "backgroundColor",
1541
+ "textColor",
1542
+ "radius"
1543
+ ],
1544
+ "description": "Validated visual-brand settings applied to the generated form."
1545
+ },
1546
+ "submitLabel": {
1547
+ "description": "Optional text displayed on the form submission button.",
1548
+ "type": "string",
1549
+ "minLength": 1,
1550
+ "maxLength": 80
1551
+ },
1552
+ "successMessage": {
1553
+ "description": "Optional confirmation shown after a successful form submission.",
1554
+ "type": "string",
1555
+ "minLength": 1,
1556
+ "maxLength": 500
1557
+ },
1558
+ "consentText": {
1559
+ "description": "Optional consent disclosure displayed with the form submission control.",
1560
+ "type": "string",
1561
+ "maxLength": 1e3
1562
+ },
1563
+ "publish": {
1564
+ "default": true,
1565
+ "description": "When true, publish the created form immediately; set false to keep it unpublished.",
1566
+ "type": "boolean"
1567
+ }
1568
+ },
1569
+ "required": [
1570
+ "siteId",
1571
+ "pixelId",
1572
+ "name",
1573
+ "fields",
1574
+ "brand"
1575
+ ],
1576
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
1577
+ },
1578
+ "annotations": {
1579
+ "title": "Create Pixel-linked Form",
1580
+ "readOnlyHint": false,
1581
+ "destructiveHint": false,
1582
+ "idempotentHint": false,
1583
+ "openWorldHint": false
1584
+ }
1585
+ },
1586
+ {
1587
+ "name": "analytics_get_acquisition",
1588
+ "category": "analytics",
1589
+ "title": "Analytics Acquisition",
1590
+ "description": "Read the acquisition report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1591
+ "inputSchema": {
1592
+ "type": "object",
1593
+ "properties": {
1594
+ "siteId": {
1595
+ "type": "string",
1596
+ "format": "uuid",
1597
+ "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)$",
1598
+ "description": "Analytics Site id returned by analytics_list_sites."
1599
+ },
1600
+ "start": {
1601
+ "description": "Inclusive ISO 8601 report start. Omit with end to use the last 30 days.",
1602
+ "type": "string",
1603
+ "format": "date-time",
1604
+ "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))$"
1605
+ },
1606
+ "end": {
1607
+ "description": "Exclusive ISO 8601 report end. Omit with start to use now.",
1608
+ "type": "string",
1609
+ "format": "date-time",
1610
+ "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))$"
1611
+ },
1612
+ "pixelIds": {
1613
+ "description": "Optional Pixel ids belonging to this Site. Omit for every active Pixel.",
1614
+ "maxItems": 20,
1615
+ "type": "array",
1616
+ "items": {
1617
+ "type": "string",
1618
+ "format": "uuid",
1619
+ "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)$"
1620
+ }
1621
+ },
1622
+ "hostnames": {
1623
+ "description": "Optional approved detected hostnames within the selected Pixels.",
1624
+ "maxItems": 20,
1625
+ "type": "array",
1626
+ "items": {
1627
+ "type": "string",
1628
+ "minLength": 1,
1629
+ "maxLength": 253
1630
+ }
1631
+ },
1632
+ "source": {
1633
+ "description": "Optional source or provenance constraint appropriate to this tool; omit when no source restriction is intended.",
1634
+ "type": "string",
1406
1635
  "minLength": 1,
1407
1636
  "maxLength": 180
1408
1637
  },
@@ -1498,7 +1727,7 @@ var MCP_TOOL_CATALOG = [
1498
1727
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1499
1728
  },
1500
1729
  "annotations": {
1501
- "title": "Analytics Business Metrics",
1730
+ "title": "Analytics Acquisition",
1502
1731
  "readOnlyHint": true,
1503
1732
  "destructiveHint": false,
1504
1733
  "idempotentHint": true,
@@ -1506,10 +1735,10 @@ var MCP_TOOL_CATALOG = [
1506
1735
  }
1507
1736
  },
1508
1737
  {
1509
- "name": "analytics_get_channel_breakdown",
1738
+ "name": "analytics_get_business_metrics",
1510
1739
  "category": "analytics",
1511
- "title": "Analytics Channel Breakdowns",
1512
- "description": "Read the LLM, social, and review-site channel breakdowns with campaign-to-creative drill-down report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1740
+ "title": "Analytics Business Metrics",
1741
+ "description": "Read the configured lead-generation, SaaS, or e-commerce metric pack with explicit missing-input signals.",
1513
1742
  "inputSchema": {
1514
1743
  "type": "object",
1515
1744
  "properties": {
@@ -1649,7 +1878,7 @@ var MCP_TOOL_CATALOG = [
1649
1878
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1650
1879
  },
1651
1880
  "annotations": {
1652
- "title": "Analytics Channel Breakdowns",
1881
+ "title": "Analytics Business Metrics",
1653
1882
  "readOnlyHint": true,
1654
1883
  "destructiveHint": false,
1655
1884
  "idempotentHint": true,
@@ -1657,10 +1886,10 @@ var MCP_TOOL_CATALOG = [
1657
1886
  }
1658
1887
  },
1659
1888
  {
1660
- "name": "analytics_get_content",
1889
+ "name": "analytics_get_channel_breakdown",
1661
1890
  "category": "analytics",
1662
- "title": "Analytics Content",
1663
- "description": "Read the content report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1891
+ "title": "Analytics Channel Breakdowns",
1892
+ "description": "Read the LLM, social, and review-site channel breakdowns with campaign-to-creative drill-down report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1664
1893
  "inputSchema": {
1665
1894
  "type": "object",
1666
1895
  "properties": {
@@ -1800,7 +2029,7 @@ var MCP_TOOL_CATALOG = [
1800
2029
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1801
2030
  },
1802
2031
  "annotations": {
1803
- "title": "Analytics Content",
2032
+ "title": "Analytics Channel Breakdowns",
1804
2033
  "readOnlyHint": true,
1805
2034
  "destructiveHint": false,
1806
2035
  "idempotentHint": true,
@@ -1808,10 +2037,10 @@ var MCP_TOOL_CATALOG = [
1808
2037
  }
1809
2038
  },
1810
2039
  {
1811
- "name": "analytics_get_conversions",
2040
+ "name": "analytics_get_content",
1812
2041
  "category": "analytics",
1813
- "title": "Analytics Conversions",
1814
- "description": "Read the conversions report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
2042
+ "title": "Analytics Content",
2043
+ "description": "Read the content report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1815
2044
  "inputSchema": {
1816
2045
  "type": "object",
1817
2046
  "properties": {
@@ -1951,7 +2180,7 @@ var MCP_TOOL_CATALOG = [
1951
2180
  "$schema": "https://json-schema.org/draft/2020-12/schema"
1952
2181
  },
1953
2182
  "annotations": {
1954
- "title": "Analytics Conversions",
2183
+ "title": "Analytics Content",
1955
2184
  "readOnlyHint": true,
1956
2185
  "destructiveHint": false,
1957
2186
  "idempotentHint": true,
@@ -1959,10 +2188,10 @@ var MCP_TOOL_CATALOG = [
1959
2188
  }
1960
2189
  },
1961
2190
  {
1962
- "name": "analytics_get_dimensions",
2191
+ "name": "analytics_get_conversions",
1963
2192
  "category": "analytics",
1964
- "title": "Analytics Dimensions",
1965
- "description": "Read visualization-ready device, source, country, region, or weekday-hour rows. Chart recommendations are advisory.",
2193
+ "title": "Analytics Conversions",
2194
+ "description": "Read the conversions report for one analytics Business. Use analytics_list_sites first. Filters use the same normalized Site, Pixel, hostname, date, source, medium, campaign, and event contract as the dashboard, REST API, and exports.",
1966
2195
  "inputSchema": {
1967
2196
  "type": "object",
1968
2197
  "properties": {
@@ -2094,6 +2323,34 @@ var MCP_TOOL_CATALOG = [
2094
2323
  "description": "Optional normalized conversion event kind filter.",
2095
2324
  "type": "string",
2096
2325
  "pattern": "^[a-z][a-z0-9_]{1,79}$"
2326
+ }
2327
+ },
2328
+ "required": [
2329
+ "siteId"
2330
+ ],
2331
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
2332
+ },
2333
+ "annotations": {
2334
+ "title": "Analytics Conversions",
2335
+ "readOnlyHint": true,
2336
+ "destructiveHint": false,
2337
+ "idempotentHint": true,
2338
+ "openWorldHint": false
2339
+ }
2340
+ },
2341
+ {
2342
+ "name": "analytics_get_coverage",
2343
+ "category": "analytics",
2344
+ "title": "Get Attribution Coverage",
2345
+ "description": "Measure click-ID coverage and call/CRM journey join rates. Null rates mean there is not yet a denominator.",
2346
+ "inputSchema": {
2347
+ "type": "object",
2348
+ "properties": {
2349
+ "siteId": {
2350
+ "type": "string",
2351
+ "format": "uuid",
2352
+ "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)$",
2353
+ "description": "Analytics Site id returned by analytics_list_sites."
2097
2354
  },
2098
2355
  "limit": {
2099
2356
  "default": 50,
@@ -2106,27 +2363,15 @@ var MCP_TOOL_CATALOG = [
2106
2363
  "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
2107
2364
  "type": "string",
2108
2365
  "maxLength": 1e3
2109
- },
2110
- "dimension": {
2111
- "type": "string",
2112
- "enum": [
2113
- "device",
2114
- "source",
2115
- "country",
2116
- "region",
2117
- "weekday_hour"
2118
- ],
2119
- "description": "Dimension used to group returned analytics rows."
2120
2366
  }
2121
2367
  },
2122
2368
  "required": [
2123
- "siteId",
2124
- "dimension"
2369
+ "siteId"
2125
2370
  ],
2126
2371
  "$schema": "https://json-schema.org/draft/2020-12/schema"
2127
2372
  },
2128
2373
  "annotations": {
2129
- "title": "Analytics Dimensions",
2374
+ "title": "Get Attribution Coverage",
2130
2375
  "readOnlyHint": true,
2131
2376
  "destructiveHint": false,
2132
2377
  "idempotentHint": true,
@@ -2134,17 +2379,192 @@ var MCP_TOOL_CATALOG = [
2134
2379
  }
2135
2380
  },
2136
2381
  {
2137
- "name": "analytics_get_entitlement",
2382
+ "name": "analytics_get_dimensions",
2138
2383
  "category": "analytics",
2139
- "title": "Get X-Ray Pixel Access",
2140
- "description": "Check whether Thorbit X-Ray Pixel is connected and entitled for this MCP Scraper account. X-Ray Pixel is owned and billed by Thorbit, requires an active $50+ Thorbit subscription after its 30-day trial, and does not consume MCP Scraper Credits. Call this before analytics_list_sites when access may not be configured. Account linking must be completed in the MCP Scraper dashboard; never ask a user to paste a Thorbit API key into an AI conversation.",
2384
+ "title": "Analytics Dimensions",
2385
+ "description": "Read visualization-ready device, source, country, region, or weekday-hour rows. Chart recommendations are advisory.",
2141
2386
  "inputSchema": {
2142
2387
  "type": "object",
2143
- "properties": {},
2144
- "$schema": "https://json-schema.org/draft/2020-12/schema"
2145
- },
2146
- "annotations": {
2147
- "title": "Get X-Ray Pixel Access",
2388
+ "properties": {
2389
+ "siteId": {
2390
+ "type": "string",
2391
+ "format": "uuid",
2392
+ "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)$",
2393
+ "description": "Analytics Site id returned by analytics_list_sites."
2394
+ },
2395
+ "start": {
2396
+ "description": "Inclusive ISO 8601 report start. Omit with end to use the last 30 days.",
2397
+ "type": "string",
2398
+ "format": "date-time",
2399
+ "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))$"
2400
+ },
2401
+ "end": {
2402
+ "description": "Exclusive ISO 8601 report end. Omit with start to use now.",
2403
+ "type": "string",
2404
+ "format": "date-time",
2405
+ "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))$"
2406
+ },
2407
+ "pixelIds": {
2408
+ "description": "Optional Pixel ids belonging to this Site. Omit for every active Pixel.",
2409
+ "maxItems": 20,
2410
+ "type": "array",
2411
+ "items": {
2412
+ "type": "string",
2413
+ "format": "uuid",
2414
+ "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)$"
2415
+ }
2416
+ },
2417
+ "hostnames": {
2418
+ "description": "Optional approved detected hostnames within the selected Pixels.",
2419
+ "maxItems": 20,
2420
+ "type": "array",
2421
+ "items": {
2422
+ "type": "string",
2423
+ "minLength": 1,
2424
+ "maxLength": 253
2425
+ }
2426
+ },
2427
+ "source": {
2428
+ "description": "Optional source or provenance constraint appropriate to this tool; omit when no source restriction is intended.",
2429
+ "type": "string",
2430
+ "minLength": 1,
2431
+ "maxLength": 180
2432
+ },
2433
+ "medium": {
2434
+ "description": "Exact normalized campaign medium used to filter or label analytics data.",
2435
+ "type": "string",
2436
+ "minLength": 1,
2437
+ "maxLength": 180
2438
+ },
2439
+ "campaign": {
2440
+ "description": "Exact normalized campaign value used to filter or label analytics data.",
2441
+ "type": "string",
2442
+ "minLength": 1,
2443
+ "maxLength": 240
2444
+ },
2445
+ "eventName": {
2446
+ "description": "Optional normalized analytics event-name filter.",
2447
+ "type": "string",
2448
+ "pattern": "^[a-z][a-z0-9_]{1,79}$"
2449
+ },
2450
+ "attributionModel": {
2451
+ "default": "first_touch",
2452
+ "description": "Attribution model applied to the report; defaults to first touch.",
2453
+ "type": "string",
2454
+ "enum": [
2455
+ "first_touch",
2456
+ "last_touch"
2457
+ ]
2458
+ },
2459
+ "channelFamily": {
2460
+ "description": "Optional normalized acquisition-channel family filter.",
2461
+ "type": "string",
2462
+ "enum": [
2463
+ "llm",
2464
+ "social",
2465
+ "review",
2466
+ "search",
2467
+ "email",
2468
+ "referral",
2469
+ "direct",
2470
+ "other"
2471
+ ]
2472
+ },
2473
+ "platform": {
2474
+ "description": "Normalized external platform selected for this operation.",
2475
+ "type": "string",
2476
+ "minLength": 1,
2477
+ "maxLength": 180
2478
+ },
2479
+ "referrer": {
2480
+ "description": "Optional exact or normalized referrer filter for analytics rows.",
2481
+ "type": "string",
2482
+ "minLength": 1,
2483
+ "maxLength": 500
2484
+ },
2485
+ "path": {
2486
+ "description": "Exact path value used by this tool; preserve its leading slash or vault-relative form as required.",
2487
+ "type": "string",
2488
+ "maxLength": 2e3,
2489
+ "pattern": "^\\/.*"
2490
+ },
2491
+ "deviceClass": {
2492
+ "description": "Optional normalized device-class filter.",
2493
+ "type": "string",
2494
+ "enum": [
2495
+ "desktop",
2496
+ "tablet",
2497
+ "mobile",
2498
+ "unknown"
2499
+ ]
2500
+ },
2501
+ "countryCode": {
2502
+ "description": "Two-letter country code used to filter analytics rows.",
2503
+ "type": "string",
2504
+ "minLength": 2,
2505
+ "maxLength": 2
2506
+ },
2507
+ "regionCode": {
2508
+ "description": "Optional regional subdivision code filter.",
2509
+ "type": "string",
2510
+ "minLength": 1,
2511
+ "maxLength": 8
2512
+ },
2513
+ "conversionKind": {
2514
+ "description": "Optional normalized conversion event kind filter.",
2515
+ "type": "string",
2516
+ "pattern": "^[a-z][a-z0-9_]{1,79}$"
2517
+ },
2518
+ "limit": {
2519
+ "default": 50,
2520
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
2521
+ "type": "integer",
2522
+ "minimum": 1,
2523
+ "maximum": 250
2524
+ },
2525
+ "cursor": {
2526
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
2527
+ "type": "string",
2528
+ "maxLength": 1e3
2529
+ },
2530
+ "dimension": {
2531
+ "type": "string",
2532
+ "enum": [
2533
+ "device",
2534
+ "source",
2535
+ "country",
2536
+ "region",
2537
+ "weekday_hour"
2538
+ ],
2539
+ "description": "Dimension used to group returned analytics rows."
2540
+ }
2541
+ },
2542
+ "required": [
2543
+ "siteId",
2544
+ "dimension"
2545
+ ],
2546
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
2547
+ },
2548
+ "annotations": {
2549
+ "title": "Analytics Dimensions",
2550
+ "readOnlyHint": true,
2551
+ "destructiveHint": false,
2552
+ "idempotentHint": true,
2553
+ "openWorldHint": false
2554
+ }
2555
+ },
2556
+ {
2557
+ "name": "analytics_get_entitlement",
2558
+ "category": "analytics",
2559
+ "title": "Get X-Ray Pixel Access",
2560
+ "description": "Check whether Thorbit X-Ray Pixel is connected and entitled for this MCP Scraper account. X-Ray Pixel is owned and billed by Thorbit, requires an active $50+ Thorbit subscription after its 30-day trial, and does not consume MCP Scraper Credits. Call this before analytics_list_sites when access may not be configured. Account linking must be completed in the MCP Scraper dashboard; never ask a user to paste a Thorbit API key into an AI conversation.",
2561
+ "inputSchema": {
2562
+ "type": "object",
2563
+ "properties": {},
2564
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
2565
+ },
2566
+ "annotations": {
2567
+ "title": "Get X-Ray Pixel Access",
2148
2568
  "readOnlyHint": true,
2149
2569
  "destructiveHint": false,
2150
2570
  "idempotentHint": true,
@@ -2807,6 +3227,41 @@ var MCP_TOOL_CATALOG = [
2807
3227
  "openWorldHint": false
2808
3228
  }
2809
3229
  },
3230
+ {
3231
+ "name": "analytics_get_person_journey",
3232
+ "category": "analytics",
3233
+ "title": "Get Person Journey",
3234
+ "description": "Read one identified person timeline across sessions, immutable touches, calls, CRM stages, conversions, and ad-delivery receipts.",
3235
+ "inputSchema": {
3236
+ "type": "object",
3237
+ "properties": {
3238
+ "siteId": {
3239
+ "type": "string",
3240
+ "format": "uuid",
3241
+ "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)$",
3242
+ "description": "Analytics Site id returned by analytics_list_sites."
3243
+ },
3244
+ "personId": {
3245
+ "type": "string",
3246
+ "format": "uuid",
3247
+ "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)$",
3248
+ "description": "Opaque X-Ray person identifier returned by an attributed-people or journey result."
3249
+ }
3250
+ },
3251
+ "required": [
3252
+ "siteId",
3253
+ "personId"
3254
+ ],
3255
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3256
+ },
3257
+ "annotations": {
3258
+ "title": "Get Person Journey",
3259
+ "readOnlyHint": true,
3260
+ "destructiveHint": false,
3261
+ "idempotentHint": true,
3262
+ "openWorldHint": false
3263
+ }
3264
+ },
2810
3265
  {
2811
3266
  "name": "analytics_get_timeseries",
2812
3267
  "category": "analytics",
@@ -3090,10 +3545,10 @@ var MCP_TOOL_CATALOG = [
3090
3545
  }
3091
3546
  },
3092
3547
  {
3093
- "name": "analytics_list_campaign_links",
3548
+ "name": "analytics_list_activation_receipts",
3094
3549
  "category": "analytics",
3095
- "title": "List Campaign Links",
3096
- "description": "List paginated tracked links and canonical UTM and ad hierarchy fields.",
3550
+ "title": "List Ad Activation Receipts",
3551
+ "description": "List bounded provider delivery receipts for one activation destination.",
3097
3552
  "inputSchema": {
3098
3553
  "type": "object",
3099
3554
  "properties": {
@@ -3103,26 +3558,33 @@ var MCP_TOOL_CATALOG = [
3103
3558
  "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)$",
3104
3559
  "description": "Analytics Site id returned by analytics_list_sites."
3105
3560
  },
3561
+ "destinationId": {
3562
+ "type": "string",
3563
+ "format": "uuid",
3564
+ "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)$",
3565
+ "description": "Activation destination id returned by analytics_list_activation_destinations."
3566
+ },
3106
3567
  "limit": {
3107
3568
  "default": 50,
3108
- "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3569
+ "description": "Maximum receipt rows to return.",
3109
3570
  "type": "integer",
3110
3571
  "minimum": 1,
3111
3572
  "maximum": 250
3112
3573
  },
3113
3574
  "cursor": {
3114
- "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3575
+ "description": "Opaque pagination cursor from the prior receipt page.",
3115
3576
  "type": "string",
3116
3577
  "maxLength": 1e3
3117
3578
  }
3118
3579
  },
3119
3580
  "required": [
3120
- "siteId"
3581
+ "siteId",
3582
+ "destinationId"
3121
3583
  ],
3122
3584
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3123
3585
  },
3124
3586
  "annotations": {
3125
- "title": "List Campaign Links",
3587
+ "title": "List Ad Activation Receipts",
3126
3588
  "readOnlyHint": true,
3127
3589
  "destructiveHint": false,
3128
3590
  "idempotentHint": true,
@@ -3130,10 +3592,10 @@ var MCP_TOOL_CATALOG = [
3130
3592
  }
3131
3593
  },
3132
3594
  {
3133
- "name": "analytics_list_crm_imports",
3595
+ "name": "analytics_list_campaign_links",
3134
3596
  "category": "analytics",
3135
- "title": "List CRM Imports",
3136
- "description": "List paginated encrypted CSV import receipts without exposing contact PII in analytics.",
3597
+ "title": "List Campaign Links",
3598
+ "description": "List paginated tracked links and canonical UTM and ad hierarchy fields.",
3137
3599
  "inputSchema": {
3138
3600
  "type": "object",
3139
3601
  "properties": {
@@ -3162,7 +3624,7 @@ var MCP_TOOL_CATALOG = [
3162
3624
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3163
3625
  },
3164
3626
  "annotations": {
3165
- "title": "List CRM Imports",
3627
+ "title": "List Campaign Links",
3166
3628
  "readOnlyHint": true,
3167
3629
  "destructiveHint": false,
3168
3630
  "idempotentHint": true,
@@ -3170,10 +3632,10 @@ var MCP_TOOL_CATALOG = [
3170
3632
  }
3171
3633
  },
3172
3634
  {
3173
- "name": "analytics_list_forms",
3635
+ "name": "analytics_list_connections",
3174
3636
  "category": "analytics",
3175
- "title": "List Analytics Forms",
3176
- "description": "List paginated Pixel-linked forms, embed snippets, fields, versions, and submission counts.",
3637
+ "title": "List X-Ray Connections",
3638
+ "description": "List phone, CRM, and webhook connections with honest readiness, receipt, and error state.",
3177
3639
  "inputSchema": {
3178
3640
  "type": "object",
3179
3641
  "properties": {
@@ -3202,7 +3664,7 @@ var MCP_TOOL_CATALOG = [
3202
3664
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3203
3665
  },
3204
3666
  "annotations": {
3205
- "title": "List Analytics Forms",
3667
+ "title": "List X-Ray Connections",
3206
3668
  "readOnlyHint": true,
3207
3669
  "destructiveHint": false,
3208
3670
  "idempotentHint": true,
@@ -3210,10 +3672,10 @@ var MCP_TOOL_CATALOG = [
3210
3672
  }
3211
3673
  },
3212
3674
  {
3213
- "name": "analytics_list_pixels",
3675
+ "name": "analytics_list_conversion_rules",
3214
3676
  "category": "analytics",
3215
- "title": "List Analytics Pixels",
3216
- "description": "List Site Pixels, installation snippets, detected domains, approval states, and health.",
3677
+ "title": "List Conversion Rules",
3678
+ "description": "List deterministic versioned rules that turn canonical phone, CRM, transaction, and server events into conversions.",
3217
3679
  "inputSchema": {
3218
3680
  "type": "object",
3219
3681
  "properties": {
@@ -3242,7 +3704,7 @@ var MCP_TOOL_CATALOG = [
3242
3704
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3243
3705
  },
3244
3706
  "annotations": {
3245
- "title": "List Analytics Pixels",
3707
+ "title": "List Conversion Rules",
3246
3708
  "readOnlyHint": true,
3247
3709
  "destructiveHint": false,
3248
3710
  "idempotentHint": true,
@@ -3250,20 +3712,732 @@ var MCP_TOOL_CATALOG = [
3250
3712
  }
3251
3713
  },
3252
3714
  {
3253
- "name": "analytics_list_sites",
3715
+ "name": "analytics_list_crm_imports",
3254
3716
  "category": "analytics",
3255
- "title": "List Analytics Businesses",
3256
- "description": "List the authenticated account's analytics Businesses, roles, Pixel counts, and latest activity. Call this first to obtain the siteId used by every analytics report tool. Tenant access is enforced by the analytics API.",
3717
+ "title": "List CRM Imports",
3718
+ "description": "List paginated encrypted CSV import receipts without exposing contact PII in analytics.",
3257
3719
  "inputSchema": {
3258
3720
  "type": "object",
3259
- "properties": {},
3260
- "$schema": "https://json-schema.org/draft/2020-12/schema"
3261
- },
3262
- "annotations": {
3263
- "title": "List Analytics Businesses",
3264
- "readOnlyHint": true,
3265
- "destructiveHint": false,
3266
- "idempotentHint": true,
3721
+ "properties": {
3722
+ "siteId": {
3723
+ "type": "string",
3724
+ "format": "uuid",
3725
+ "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)$",
3726
+ "description": "Analytics Site id returned by analytics_list_sites."
3727
+ },
3728
+ "limit": {
3729
+ "default": 50,
3730
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3731
+ "type": "integer",
3732
+ "minimum": 1,
3733
+ "maximum": 250
3734
+ },
3735
+ "cursor": {
3736
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3737
+ "type": "string",
3738
+ "maxLength": 1e3
3739
+ }
3740
+ },
3741
+ "required": [
3742
+ "siteId"
3743
+ ],
3744
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3745
+ },
3746
+ "annotations": {
3747
+ "title": "List CRM Imports",
3748
+ "readOnlyHint": true,
3749
+ "destructiveHint": false,
3750
+ "idempotentHint": true,
3751
+ "openWorldHint": false
3752
+ }
3753
+ },
3754
+ {
3755
+ "name": "analytics_list_event_definitions",
3756
+ "category": "analytics",
3757
+ "title": "List Browser Event Definitions",
3758
+ "description": "List declarative page, click, and form-submit tags applied by the first-party X-Ray Pixel.",
3759
+ "inputSchema": {
3760
+ "type": "object",
3761
+ "properties": {
3762
+ "siteId": {
3763
+ "type": "string",
3764
+ "format": "uuid",
3765
+ "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)$",
3766
+ "description": "Analytics Site id returned by analytics_list_sites."
3767
+ },
3768
+ "limit": {
3769
+ "default": 50,
3770
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3771
+ "type": "integer",
3772
+ "minimum": 1,
3773
+ "maximum": 250
3774
+ },
3775
+ "cursor": {
3776
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3777
+ "type": "string",
3778
+ "maxLength": 1e3
3779
+ }
3780
+ },
3781
+ "required": [
3782
+ "siteId"
3783
+ ],
3784
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3785
+ },
3786
+ "annotations": {
3787
+ "title": "List Browser Event Definitions",
3788
+ "readOnlyHint": true,
3789
+ "destructiveHint": false,
3790
+ "idempotentHint": true,
3791
+ "openWorldHint": false
3792
+ }
3793
+ },
3794
+ {
3795
+ "name": "analytics_list_forms",
3796
+ "category": "analytics",
3797
+ "title": "List Analytics Forms",
3798
+ "description": "List paginated Pixel-linked forms, embed snippets, fields, versions, and submission counts.",
3799
+ "inputSchema": {
3800
+ "type": "object",
3801
+ "properties": {
3802
+ "siteId": {
3803
+ "type": "string",
3804
+ "format": "uuid",
3805
+ "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)$",
3806
+ "description": "Analytics Site id returned by analytics_list_sites."
3807
+ },
3808
+ "limit": {
3809
+ "default": 50,
3810
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3811
+ "type": "integer",
3812
+ "minimum": 1,
3813
+ "maximum": 250
3814
+ },
3815
+ "cursor": {
3816
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3817
+ "type": "string",
3818
+ "maxLength": 1e3
3819
+ }
3820
+ },
3821
+ "required": [
3822
+ "siteId"
3823
+ ],
3824
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3825
+ },
3826
+ "annotations": {
3827
+ "title": "List Analytics Forms",
3828
+ "readOnlyHint": true,
3829
+ "destructiveHint": false,
3830
+ "idempotentHint": true,
3831
+ "openWorldHint": false
3832
+ }
3833
+ },
3834
+ {
3835
+ "name": "analytics_list_pixels",
3836
+ "category": "analytics",
3837
+ "title": "List Analytics Pixels",
3838
+ "description": "List Site Pixels, installation snippets, detected domains, approval states, and health.",
3839
+ "inputSchema": {
3840
+ "type": "object",
3841
+ "properties": {
3842
+ "siteId": {
3843
+ "type": "string",
3844
+ "format": "uuid",
3845
+ "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)$",
3846
+ "description": "Analytics Site id returned by analytics_list_sites."
3847
+ },
3848
+ "limit": {
3849
+ "default": 50,
3850
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3851
+ "type": "integer",
3852
+ "minimum": 1,
3853
+ "maximum": 250
3854
+ },
3855
+ "cursor": {
3856
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3857
+ "type": "string",
3858
+ "maxLength": 1e3
3859
+ }
3860
+ },
3861
+ "required": [
3862
+ "siteId"
3863
+ ],
3864
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3865
+ },
3866
+ "annotations": {
3867
+ "title": "List Analytics Pixels",
3868
+ "readOnlyHint": true,
3869
+ "destructiveHint": false,
3870
+ "idempotentHint": true,
3871
+ "openWorldHint": false
3872
+ }
3873
+ },
3874
+ {
3875
+ "name": "analytics_list_sites",
3876
+ "category": "analytics",
3877
+ "title": "List Analytics Businesses",
3878
+ "description": "List the authenticated account's analytics Businesses, roles, Pixel counts, and latest activity. Call this first to obtain the siteId used by every analytics report tool. Tenant access is enforced by the analytics API.",
3879
+ "inputSchema": {
3880
+ "type": "object",
3881
+ "properties": {},
3882
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3883
+ },
3884
+ "annotations": {
3885
+ "title": "List Analytics Businesses",
3886
+ "readOnlyHint": true,
3887
+ "destructiveHint": false,
3888
+ "idempotentHint": true,
3889
+ "openWorldHint": false
3890
+ }
3891
+ },
3892
+ {
3893
+ "name": "analytics_reconcile_connection",
3894
+ "category": "analytics",
3895
+ "title": "Reconcile X-Ray Connection",
3896
+ "description": "Reconcile one phone or CRM connection through its configured provider API and return readiness and checkpoint evidence.",
3897
+ "inputSchema": {
3898
+ "type": "object",
3899
+ "properties": {
3900
+ "siteId": {
3901
+ "type": "string",
3902
+ "format": "uuid",
3903
+ "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)$",
3904
+ "description": "Analytics Site id returned by analytics_list_sites."
3905
+ },
3906
+ "connectionId": {
3907
+ "type": "string",
3908
+ "format": "uuid",
3909
+ "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)$",
3910
+ "description": "Phone or CRM connection id returned by analytics_list_connections."
3911
+ }
3912
+ },
3913
+ "required": [
3914
+ "siteId",
3915
+ "connectionId"
3916
+ ],
3917
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3918
+ },
3919
+ "annotations": {
3920
+ "title": "Reconcile X-Ray Connection",
3921
+ "readOnlyHint": false,
3922
+ "destructiveHint": false,
3923
+ "idempotentHint": true,
3924
+ "openWorldHint": true
3925
+ }
3926
+ },
3927
+ {
3928
+ "name": "analytics_record_external_event",
3929
+ "category": "analytics",
3930
+ "title": "Record Server Event",
3931
+ "description": "Idempotently record a canonical server-side call, CRM, transaction, or custom event and evaluate conversion rules.",
3932
+ "inputSchema": {
3933
+ "type": "object",
3934
+ "properties": {
3935
+ "siteId": {
3936
+ "type": "string",
3937
+ "format": "uuid",
3938
+ "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)$",
3939
+ "description": "Analytics Site id returned by analytics_list_sites."
3940
+ },
3941
+ "schemaVersion": {
3942
+ "default": 1,
3943
+ "description": "Canonical X-Ray event schema version; use version 1.",
3944
+ "type": "number",
3945
+ "const": 1
3946
+ },
3947
+ "eventId": {
3948
+ "type": "string",
3949
+ "minLength": 8,
3950
+ "maxLength": 200,
3951
+ "description": "Caller-owned canonical event identifier used for end-to-end deduplication."
3952
+ },
3953
+ "source": {
3954
+ "type": "string",
3955
+ "minLength": 1,
3956
+ "maxLength": 80,
3957
+ "description": "Optional source or provenance constraint appropriate to this tool; omit when no source restriction is intended."
3958
+ },
3959
+ "sourceAccountRef": {
3960
+ "type": "string",
3961
+ "minLength": 1,
3962
+ "maxLength": 240,
3963
+ "description": "Stable non-secret account identifier at the phone, CRM, or event source."
3964
+ },
3965
+ "sourceEventId": {
3966
+ "type": "string",
3967
+ "minLength": 1,
3968
+ "maxLength": 300,
3969
+ "description": "Stable identifier assigned by the source system for idempotent ingestion."
3970
+ },
3971
+ "eventKind": {
3972
+ "type": "string",
3973
+ "enum": [
3974
+ "browser",
3975
+ "form",
3976
+ "call",
3977
+ "crm",
3978
+ "transaction",
3979
+ "custom_server",
3980
+ "conversion",
3981
+ "delivery"
3982
+ ],
3983
+ "description": "Canonical event family used for journey storage and conversion-rule evaluation."
3984
+ },
3985
+ "eventName": {
3986
+ "type": "string",
3987
+ "pattern": "^[a-z][a-z0-9_]{1,79}$",
3988
+ "description": "Optional normalized analytics event-name filter."
3989
+ },
3990
+ "occurredAt": {
3991
+ "type": "string",
3992
+ "format": "date-time",
3993
+ "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))$",
3994
+ "description": "ISO 8601 timestamp when the source event actually occurred."
3995
+ },
3996
+ "visitorId": {
3997
+ "description": "Consented first-party visitor identifier used for deterministic journey linking.",
3998
+ "type": "string",
3999
+ "maxLength": 160
4000
+ },
4001
+ "sessionId": {
4002
+ "description": "First-party session identifier used for deterministic journey linking.",
4003
+ "type": "string",
4004
+ "maxLength": 160
4005
+ },
4006
+ "callId": {
4007
+ "description": "Stable call identifier assigned by the phone provider.",
4008
+ "type": "string",
4009
+ "maxLength": 240
4010
+ },
4011
+ "dealId": {
4012
+ "description": "Stable CRM deal or opportunity identifier.",
4013
+ "type": "string",
4014
+ "maxLength": 240
4015
+ },
4016
+ "orderId": {
4017
+ "description": "Stable order identifier used for conversion deduplication and reconciliation.",
4018
+ "type": "string",
4019
+ "maxLength": 240
4020
+ },
4021
+ "personRef": {
4022
+ "description": "Opaque source-system person reference; do not place raw contact data here.",
4023
+ "type": "string",
4024
+ "maxLength": 240
4025
+ },
4026
+ "path": {
4027
+ "description": "Exact path value used by this tool; preserve its leading slash or vault-relative form as required.",
4028
+ "type": "string",
4029
+ "maxLength": 2e3
4030
+ },
4031
+ "canonicalUrl": {
4032
+ "description": "Canonical public page URL associated with the event.",
4033
+ "type": "string",
4034
+ "maxLength": 3e3,
4035
+ "format": "uri"
4036
+ },
4037
+ "sourceName": {
4038
+ "description": "Normalized acquisition-source name associated with the event.",
4039
+ "type": "string",
4040
+ "maxLength": 180
4041
+ },
4042
+ "medium": {
4043
+ "description": "Exact normalized campaign medium used to filter or label analytics data.",
4044
+ "type": "string",
4045
+ "maxLength": 180
4046
+ },
4047
+ "campaign": {
4048
+ "description": "Exact normalized campaign value used to filter or label analytics data.",
4049
+ "type": "string",
4050
+ "maxLength": 240
4051
+ },
4052
+ "valueMinor": {
4053
+ "description": "Monetary event value in the smallest unit of the supplied currency.",
4054
+ "type": "integer",
4055
+ "minimum": 0,
4056
+ "maximum": 2147483647
4057
+ },
4058
+ "currency": {
4059
+ "description": "Three-letter ISO currency code for the event value.",
4060
+ "type": "string",
4061
+ "minLength": 3,
4062
+ "maxLength": 3
4063
+ },
4064
+ "clickIds": {
4065
+ "description": "Native advertising click identifiers preserved for deterministic offline conversion matching.",
4066
+ "type": "object",
4067
+ "properties": {
4068
+ "gclid": {
4069
+ "description": "Google Click ID captured from the attributed landing URL.",
4070
+ "type": "string",
4071
+ "maxLength": 500
4072
+ },
4073
+ "gbraid": {
4074
+ "description": "Google app-to-web click identifier captured from the attributed landing URL.",
4075
+ "type": "string",
4076
+ "maxLength": 500
4077
+ },
4078
+ "wbraid": {
4079
+ "description": "Google web-to-app click identifier captured from the attributed landing URL.",
4080
+ "type": "string",
4081
+ "maxLength": 500
4082
+ },
4083
+ "fbclid": {
4084
+ "description": "Meta click identifier captured from the attributed landing URL.",
4085
+ "type": "string",
4086
+ "maxLength": 500
4087
+ },
4088
+ "fbp": {
4089
+ "description": "Meta first-party browser identifier captured with consent.",
4090
+ "type": "string",
4091
+ "maxLength": 500
4092
+ },
4093
+ "fbc": {
4094
+ "description": "Meta click cookie value captured or derived from fbclid with consent.",
4095
+ "type": "string",
4096
+ "maxLength": 500
4097
+ },
4098
+ "ttclid": {
4099
+ "description": "TikTok click identifier captured from the attributed landing URL.",
4100
+ "type": "string",
4101
+ "maxLength": 500
4102
+ },
4103
+ "rdt_cid": {
4104
+ "description": "Reddit click identifier captured from the attributed landing URL.",
4105
+ "type": "string",
4106
+ "maxLength": 500
4107
+ },
4108
+ "msclkid": {
4109
+ "description": "Microsoft Advertising click identifier captured from the attributed landing URL.",
4110
+ "type": "string",
4111
+ "maxLength": 500
4112
+ },
4113
+ "li_fat_id": {
4114
+ "description": "LinkedIn first-party attribution identifier captured from the landing URL.",
4115
+ "type": "string",
4116
+ "maxLength": 500
4117
+ },
4118
+ "snapclid": {
4119
+ "description": "Snapchat click identifier captured from the attributed landing URL.",
4120
+ "type": "string",
4121
+ "maxLength": 500
4122
+ }
4123
+ }
4124
+ },
4125
+ "properties": {
4126
+ "description": "Bounded non-secret event properties used for reporting and declarative rule evaluation.",
4127
+ "type": "object",
4128
+ "propertyNames": {
4129
+ "type": "string"
4130
+ },
4131
+ "additionalProperties": {}
4132
+ }
4133
+ },
4134
+ "required": [
4135
+ "siteId",
4136
+ "eventId",
4137
+ "source",
4138
+ "sourceAccountRef",
4139
+ "sourceEventId",
4140
+ "eventKind",
4141
+ "eventName",
4142
+ "occurredAt"
4143
+ ],
4144
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
4145
+ },
4146
+ "annotations": {
4147
+ "title": "Record Server Event",
4148
+ "readOnlyHint": false,
4149
+ "destructiveHint": false,
4150
+ "idempotentHint": true,
4151
+ "openWorldHint": false
4152
+ }
4153
+ },
4154
+ {
4155
+ "name": "analytics_retry_activation_delivery",
4156
+ "category": "analytics",
4157
+ "title": "Retry Ad Activation Delivery",
4158
+ "description": "Requeue one failed or dead-lettered activation job. This may cause an external provider delivery.",
4159
+ "inputSchema": {
4160
+ "type": "object",
4161
+ "properties": {
4162
+ "siteId": {
4163
+ "type": "string",
4164
+ "format": "uuid",
4165
+ "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)$",
4166
+ "description": "Analytics Site id returned by analytics_list_sites."
4167
+ },
4168
+ "jobId": {
4169
+ "type": "string",
4170
+ "format": "uuid",
4171
+ "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)$",
4172
+ "description": "Failed activation job id returned by analytics_list_activation_receipts."
4173
+ }
4174
+ },
4175
+ "required": [
4176
+ "siteId",
4177
+ "jobId"
4178
+ ],
4179
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
4180
+ },
4181
+ "annotations": {
4182
+ "title": "Retry Ad Activation Delivery",
4183
+ "readOnlyHint": false,
4184
+ "destructiveHint": false,
4185
+ "idempotentHint": false,
4186
+ "openWorldHint": true
4187
+ }
4188
+ },
4189
+ {
4190
+ "name": "analytics_test_activation_destination",
4191
+ "category": "analytics",
4192
+ "title": "Test Ad Activation Destination",
4193
+ "description": "Send the provider-specific verification test for a configured activation destination and return its safe receipt.",
4194
+ "inputSchema": {
4195
+ "type": "object",
4196
+ "properties": {
4197
+ "siteId": {
4198
+ "type": "string",
4199
+ "format": "uuid",
4200
+ "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)$",
4201
+ "description": "Analytics Site id returned by analytics_list_sites."
4202
+ },
4203
+ "destinationId": {
4204
+ "type": "string",
4205
+ "format": "uuid",
4206
+ "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)$",
4207
+ "description": "Activation destination id returned by analytics_list_activation_destinations."
4208
+ }
4209
+ },
4210
+ "required": [
4211
+ "siteId",
4212
+ "destinationId"
4213
+ ],
4214
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
4215
+ },
4216
+ "annotations": {
4217
+ "title": "Test Ad Activation Destination",
4218
+ "readOnlyHint": false,
4219
+ "destructiveHint": false,
4220
+ "idempotentHint": false,
4221
+ "openWorldHint": true
4222
+ }
4223
+ },
4224
+ {
4225
+ "name": "analytics_test_event_definition",
4226
+ "category": "analytics",
4227
+ "title": "Test Browser Event Definition",
4228
+ "description": "Preview a definition against validated hostname, path, trigger, tag, and browser-reported selector-match facts. This never accepts HTML or executes selectors server-side.",
4229
+ "inputSchema": {
4230
+ "type": "object",
4231
+ "properties": {
4232
+ "siteId": {
4233
+ "type": "string",
4234
+ "format": "uuid",
4235
+ "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)$",
4236
+ "description": "Analytics Site id returned by analytics_list_sites."
4237
+ },
4238
+ "definitionId": {
4239
+ "type": "string",
4240
+ "format": "uuid",
4241
+ "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)$",
4242
+ "description": "Event definition id returned by analytics_list_event_definitions."
4243
+ },
4244
+ "hostname": {
4245
+ "type": "string",
4246
+ "minLength": 1,
4247
+ "maxLength": 253,
4248
+ "description": "Bare hostname observed by the browser."
4249
+ },
4250
+ "path": {
4251
+ "type": "string",
4252
+ "maxLength": 2e3,
4253
+ "pattern": "^\\/.*",
4254
+ "description": "URL path observed by the browser."
4255
+ },
4256
+ "triggerKind": {
4257
+ "type": "string",
4258
+ "enum": [
4259
+ "page",
4260
+ "click",
4261
+ "form",
4262
+ "semantic"
4263
+ ],
4264
+ "description": "Trigger interaction being previewed."
4265
+ },
4266
+ "tagEventName": {
4267
+ "description": "Validated data-xray-event name observed by the browser.",
4268
+ "type": "string",
4269
+ "pattern": "^[a-z][a-z0-9_]{1,79}$"
4270
+ },
4271
+ "selectorMatched": {
4272
+ "description": "The browser-reported match result. The server never receives HTML or evaluates a selector.",
4273
+ "type": "boolean"
4274
+ }
4275
+ },
4276
+ "required": [
4277
+ "siteId",
4278
+ "definitionId",
4279
+ "hostname",
4280
+ "path",
4281
+ "triggerKind"
4282
+ ],
4283
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
4284
+ },
4285
+ "annotations": {
4286
+ "title": "Test Browser Event Definition",
4287
+ "readOnlyHint": true,
4288
+ "destructiveHint": false,
4289
+ "idempotentHint": true,
4290
+ "openWorldHint": false
4291
+ }
4292
+ },
4293
+ {
4294
+ "name": "analytics_update_event_definition",
4295
+ "category": "analytics",
4296
+ "title": "Update Browser Event Definition",
4297
+ "description": "Update a versioned declarative browser event definition. Null path, selector, or metadata clears that optional field.",
4298
+ "inputSchema": {
4299
+ "type": "object",
4300
+ "properties": {
4301
+ "siteId": {
4302
+ "type": "string",
4303
+ "format": "uuid",
4304
+ "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)$",
4305
+ "description": "Analytics Site id returned by analytics_list_sites."
4306
+ },
4307
+ "definitionId": {
4308
+ "type": "string",
4309
+ "format": "uuid",
4310
+ "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)$",
4311
+ "description": "Event definition id returned by analytics_list_event_definitions."
4312
+ },
4313
+ "name": {
4314
+ "type": "string",
4315
+ "minLength": 1,
4316
+ "maxLength": 120,
4317
+ "description": "Human-readable definition name unique within the Site."
4318
+ },
4319
+ "eventName": {
4320
+ "type": "string",
4321
+ "pattern": "^[a-z][a-z0-9_]{1,79}$",
4322
+ "description": "Canonical event name emitted when this definition matches."
4323
+ },
4324
+ "triggerKind": {
4325
+ "type": "string",
4326
+ "enum": [
4327
+ "page",
4328
+ "click",
4329
+ "form",
4330
+ "semantic"
4331
+ ],
4332
+ "description": "Declarative browser trigger. Semantic uses a data-xray-event tag."
4333
+ },
4334
+ "path": {
4335
+ "description": "Replacement page path; null clears it.",
4336
+ "anyOf": [
4337
+ {
4338
+ "type": "string",
4339
+ "maxLength": 2e3,
4340
+ "pattern": "^\\/.*"
4341
+ },
4342
+ {
4343
+ "type": "null"
4344
+ }
4345
+ ]
4346
+ },
4347
+ "pathMatch": {
4348
+ "description": "Replacement page path match mode.",
4349
+ "type": "string",
4350
+ "enum": [
4351
+ "exact",
4352
+ "prefix"
4353
+ ]
4354
+ },
4355
+ "selector": {
4356
+ "description": "Replacement browser-only selector; null clears it.",
4357
+ "anyOf": [
4358
+ {
4359
+ "type": "string",
4360
+ "minLength": 1,
4361
+ "maxLength": 500
4362
+ },
4363
+ {
4364
+ "type": "null"
4365
+ }
4366
+ ]
4367
+ },
4368
+ "hostnames": {
4369
+ "description": "Replacement approved bare-hostname scope.",
4370
+ "maxItems": 25,
4371
+ "type": "array",
4372
+ "items": {
4373
+ "type": "string",
4374
+ "minLength": 1,
4375
+ "maxLength": 253
4376
+ }
4377
+ },
4378
+ "metadata": {
4379
+ "description": "Replacement safe metadata; null clears it.",
4380
+ "anyOf": [
4381
+ {
4382
+ "type": "object",
4383
+ "properties": {
4384
+ "value": {
4385
+ "description": "Optional non-negative conversion value in major currency units.",
4386
+ "type": "number",
4387
+ "minimum": 0,
4388
+ "maximum": 1e12
4389
+ },
4390
+ "currency": {
4391
+ "description": "ISO 4217 currency code for value.",
4392
+ "type": "string",
4393
+ "pattern": "^[A-Za-z]{3}$"
4394
+ },
4395
+ "orderId": {
4396
+ "description": "Optional stable order identifier.",
4397
+ "type": "string",
4398
+ "minLength": 1,
4399
+ "maxLength": 200
4400
+ },
4401
+ "contentId": {
4402
+ "description": "Optional product or content identifier.",
4403
+ "type": "string",
4404
+ "minLength": 1,
4405
+ "maxLength": 200
4406
+ },
4407
+ "contentType": {
4408
+ "description": "Optional bounded content category.",
4409
+ "type": "string",
4410
+ "minLength": 1,
4411
+ "maxLength": 80
4412
+ }
4413
+ },
4414
+ "additionalProperties": false
4415
+ },
4416
+ {
4417
+ "type": "null"
4418
+ }
4419
+ ]
4420
+ },
4421
+ "oncePerSession": {
4422
+ "description": "Replacement once-per-browser-session behavior.",
4423
+ "type": "boolean"
4424
+ },
4425
+ "enabled": {
4426
+ "description": "Replacement enabled state.",
4427
+ "type": "boolean"
4428
+ }
4429
+ },
4430
+ "required": [
4431
+ "siteId",
4432
+ "definitionId"
4433
+ ],
4434
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
4435
+ },
4436
+ "annotations": {
4437
+ "title": "Update Browser Event Definition",
4438
+ "readOnlyHint": false,
4439
+ "destructiveHint": false,
4440
+ "idempotentHint": false,
3267
4441
  "openWorldHint": false
3268
4442
  }
3269
4443
  },
@@ -6787,7 +7961,7 @@ var MCP_TOOL_CATALOG = [
6787
7961
  "type": "object",
6788
7962
  "properties": {
6789
7963
  "canonicalUrl": {
6790
- "description": "Canonical public URL for this article or entity.",
7964
+ "description": "Canonical public page URL associated with the event.",
6791
7965
  "type": "string",
6792
7966
  "format": "uri"
6793
7967
  },
@@ -7712,7 +8886,7 @@ var MCP_TOOL_CATALOG = [
7712
8886
  "type": "object",
7713
8887
  "properties": {
7714
8888
  "canonicalUrl": {
7715
- "description": "Canonical public URL for this article or entity.",
8889
+ "description": "Canonical public page URL associated with the event.",
7716
8890
  "type": "string",
7717
8891
  "format": "uri"
7718
8892
  },