mcpscraper-cli 0.29.6 → 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 +1652 -464
  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.6";
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",
@@ -3029,31 +3484,678 @@ var MCP_TOOL_CATALOG = [
3029
3484
  "type": "string"
3030
3485
  }
3031
3486
  },
3032
- "description": "CSV-column mapping used to identify and protect supported CRM fields."
3487
+ "description": "CSV-column mapping used to identify and protect supported CRM fields."
3488
+ }
3489
+ },
3490
+ "required": [
3491
+ "siteId",
3492
+ "sourceSystem",
3493
+ "filename",
3494
+ "csv",
3495
+ "mapping"
3496
+ ],
3497
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3498
+ },
3499
+ "annotations": {
3500
+ "title": "Import CRM CSV",
3501
+ "readOnlyHint": false,
3502
+ "destructiveHint": false,
3503
+ "idempotentHint": false,
3504
+ "openWorldHint": false
3505
+ }
3506
+ },
3507
+ {
3508
+ "name": "analytics_list_activation_destinations",
3509
+ "category": "analytics",
3510
+ "title": "List Ad Activation Destinations",
3511
+ "description": "List Meta, Google, TikTok, and Reddit destinations with pending, delivered, and failed conversion counts.",
3512
+ "inputSchema": {
3513
+ "type": "object",
3514
+ "properties": {
3515
+ "siteId": {
3516
+ "type": "string",
3517
+ "format": "uuid",
3518
+ "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)$",
3519
+ "description": "Analytics Site id returned by analytics_list_sites."
3520
+ },
3521
+ "limit": {
3522
+ "default": 50,
3523
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3524
+ "type": "integer",
3525
+ "minimum": 1,
3526
+ "maximum": 250
3527
+ },
3528
+ "cursor": {
3529
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3530
+ "type": "string",
3531
+ "maxLength": 1e3
3532
+ }
3533
+ },
3534
+ "required": [
3535
+ "siteId"
3536
+ ],
3537
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3538
+ },
3539
+ "annotations": {
3540
+ "title": "List Ad Activation Destinations",
3541
+ "readOnlyHint": true,
3542
+ "destructiveHint": false,
3543
+ "idempotentHint": true,
3544
+ "openWorldHint": false
3545
+ }
3546
+ },
3547
+ {
3548
+ "name": "analytics_list_activation_receipts",
3549
+ "category": "analytics",
3550
+ "title": "List Ad Activation Receipts",
3551
+ "description": "List bounded provider delivery receipts for one activation destination.",
3552
+ "inputSchema": {
3553
+ "type": "object",
3554
+ "properties": {
3555
+ "siteId": {
3556
+ "type": "string",
3557
+ "format": "uuid",
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)$",
3559
+ "description": "Analytics Site id returned by analytics_list_sites."
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
+ },
3567
+ "limit": {
3568
+ "default": 50,
3569
+ "description": "Maximum receipt rows to return.",
3570
+ "type": "integer",
3571
+ "minimum": 1,
3572
+ "maximum": 250
3573
+ },
3574
+ "cursor": {
3575
+ "description": "Opaque pagination cursor from the prior receipt page.",
3576
+ "type": "string",
3577
+ "maxLength": 1e3
3578
+ }
3579
+ },
3580
+ "required": [
3581
+ "siteId",
3582
+ "destinationId"
3583
+ ],
3584
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3585
+ },
3586
+ "annotations": {
3587
+ "title": "List Ad Activation Receipts",
3588
+ "readOnlyHint": true,
3589
+ "destructiveHint": false,
3590
+ "idempotentHint": true,
3591
+ "openWorldHint": false
3592
+ }
3593
+ },
3594
+ {
3595
+ "name": "analytics_list_campaign_links",
3596
+ "category": "analytics",
3597
+ "title": "List Campaign Links",
3598
+ "description": "List paginated tracked links and canonical UTM and ad hierarchy fields.",
3599
+ "inputSchema": {
3600
+ "type": "object",
3601
+ "properties": {
3602
+ "siteId": {
3603
+ "type": "string",
3604
+ "format": "uuid",
3605
+ "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)$",
3606
+ "description": "Analytics Site id returned by analytics_list_sites."
3607
+ },
3608
+ "limit": {
3609
+ "default": 50,
3610
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3611
+ "type": "integer",
3612
+ "minimum": 1,
3613
+ "maximum": 250
3614
+ },
3615
+ "cursor": {
3616
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3617
+ "type": "string",
3618
+ "maxLength": 1e3
3619
+ }
3620
+ },
3621
+ "required": [
3622
+ "siteId"
3623
+ ],
3624
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3625
+ },
3626
+ "annotations": {
3627
+ "title": "List Campaign Links",
3628
+ "readOnlyHint": true,
3629
+ "destructiveHint": false,
3630
+ "idempotentHint": true,
3631
+ "openWorldHint": false
3632
+ }
3633
+ },
3634
+ {
3635
+ "name": "analytics_list_connections",
3636
+ "category": "analytics",
3637
+ "title": "List X-Ray Connections",
3638
+ "description": "List phone, CRM, and webhook connections with honest readiness, receipt, and error state.",
3639
+ "inputSchema": {
3640
+ "type": "object",
3641
+ "properties": {
3642
+ "siteId": {
3643
+ "type": "string",
3644
+ "format": "uuid",
3645
+ "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)$",
3646
+ "description": "Analytics Site id returned by analytics_list_sites."
3647
+ },
3648
+ "limit": {
3649
+ "default": 50,
3650
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3651
+ "type": "integer",
3652
+ "minimum": 1,
3653
+ "maximum": 250
3654
+ },
3655
+ "cursor": {
3656
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3657
+ "type": "string",
3658
+ "maxLength": 1e3
3659
+ }
3660
+ },
3661
+ "required": [
3662
+ "siteId"
3663
+ ],
3664
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3665
+ },
3666
+ "annotations": {
3667
+ "title": "List X-Ray Connections",
3668
+ "readOnlyHint": true,
3669
+ "destructiveHint": false,
3670
+ "idempotentHint": true,
3671
+ "openWorldHint": false
3672
+ }
3673
+ },
3674
+ {
3675
+ "name": "analytics_list_conversion_rules",
3676
+ "category": "analytics",
3677
+ "title": "List Conversion Rules",
3678
+ "description": "List deterministic versioned rules that turn canonical phone, CRM, transaction, and server events into conversions.",
3679
+ "inputSchema": {
3680
+ "type": "object",
3681
+ "properties": {
3682
+ "siteId": {
3683
+ "type": "string",
3684
+ "format": "uuid",
3685
+ "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)$",
3686
+ "description": "Analytics Site id returned by analytics_list_sites."
3687
+ },
3688
+ "limit": {
3689
+ "default": 50,
3690
+ "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3691
+ "type": "integer",
3692
+ "minimum": 1,
3693
+ "maximum": 250
3694
+ },
3695
+ "cursor": {
3696
+ "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3697
+ "type": "string",
3698
+ "maxLength": 1e3
3699
+ }
3700
+ },
3701
+ "required": [
3702
+ "siteId"
3703
+ ],
3704
+ "$schema": "https://json-schema.org/draft/2020-12/schema"
3705
+ },
3706
+ "annotations": {
3707
+ "title": "List Conversion Rules",
3708
+ "readOnlyHint": true,
3709
+ "destructiveHint": false,
3710
+ "idempotentHint": true,
3711
+ "openWorldHint": false
3712
+ }
3713
+ },
3714
+ {
3715
+ "name": "analytics_list_crm_imports",
3716
+ "category": "analytics",
3717
+ "title": "List CRM Imports",
3718
+ "description": "List paginated encrypted CSV import receipts without exposing contact PII in analytics.",
3719
+ "inputSchema": {
3720
+ "type": "object",
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": {}
3033
4132
  }
3034
4133
  },
3035
4134
  "required": [
3036
4135
  "siteId",
3037
- "sourceSystem",
3038
- "filename",
3039
- "csv",
3040
- "mapping"
4136
+ "eventId",
4137
+ "source",
4138
+ "sourceAccountRef",
4139
+ "sourceEventId",
4140
+ "eventKind",
4141
+ "eventName",
4142
+ "occurredAt"
3041
4143
  ],
3042
4144
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3043
4145
  },
3044
4146
  "annotations": {
3045
- "title": "Import CRM CSV",
4147
+ "title": "Record Server Event",
3046
4148
  "readOnlyHint": false,
3047
4149
  "destructiveHint": false,
3048
- "idempotentHint": false,
4150
+ "idempotentHint": true,
3049
4151
  "openWorldHint": false
3050
4152
  }
3051
4153
  },
3052
4154
  {
3053
- "name": "analytics_list_activation_destinations",
4155
+ "name": "analytics_retry_activation_delivery",
3054
4156
  "category": "analytics",
3055
- "title": "List Ad Activation Destinations",
3056
- "description": "List Meta, Google, TikTok, and Reddit destinations with pending, delivered, and failed conversion counts.",
4157
+ "title": "Retry Ad Activation Delivery",
4158
+ "description": "Requeue one failed or dead-lettered activation job. This may cause an external provider delivery.",
3057
4159
  "inputSchema": {
3058
4160
  "type": "object",
3059
4161
  "properties": {
@@ -3063,37 +4165,32 @@ var MCP_TOOL_CATALOG = [
3063
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)$",
3064
4166
  "description": "Analytics Site id returned by analytics_list_sites."
3065
4167
  },
3066
- "limit": {
3067
- "default": 50,
3068
- "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3069
- "type": "integer",
3070
- "minimum": 1,
3071
- "maximum": 250
3072
- },
3073
- "cursor": {
3074
- "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
4168
+ "jobId": {
3075
4169
  "type": "string",
3076
- "maxLength": 1e3
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."
3077
4173
  }
3078
4174
  },
3079
4175
  "required": [
3080
- "siteId"
4176
+ "siteId",
4177
+ "jobId"
3081
4178
  ],
3082
4179
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3083
4180
  },
3084
4181
  "annotations": {
3085
- "title": "List Ad Activation Destinations",
3086
- "readOnlyHint": true,
4182
+ "title": "Retry Ad Activation Delivery",
4183
+ "readOnlyHint": false,
3087
4184
  "destructiveHint": false,
3088
- "idempotentHint": true,
3089
- "openWorldHint": false
4185
+ "idempotentHint": false,
4186
+ "openWorldHint": true
3090
4187
  }
3091
4188
  },
3092
4189
  {
3093
- "name": "analytics_list_campaign_links",
4190
+ "name": "analytics_test_activation_destination",
3094
4191
  "category": "analytics",
3095
- "title": "List Campaign Links",
3096
- "description": "List paginated tracked links and canonical UTM and ad hierarchy fields.",
4192
+ "title": "Test Ad Activation Destination",
4193
+ "description": "Send the provider-specific verification test for a configured activation destination and return its safe receipt.",
3097
4194
  "inputSchema": {
3098
4195
  "type": "object",
3099
4196
  "properties": {
@@ -3103,37 +4200,32 @@ var MCP_TOOL_CATALOG = [
3103
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)$",
3104
4201
  "description": "Analytics Site id returned by analytics_list_sites."
3105
4202
  },
3106
- "limit": {
3107
- "default": 50,
3108
- "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3109
- "type": "integer",
3110
- "minimum": 1,
3111
- "maximum": 250
3112
- },
3113
- "cursor": {
3114
- "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
4203
+ "destinationId": {
3115
4204
  "type": "string",
3116
- "maxLength": 1e3
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."
3117
4208
  }
3118
4209
  },
3119
4210
  "required": [
3120
- "siteId"
4211
+ "siteId",
4212
+ "destinationId"
3121
4213
  ],
3122
4214
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3123
4215
  },
3124
4216
  "annotations": {
3125
- "title": "List Campaign Links",
3126
- "readOnlyHint": true,
4217
+ "title": "Test Ad Activation Destination",
4218
+ "readOnlyHint": false,
3127
4219
  "destructiveHint": false,
3128
- "idempotentHint": true,
3129
- "openWorldHint": false
4220
+ "idempotentHint": false,
4221
+ "openWorldHint": true
3130
4222
  }
3131
4223
  },
3132
4224
  {
3133
- "name": "analytics_list_crm_imports",
4225
+ "name": "analytics_test_event_definition",
3134
4226
  "category": "analytics",
3135
- "title": "List CRM Imports",
3136
- "description": "List paginated encrypted CSV import receipts without exposing contact PII in 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.",
3137
4229
  "inputSchema": {
3138
4230
  "type": "object",
3139
4231
  "properties": {
@@ -3143,66 +4235,55 @@ var MCP_TOOL_CATALOG = [
3143
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)$",
3144
4236
  "description": "Analytics Site id returned by analytics_list_sites."
3145
4237
  },
3146
- "limit": {
3147
- "default": 50,
3148
- "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3149
- "type": "integer",
3150
- "minimum": 1,
3151
- "maximum": 250
3152
- },
3153
- "cursor": {
3154
- "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
3155
- "type": "string",
3156
- "maxLength": 1e3
3157
- }
3158
- },
3159
- "required": [
3160
- "siteId"
3161
- ],
3162
- "$schema": "https://json-schema.org/draft/2020-12/schema"
3163
- },
3164
- "annotations": {
3165
- "title": "List CRM Imports",
3166
- "readOnlyHint": true,
3167
- "destructiveHint": false,
3168
- "idempotentHint": true,
3169
- "openWorldHint": false
3170
- }
3171
- },
3172
- {
3173
- "name": "analytics_list_forms",
3174
- "category": "analytics",
3175
- "title": "List Analytics Forms",
3176
- "description": "List paginated Pixel-linked forms, embed snippets, fields, versions, and submission counts.",
3177
- "inputSchema": {
3178
- "type": "object",
3179
- "properties": {
3180
- "siteId": {
4238
+ "definitionId": {
3181
4239
  "type": "string",
3182
4240
  "format": "uuid",
3183
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)$",
3184
- "description": "Analytics Site id returned by analytics_list_sites."
4242
+ "description": "Event definition id returned by analytics_list_event_definitions."
3185
4243
  },
3186
- "limit": {
3187
- "default": 50,
3188
- "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3189
- "type": "integer",
3190
- "minimum": 1,
3191
- "maximum": 250
4244
+ "hostname": {
4245
+ "type": "string",
4246
+ "minLength": 1,
4247
+ "maxLength": 253,
4248
+ "description": "Bare hostname observed by the browser."
3192
4249
  },
3193
- "cursor": {
3194
- "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
4250
+ "path": {
3195
4251
  "type": "string",
3196
- "maxLength": 1e3
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"
3197
4274
  }
3198
4275
  },
3199
4276
  "required": [
3200
- "siteId"
4277
+ "siteId",
4278
+ "definitionId",
4279
+ "hostname",
4280
+ "path",
4281
+ "triggerKind"
3201
4282
  ],
3202
4283
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3203
4284
  },
3204
4285
  "annotations": {
3205
- "title": "List Analytics Forms",
4286
+ "title": "Test Browser Event Definition",
3206
4287
  "readOnlyHint": true,
3207
4288
  "destructiveHint": false,
3208
4289
  "idempotentHint": true,
@@ -3210,10 +4291,10 @@ var MCP_TOOL_CATALOG = [
3210
4291
  }
3211
4292
  },
3212
4293
  {
3213
- "name": "analytics_list_pixels",
4294
+ "name": "analytics_update_event_definition",
3214
4295
  "category": "analytics",
3215
- "title": "List Analytics Pixels",
3216
- "description": "List Site Pixels, installation snippets, detected domains, approval states, and health.",
4296
+ "title": "Update Browser Event Definition",
4297
+ "description": "Update a versioned declarative browser event definition. Null path, selector, or metadata clears that optional field.",
3217
4298
  "inputSchema": {
3218
4299
  "type": "object",
3219
4300
  "properties": {
@@ -3223,47 +4304,140 @@ var MCP_TOOL_CATALOG = [
3223
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)$",
3224
4305
  "description": "Analytics Site id returned by analytics_list_sites."
3225
4306
  },
3226
- "limit": {
3227
- "default": 50,
3228
- "description": "Maximum rows or records to return on this page; use the returned cursor for more.",
3229
- "type": "integer",
3230
- "minimum": 1,
3231
- "maximum": 250
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."
3232
4312
  },
3233
- "cursor": {
3234
- "description": "Opaque continuation cursor returned by the previous page; omit for the first page.",
4313
+ "name": {
3235
4314
  "type": "string",
3236
- "maxLength": 1e3
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"
3237
4428
  }
3238
4429
  },
3239
4430
  "required": [
3240
- "siteId"
4431
+ "siteId",
4432
+ "definitionId"
3241
4433
  ],
3242
4434
  "$schema": "https://json-schema.org/draft/2020-12/schema"
3243
4435
  },
3244
4436
  "annotations": {
3245
- "title": "List Analytics Pixels",
3246
- "readOnlyHint": true,
3247
- "destructiveHint": false,
3248
- "idempotentHint": true,
3249
- "openWorldHint": false
3250
- }
3251
- },
3252
- {
3253
- "name": "analytics_list_sites",
3254
- "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.",
3257
- "inputSchema": {
3258
- "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,
4437
+ "title": "Update Browser Event Definition",
4438
+ "readOnlyHint": false,
3265
4439
  "destructiveHint": false,
3266
- "idempotentHint": true,
4440
+ "idempotentHint": false,
3267
4441
  "openWorldHint": false
3268
4442
  }
3269
4443
  },
@@ -5006,20 +6180,34 @@ var MCP_TOOL_CATALOG = [
5006
6180
  "name": "commons_host_image",
5007
6181
  "category": "commons",
5008
6182
  "title": "Host a Transparent Commons Image",
5009
- "description": "Normal prerequisite for any featured image whose URL was not already returned by commons_host_image. Host image bytes from imageBase64 when you already have an attachment and the serialized request stays under about 3 MB, or from a stable direct public HTTPS image URL; do not pass a webpage, caller-local path, private URL, or temporary/signed attachment URL. Returns the permanent Commons URL to place in featuredImage.url before commons_validate_entity and commons_submit_entity. Submit can still auto-host a stable public source as a compatibility fallback. JPEG, PNG, GIF, and WebP are accepted up to 10 MB; SVG is rejected. Identical bytes are stored once.",
6183
+ "description": "Turn one supplied image source into a permanent Transparent Commons image before validation and submission. Provide exactly one of imageBase64 for a pasted or AI-generated image, artifactId for an owner-scoped MCP Scraper image artifact, or sourceUrl for either a direct public HTTPS image or a webpage containing the desired image. Webpages are inspected in deterministic order for Open Graph, Twitter, JSON-LD, and meaningful content images; unusable candidates fall through to the next candidate. Returns the permanent URL for featuredImage.url plus source and selection provenance. JPEG, PNG, GIF, and WebP are accepted up to 10 MB; SVG is rejected. Identical bytes are stored once. Never pass a caller-local path or private/authenticated URL.",
5010
6184
  "inputSchema": {
5011
6185
  "type": "object",
5012
6186
  "properties": {
5013
6187
  "sourceUrl": {
5014
- "description": "Stable direct public HTTPS URL whose response is the image bytes to host. Do not pass an HTML webpage, chat attachment reference, caller-local path, temporary or signed URL, or private/authenticated URL.",
6188
+ "description": "Public HTTPS direct image URL or webpage URL. A direct image is hosted as-is; an HTML page is inspected for Open Graph, Twitter, JSON-LD, and meaningful content images, then the first usable candidate is hosted. Temporary signed URLs are consumed immediately and query credentials are not retained as provenance.",
5015
6189
  "type": "string",
5016
6190
  "format": "uri"
5017
6191
  },
5018
6192
  "imageBase64": {
5019
- "description": "Base64 image bytes for an image you already hold, including forwarded chat attachment bytes. Prefer this over a temporary attachment URL when the serialized request remains under about 3 MB; larger files require a stable direct public HTTPS source URL.",
6193
+ "description": "Base64 image bytes for an image already available to the caller, including a pasted attachment or AI-generated image. Use sourceType to preserve whether it was uploaded or generated. Keep the complete serialized request within the client transport limit.",
5020
6194
  "type": "string",
5021
6195
  "minLength": 16
5022
6196
  },
6197
+ "artifactId": {
6198
+ "description": "Owner-scoped image artifact returned by an MCP Scraper media or screenshot workflow. The server reauthorizes ownership and reads the bytes directly; do not construct an artifact ID.",
6199
+ "type": "string",
6200
+ "minLength": 1,
6201
+ "maxLength": 500
6202
+ },
6203
+ "sourceType": {
6204
+ "description": "Provenance for imageBase64 or artifactId. Use ai_generated only when an image model created the supplied bytes; otherwise use uploaded or omit it.",
6205
+ "type": "string",
6206
+ "enum": [
6207
+ "uploaded",
6208
+ "ai_generated"
6209
+ ]
6210
+ },
5023
6211
  "alt": {
5024
6212
  "description": "Alt text describing the image for readers who cannot see it.",
5025
6213
  "type": "string",
@@ -6072,13 +7260,13 @@ var MCP_TOOL_CATALOG = [
6072
7260
  "maxLength": 240
6073
7261
  },
6074
7262
  "featuredImage": {
6075
- "description": "Required for auto-published public entities. First call commons_host_image and place its returned permanent URL here; validation does not fetch external images and reports unregistered URLs as not publishable. Submit retains a compatibility fallback that auto-hosts a stable direct public HTTPS image URL. The image is also added to the media manifest if absent.",
7263
+ "description": "Required for auto-published public entities. First call commons_host_image with attachment bytes, an image artifact, a direct image URL, or a webpage URL, then place its returned permanent URL here. Validation does not fetch external images and reports unregistered URLs as not publishable. Submit retains a compatibility fallback for public URLs. The image is also added to the media manifest if absent.",
6076
7264
  "type": "object",
6077
7265
  "properties": {
6078
7266
  "url": {
6079
7267
  "type": "string",
6080
7268
  "format": "uri",
6081
- "description": "For a publish-ready entity, use the permanent URL returned by commons_host_image. Submit can auto-host a stable direct public HTTPS image URL as a compatibility fallback, but validation reports any unregistered external URL as not ready. Do not use a chat attachment reference, caller-local path, temporary or signed URL, private URL, or HTML page URL."
7269
+ "description": "For a publish-ready entity, use the permanent URL returned by commons_host_image. Validation reports any unregistered external URL as not ready. Do not use a chat attachment reference, caller-local path, private URL, or HTML page URL here; pass the original image or webpage source to commons_host_image first."
6082
7270
  },
6083
7271
  "alt": {
6084
7272
  "description": "Accessible alternative text describing the image.",
@@ -6773,7 +7961,7 @@ var MCP_TOOL_CATALOG = [
6773
7961
  "type": "object",
6774
7962
  "properties": {
6775
7963
  "canonicalUrl": {
6776
- "description": "Canonical public URL for this article or entity.",
7964
+ "description": "Canonical public page URL associated with the event.",
6777
7965
  "type": "string",
6778
7966
  "format": "uri"
6779
7967
  },
@@ -6997,13 +8185,13 @@ var MCP_TOOL_CATALOG = [
6997
8185
  "maxLength": 240
6998
8186
  },
6999
8187
  "featuredImage": {
7000
- "description": "Required for auto-published public entities. First call commons_host_image and place its returned permanent URL here; validation does not fetch external images and reports unregistered URLs as not publishable. Submit retains a compatibility fallback that auto-hosts a stable direct public HTTPS image URL. The image is also added to the media manifest if absent.",
8188
+ "description": "Required for auto-published public entities. First call commons_host_image with attachment bytes, an image artifact, a direct image URL, or a webpage URL, then place its returned permanent URL here. Validation does not fetch external images and reports unregistered URLs as not publishable. Submit retains a compatibility fallback for public URLs. The image is also added to the media manifest if absent.",
7001
8189
  "type": "object",
7002
8190
  "properties": {
7003
8191
  "url": {
7004
8192
  "type": "string",
7005
8193
  "format": "uri",
7006
- "description": "For a publish-ready entity, use the permanent URL returned by commons_host_image. Submit can auto-host a stable direct public HTTPS image URL as a compatibility fallback, but validation reports any unregistered external URL as not ready. Do not use a chat attachment reference, caller-local path, temporary or signed URL, private URL, or HTML page URL."
8194
+ "description": "For a publish-ready entity, use the permanent URL returned by commons_host_image. Validation reports any unregistered external URL as not ready. Do not use a chat attachment reference, caller-local path, private URL, or HTML page URL here; pass the original image or webpage source to commons_host_image first."
7007
8195
  },
7008
8196
  "alt": {
7009
8197
  "description": "Accessible alternative text describing the image.",
@@ -7698,7 +8886,7 @@ var MCP_TOOL_CATALOG = [
7698
8886
  "type": "object",
7699
8887
  "properties": {
7700
8888
  "canonicalUrl": {
7701
- "description": "Canonical public URL for this article or entity.",
8889
+ "description": "Canonical public page URL associated with the event.",
7702
8890
  "type": "string",
7703
8891
  "format": "uri"
7704
8892
  },