@sealmetrics/mcp 0.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +149 -0
  2. package/dist/client.d.ts +45 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +136 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/errors.d.ts +10 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +55 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/index.d.ts +1 -6
  11. package/dist/index.d.ts.map +1 -0
  12. package/dist/index.js +122 -781
  13. package/dist/index.js.map +1 -0
  14. package/dist/resources/tracking-guide.d.ts +13 -0
  15. package/dist/resources/tracking-guide.d.ts.map +1 -0
  16. package/dist/resources/tracking-guide.js +479 -0
  17. package/dist/resources/tracking-guide.js.map +1 -0
  18. package/dist/tools/alerts.d.ts +5 -0
  19. package/dist/tools/alerts.d.ts.map +1 -0
  20. package/dist/tools/alerts.js +80 -0
  21. package/dist/tools/alerts.js.map +1 -0
  22. package/dist/tools/audience.d.ts +7 -0
  23. package/dist/tools/audience.d.ts.map +1 -0
  24. package/dist/tools/audience.js +146 -0
  25. package/dist/tools/audience.js.map +1 -0
  26. package/dist/tools/bots.d.ts +4 -0
  27. package/dist/tools/bots.d.ts.map +1 -0
  28. package/dist/tools/bots.js +52 -0
  29. package/dist/tools/bots.js.map +1 -0
  30. package/dist/tools/channels.d.ts +5 -0
  31. package/dist/tools/channels.d.ts.map +1 -0
  32. package/dist/tools/channels.js +88 -0
  33. package/dist/tools/channels.js.map +1 -0
  34. package/dist/tools/content.d.ts +3 -0
  35. package/dist/tools/content.d.ts.map +1 -0
  36. package/dist/tools/content.js +47 -0
  37. package/dist/tools/content.js.map +1 -0
  38. package/dist/tools/conversions.d.ts +6 -0
  39. package/dist/tools/conversions.d.ts.map +1 -0
  40. package/dist/tools/conversions.js +178 -0
  41. package/dist/tools/conversions.js.map +1 -0
  42. package/dist/tools/funnel.d.ts +3 -0
  43. package/dist/tools/funnel.d.ts.map +1 -0
  44. package/dist/tools/funnel.js +27 -0
  45. package/dist/tools/funnel.js.map +1 -0
  46. package/dist/tools/index.d.ts +16 -0
  47. package/dist/tools/index.d.ts.map +1 -0
  48. package/dist/tools/index.js +79 -0
  49. package/dist/tools/index.js.map +1 -0
  50. package/dist/tools/manage.d.ts +3 -0
  51. package/dist/tools/manage.d.ts.map +1 -0
  52. package/dist/tools/manage.js +55 -0
  53. package/dist/tools/manage.js.map +1 -0
  54. package/dist/tools/overview.d.ts +3 -0
  55. package/dist/tools/overview.d.ts.map +1 -0
  56. package/dist/tools/overview.js +26 -0
  57. package/dist/tools/overview.js.map +1 -0
  58. package/dist/tools/pages.d.ts +7 -0
  59. package/dist/tools/pages.d.ts.map +1 -0
  60. package/dist/tools/pages.js +207 -0
  61. package/dist/tools/pages.js.map +1 -0
  62. package/dist/tools/properties.d.ts +5 -0
  63. package/dist/tools/properties.d.ts.map +1 -0
  64. package/dist/tools/properties.js +107 -0
  65. package/dist/tools/properties.js.map +1 -0
  66. package/dist/tools/segments.d.ts +4 -0
  67. package/dist/tools/segments.d.ts.map +1 -0
  68. package/dist/tools/segments.js +49 -0
  69. package/dist/tools/segments.js.map +1 -0
  70. package/dist/tools/shared.d.ts +45 -0
  71. package/dist/tools/shared.d.ts.map +1 -0
  72. package/dist/tools/shared.js +139 -0
  73. package/dist/tools/shared.js.map +1 -0
  74. package/dist/tools/sites.d.ts +4 -0
  75. package/dist/tools/sites.d.ts.map +1 -0
  76. package/dist/tools/sites.js +36 -0
  77. package/dist/tools/sites.js.map +1 -0
  78. package/dist/tools/tracking.d.ts +3 -0
  79. package/dist/tools/tracking.d.ts.map +1 -0
  80. package/dist/tools/tracking.js +220 -0
  81. package/dist/tools/tracking.js.map +1 -0
  82. package/dist/tools/traffic.d.ts +10 -0
  83. package/dist/tools/traffic.d.ts.map +1 -0
  84. package/dist/tools/traffic.js +273 -0
  85. package/dist/tools/traffic.js.map +1 -0
  86. package/dist/tools/webhooks.d.ts +5 -0
  87. package/dist/tools/webhooks.d.ts.map +1 -0
  88. package/dist/tools/webhooks.js +101 -0
  89. package/dist/tools/webhooks.js.map +1 -0
  90. package/dist/types.d.ts +118 -0
  91. package/dist/types.d.ts.map +1 -0
  92. package/dist/types.js +22 -0
  93. package/dist/types.js.map +1 -0
  94. package/package.json +35 -27
@@ -0,0 +1,146 @@
1
+ import { PERIOD_SCHEMA, COMPARE_SCHEMA, LIMIT_SCHEMA, SORT_ORDER_SCHEMA, PAGE_SCHEMA, resolveSiteId, } from "./shared.js";
2
+ export const getCountriesTool = {
3
+ name: "get_countries",
4
+ description: "Get traffic broken down by country. Shows entrances, pageviews, conversions, and revenue per country. Country codes follow ISO 3166-1 alpha-2 (e.g. ES=Spain, US=United States).",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ site_id: {
9
+ type: "string",
10
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
11
+ },
12
+ period: PERIOD_SCHEMA,
13
+ compare: COMPARE_SCHEMA,
14
+ limit: LIMIT_SCHEMA,
15
+ sort_by: {
16
+ type: "string",
17
+ description: "Field to sort by.",
18
+ enum: ["entrances", "engaged_entrances", "page_views", "conversions", "revenue", "bounce_rate"],
19
+ default: "entrances",
20
+ },
21
+ sort_order: SORT_ORDER_SCHEMA,
22
+ page: PAGE_SCHEMA,
23
+ },
24
+ },
25
+ handler: async (client, args) => {
26
+ return client.requestPaginated("/stats/geo/countries", {
27
+ site_id: resolveSiteId(args),
28
+ period: args.period ?? "30d",
29
+ compare: args.compare,
30
+ page_size: String(args.limit ?? 20),
31
+ page: args.page != null ? String(args.page) : undefined,
32
+ sort_by: args.sort_by ?? "entrances",
33
+ sort_order: args.sort_order ?? "desc",
34
+ });
35
+ },
36
+ };
37
+ export const getDevicesTool = {
38
+ name: "get_devices",
39
+ description: "Get traffic broken down by device type (desktop/mobile/tablet), browser (Chrome, Safari, Firefox...), and operating system (Windows, macOS, iOS, Android...). Returns all three breakdowns in a single call.",
40
+ inputSchema: {
41
+ type: "object",
42
+ properties: {
43
+ site_id: {
44
+ type: "string",
45
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
46
+ },
47
+ period: PERIOD_SCHEMA,
48
+ compare: COMPARE_SCHEMA,
49
+ },
50
+ },
51
+ handler: async (client, args) => {
52
+ return client.request("/stats/devices", {
53
+ site_id: resolveSiteId(args),
54
+ period: args.period ?? "30d",
55
+ compare: args.compare,
56
+ });
57
+ },
58
+ };
59
+ export const getBrowsersTool = {
60
+ name: "get_browsers",
61
+ description: "Get traffic broken down by browser: Chrome, Safari, Firefox, Edge, etc. Shows entrances and pageviews per browser with pagination.",
62
+ inputSchema: {
63
+ type: "object",
64
+ properties: {
65
+ site_id: {
66
+ type: "string",
67
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
68
+ },
69
+ period: PERIOD_SCHEMA,
70
+ limit: LIMIT_SCHEMA,
71
+ page: PAGE_SCHEMA,
72
+ country: {
73
+ type: "string",
74
+ description: "Filter by country code (e.g. 'ES', 'US').",
75
+ },
76
+ },
77
+ },
78
+ handler: async (client, args) => {
79
+ return client.requestPaginated("/stats/browsers", {
80
+ site_id: resolveSiteId(args),
81
+ period: args.period ?? "30d",
82
+ page_size: String(args.limit ?? 20),
83
+ page: args.page != null ? String(args.page) : undefined,
84
+ country: args.country,
85
+ });
86
+ },
87
+ };
88
+ export const getOperatingSystemsTool = {
89
+ name: "get_operating_systems",
90
+ description: "Get traffic broken down by operating system: Windows, macOS, iOS, Android, Linux, etc. Shows entrances and pageviews per OS with pagination.",
91
+ inputSchema: {
92
+ type: "object",
93
+ properties: {
94
+ site_id: {
95
+ type: "string",
96
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
97
+ },
98
+ period: PERIOD_SCHEMA,
99
+ limit: LIMIT_SCHEMA,
100
+ page: PAGE_SCHEMA,
101
+ country: {
102
+ type: "string",
103
+ description: "Filter by country code (e.g. 'ES', 'US').",
104
+ },
105
+ },
106
+ },
107
+ handler: async (client, args) => {
108
+ return client.requestPaginated("/stats/operating-systems", {
109
+ site_id: resolveSiteId(args),
110
+ period: args.period ?? "30d",
111
+ page_size: String(args.limit ?? 20),
112
+ page: args.page != null ? String(args.page) : undefined,
113
+ country: args.country,
114
+ });
115
+ },
116
+ };
117
+ export const getDeviceTypesTool = {
118
+ name: "get_device_types",
119
+ description: "Get traffic broken down by device type (desktop, mobile, tablet) with pagination. Shows entrances, pageviews, conversions per device type.",
120
+ inputSchema: {
121
+ type: "object",
122
+ properties: {
123
+ site_id: {
124
+ type: "string",
125
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
126
+ },
127
+ period: PERIOD_SCHEMA,
128
+ limit: LIMIT_SCHEMA,
129
+ page: PAGE_SCHEMA,
130
+ country: {
131
+ type: "string",
132
+ description: "Filter by country code (e.g. 'ES', 'US').",
133
+ },
134
+ },
135
+ },
136
+ handler: async (client, args) => {
137
+ return client.requestPaginated("/stats/devices/types", {
138
+ site_id: resolveSiteId(args),
139
+ period: args.period ?? "30d",
140
+ page_size: String(args.limit ?? 10),
141
+ page: args.page != null ? String(args.page) : undefined,
142
+ country: args.country,
143
+ });
144
+ },
145
+ };
146
+ //# sourceMappingURL=audience.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audience.js","sourceRoot":"","sources":["../../src/tools/audience.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { ToolDef } from "./index.js";
2
+ export declare const getBotStatsTool: ToolDef;
3
+ export declare const getSuspiciousSessionsTool: ToolDef;
4
+ //# sourceMappingURL=bots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bots.d.ts","sourceRoot":"","sources":["../../src/tools/bots.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,eAAe,EAAE,OAwB7B,CAAC;AAEF,eAAO,MAAM,yBAAyB,EAAE,OA0BvC,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { LIMIT_SCHEMA, resolveSiteId } from "./shared.js";
2
+ export const getBotStatsTool = {
3
+ name: "get_bot_stats",
4
+ description: "Get bot detection overview: score distribution, top suspicion flags, and daily trend of human vs suspected-bot traffic. Requires agent analytics to be enabled on the site.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ site_id: {
9
+ type: "string",
10
+ description: "Site ID (account_id). Optional if SEALMETRICS_SITE_ID env var is set.",
11
+ },
12
+ days: {
13
+ type: "number",
14
+ description: "Number of days to analyze (1-90, default: 30).",
15
+ default: 30,
16
+ },
17
+ },
18
+ },
19
+ handler: async (client, args) => {
20
+ return client.request("/bot-stats/overview", {
21
+ account_id: resolveSiteId(args),
22
+ days: String(args.days ?? 30),
23
+ });
24
+ },
25
+ };
26
+ export const getSuspiciousSessionsTool = {
27
+ name: "get_suspicious_sessions",
28
+ description: "Get sessions with high bot-suspicion scores for investigation. Shows session details, score, and detected flags. Useful for identifying automated traffic patterns.",
29
+ inputSchema: {
30
+ type: "object",
31
+ properties: {
32
+ site_id: {
33
+ type: "string",
34
+ description: "Site ID (account_id). Optional if SEALMETRICS_SITE_ID env var is set.",
35
+ },
36
+ min_score: {
37
+ type: "number",
38
+ description: "Minimum suspicion score threshold (1-100, default: 50).",
39
+ default: 50,
40
+ },
41
+ limit: LIMIT_SCHEMA,
42
+ },
43
+ },
44
+ handler: async (client, args) => {
45
+ return client.request("/bot-stats/suspicious-sessions", {
46
+ account_id: resolveSiteId(args),
47
+ min_score: String(args.min_score ?? 50),
48
+ limit: String(args.limit ?? 20),
49
+ });
50
+ },
51
+ };
52
+ //# sourceMappingURL=bots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bots.js","sourceRoot":"","sources":["../../src/tools/bots.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG1D,MAAM,CAAC,MAAM,eAAe,GAAY;IACtC,IAAI,EAAE,eAAe;IACrB,WAAW,EACT,6KAA6K;IAC/K,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;YACD,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,gDAAgD;gBAC7D,OAAO,EAAE,EAAE;aACZ;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA6B,EAAE,EAAE;QAC1E,OAAO,MAAM,CAAC,OAAO,CAAU,qBAAqB,EAAE;YACpD,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;YAC/B,IAAI,EAAE,MAAM,CAAE,IAAI,CAAC,IAAe,IAAI,EAAE,CAAC;SAC1C,CAAC,CAAC;IACL,CAAC;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,yBAAyB,GAAY;IAChD,IAAI,EAAE,yBAAyB;IAC/B,WAAW,EACT,qKAAqK;IACvK,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uEAAuE;aACrF;YACD,SAAS,EAAE;gBACT,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;gBACtE,OAAO,EAAE,EAAE;aACZ;YACD,KAAK,EAAE,YAAY;SACpB;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA6B,EAAE,EAAE;QAC1E,OAAO,MAAM,CAAC,OAAO,CAAU,gCAAgC,EAAE;YAC/D,UAAU,EAAE,aAAa,CAAC,IAAI,CAAC;YAC/B,SAAS,EAAE,MAAM,CAAE,IAAI,CAAC,SAAoB,IAAI,EAAE,CAAC;YACnD,KAAK,EAAE,MAAM,CAAE,IAAI,CAAC,KAAgB,IAAI,EAAE,CAAC;SAC5C,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { ToolDef } from "./index.js";
2
+ export declare const getChannelsTool: ToolDef;
3
+ export declare const getTopChannelsTool: ToolDef;
4
+ export declare const listChannelRulesTool: ToolDef;
5
+ //# sourceMappingURL=channels.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.d.ts","sourceRoot":"","sources":["../../src/tools/channels.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,eAAe,EAAE,OA+B7B,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,OA2BhC,CAAC;AAEF,eAAO,MAAM,oBAAoB,EAAE,OA4BlC,CAAC"}
@@ -0,0 +1,88 @@
1
+ import { PERIOD_SCHEMA, LIMIT_SCHEMA, PAGE_SCHEMA, resolveSiteId, periodToDateRange } from "./shared.js";
2
+ export const getChannelsTool = {
3
+ name: "get_channels",
4
+ description: "Get traffic metrics grouped by channel: Paid Search, Organic Search, Social, Direct, Email, Referral, etc. Channels are automatically classified based on UTM parameters and referrer rules.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ site_id: {
9
+ type: "string",
10
+ description: "Site ID (account_id). Optional if SEALMETRICS_SITE_ID env var is set.",
11
+ },
12
+ period: PERIOD_SCHEMA,
13
+ limit: LIMIT_SCHEMA,
14
+ page: PAGE_SCHEMA,
15
+ country: {
16
+ type: "string",
17
+ description: "Filter by country code (e.g. 'ES', 'US').",
18
+ },
19
+ },
20
+ },
21
+ handler: async (client, args) => {
22
+ const { start_date, end_date } = periodToDateRange(args.period ?? "30d");
23
+ return client.request("/channel-groups/stats/channels", {
24
+ account_id: resolveSiteId(args),
25
+ start_date,
26
+ end_date,
27
+ page_size: String(args.limit ?? 20),
28
+ page: args.page != null ? String(args.page) : undefined,
29
+ country: args.country,
30
+ });
31
+ },
32
+ };
33
+ export const getTopChannelsTool = {
34
+ name: "get_top_channels",
35
+ description: "Get top channels ranked by entrances. Returns a compact list of the top N channels (Paid Search, Organic, Social, etc.) — ideal for quick rankings.",
36
+ inputSchema: {
37
+ type: "object",
38
+ properties: {
39
+ site_id: {
40
+ type: "string",
41
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
42
+ },
43
+ period: PERIOD_SCHEMA,
44
+ limit: LIMIT_SCHEMA,
45
+ country: {
46
+ type: "string",
47
+ description: "Filter by country code (e.g. 'ES', 'US').",
48
+ },
49
+ },
50
+ },
51
+ handler: async (client, args) => {
52
+ return client.request("/stats/top-channels", {
53
+ site_id: resolveSiteId(args),
54
+ period: args.period ?? "30d",
55
+ limit: String(args.limit ?? 10),
56
+ country: args.country,
57
+ });
58
+ },
59
+ };
60
+ export const listChannelRulesTool = {
61
+ name: "list_channel_rules",
62
+ description: "List channel group rules configured for a site. Shows how traffic is classified into channels (Paid Search, Organic, Social, etc.) based on UTM parameters and referrer patterns.",
63
+ inputSchema: {
64
+ type: "object",
65
+ properties: {
66
+ site_id: {
67
+ type: "string",
68
+ description: "Site ID (account_id). Optional if SEALMETRICS_SITE_ID env var is set.",
69
+ },
70
+ include_inactive: {
71
+ type: "boolean",
72
+ description: "Include inactive rules (default: false).",
73
+ },
74
+ include_defaults: {
75
+ type: "boolean",
76
+ description: "Include default system rules (default: true).",
77
+ },
78
+ },
79
+ },
80
+ handler: async (client, args) => {
81
+ return client.request("/channel-groups", {
82
+ account_id: resolveSiteId(args),
83
+ include_inactive: args.include_inactive != null ? String(args.include_inactive) : undefined,
84
+ include_defaults: args.include_defaults != null ? String(args.include_defaults) : undefined,
85
+ });
86
+ },
87
+ };
88
+ //# sourceMappingURL=channels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"channels.js","sourceRoot":"","sources":["../../src/tools/channels.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from "./index.js";
2
+ export declare const getContentGroupsTool: ToolDef;
3
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../src/tools/content.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,oBAAoB,EAAE,OA6ClC,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { PERIOD_SCHEMA, resolveSiteId } from "./shared.js";
2
+ export const getContentGroupsTool = {
3
+ name: "get_content_groups",
4
+ description: "Get metrics grouped by content group (content_grouping). Shows pageviews and entrances per content group. Useful for understanding which sections of a site get the most traffic.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ site_id: {
9
+ type: "string",
10
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
11
+ },
12
+ period: PERIOD_SCHEMA,
13
+ country: {
14
+ type: "string",
15
+ description: "Filter by country code (e.g. 'ES', 'US').",
16
+ },
17
+ utm_source: {
18
+ type: "string",
19
+ description: "Filter by UTM source (e.g. 'google').",
20
+ },
21
+ utm_medium: {
22
+ type: "string",
23
+ description: "Filter by UTM medium (e.g. 'cpc').",
24
+ },
25
+ utm_campaign: {
26
+ type: "string",
27
+ description: "Filter by UTM campaign name.",
28
+ },
29
+ utm_term: {
30
+ type: "string",
31
+ description: "Filter by UTM term.",
32
+ },
33
+ },
34
+ },
35
+ handler: async (client, args) => {
36
+ return client.request("/stats/pages/content-groups", {
37
+ site_id: resolveSiteId(args),
38
+ period: args.period ?? "30d",
39
+ country: args.country,
40
+ utm_source: args.utm_source,
41
+ utm_medium: args.utm_medium,
42
+ utm_campaign: args.utm_campaign,
43
+ utm_term: args.utm_term,
44
+ });
45
+ },
46
+ };
47
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../../src/tools/content.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,CAAC,MAAM,oBAAoB,GAAY;IAC3C,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EACT,mLAAmL;IACrL,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,2CAA2C;aACzD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,uCAAuC;aACrD;YACD,UAAU,EAAE;gBACV,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,oCAAoC;aAClD;YACD,YAAY,EAAE;gBACZ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,8BAA8B;aAC5C;YACD,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qBAAqB;aACnC;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA6B,EAAE,EAAE;QAC1E,OAAO,MAAM,CAAC,OAAO,CAAU,6BAA6B,EAAE;YAC5D,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC;YAC5B,MAAM,EAAG,IAAI,CAAC,MAAiB,IAAI,KAAK;YACxC,OAAO,EAAE,IAAI,CAAC,OAA6B;YAC3C,UAAU,EAAE,IAAI,CAAC,UAAgC;YACjD,UAAU,EAAE,IAAI,CAAC,UAAgC;YACjD,YAAY,EAAE,IAAI,CAAC,YAAkC;YACrD,QAAQ,EAAE,IAAI,CAAC,QAA8B;SAC9C,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ToolDef } from "./index.js";
2
+ export declare const getConversionsTool: ToolDef;
3
+ export declare const getMicroconversionsTool: ToolDef;
4
+ export declare const listMicroconversionTypesTool: ToolDef;
5
+ export declare const getMicroconversionDetailsTool: ToolDef;
6
+ //# sourceMappingURL=conversions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversions.d.ts","sourceRoot":"","sources":["../../src/tools/conversions.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,kBAAkB,EAAE,OAkDhC,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,OAwCrC,CAAC;AAEF,eAAO,MAAM,4BAA4B,EAAE,OAoB1C,CAAC;AAEF,eAAO,MAAM,6BAA6B,EAAE,OAkE3C,CAAC"}
@@ -0,0 +1,178 @@
1
+ import { PERIOD_SCHEMA, COMPARE_SCHEMA, LIMIT_SCHEMA, SORT_ORDER_SCHEMA, PAGE_SCHEMA, resolveSiteId, } from "./shared.js";
2
+ export const getConversionsTool = {
3
+ name: "get_conversions",
4
+ description: "Get conversions broken down by type (e.g. purchase, signup). Shows count, revenue, and average order value per conversion type. Use to analyze which conversion goals are performing best.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ site_id: {
9
+ type: "string",
10
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
11
+ },
12
+ period: PERIOD_SCHEMA,
13
+ compare: COMPARE_SCHEMA,
14
+ limit: LIMIT_SCHEMA,
15
+ sort_by: {
16
+ type: "string",
17
+ description: "Field to sort by.",
18
+ enum: ["count", "revenue", "avg_value"],
19
+ default: "count",
20
+ },
21
+ sort_order: SORT_ORDER_SCHEMA,
22
+ page: PAGE_SCHEMA,
23
+ utm_source: {
24
+ type: "string",
25
+ description: "Filter by traffic source.",
26
+ },
27
+ utm_medium: {
28
+ type: "string",
29
+ description: "Filter by traffic medium.",
30
+ },
31
+ country: {
32
+ type: "string",
33
+ description: "Filter by country code (e.g. 'ES', 'US').",
34
+ },
35
+ },
36
+ },
37
+ handler: async (client, args) => {
38
+ return client.requestPaginated("/stats/conversions", {
39
+ site_id: resolveSiteId(args),
40
+ period: args.period ?? "30d",
41
+ compare: args.compare,
42
+ page_size: String(args.limit ?? 20),
43
+ page: args.page != null ? String(args.page) : undefined,
44
+ sort_by: args.sort_by ?? "count",
45
+ sort_order: args.sort_order ?? "desc",
46
+ utm_source: args.utm_source,
47
+ utm_medium: args.utm_medium,
48
+ country: args.country,
49
+ });
50
+ },
51
+ };
52
+ export const getMicroconversionsTool = {
53
+ name: "get_microconversions",
54
+ description: "Get microconversions (smaller engagement events) broken down by type: add_to_cart, newsletter_signup, pdf_download, etc. Shows count and trends per event type.",
55
+ inputSchema: {
56
+ type: "object",
57
+ properties: {
58
+ site_id: {
59
+ type: "string",
60
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
61
+ },
62
+ period: PERIOD_SCHEMA,
63
+ compare: COMPARE_SCHEMA,
64
+ limit: LIMIT_SCHEMA,
65
+ sort_by: {
66
+ type: "string",
67
+ description: "Field to sort by.",
68
+ enum: ["count", "revenue", "avg_value"],
69
+ default: "count",
70
+ },
71
+ sort_order: SORT_ORDER_SCHEMA,
72
+ page: PAGE_SCHEMA,
73
+ conversion_type: {
74
+ type: "string",
75
+ description: "Filter by specific microconversion type.",
76
+ },
77
+ },
78
+ },
79
+ handler: async (client, args) => {
80
+ return client.requestPaginated("/stats/microconversions", {
81
+ site_id: resolveSiteId(args),
82
+ period: args.period ?? "30d",
83
+ compare: args.compare,
84
+ page_size: String(args.limit ?? 20),
85
+ page: args.page != null ? String(args.page) : undefined,
86
+ sort_by: args.sort_by ?? "count",
87
+ sort_order: args.sort_order ?? "desc",
88
+ conversion_type: args.conversion_type,
89
+ });
90
+ },
91
+ };
92
+ export const listMicroconversionTypesTool = {
93
+ name: "list_microconversion_types",
94
+ description: "Get the list of available microconversion type names for a site. Use this to discover what microconversion types exist before querying details.",
95
+ inputSchema: {
96
+ type: "object",
97
+ properties: {
98
+ site_id: {
99
+ type: "string",
100
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
101
+ },
102
+ period: PERIOD_SCHEMA,
103
+ },
104
+ },
105
+ handler: async (client, args) => {
106
+ return client.request("/stats/microconversions-types", {
107
+ site_id: resolveSiteId(args),
108
+ period: args.period ?? "30d",
109
+ });
110
+ },
111
+ };
112
+ export const getMicroconversionDetailsTool = {
113
+ name: "get_microconversion_details",
114
+ description: "Get detailed breakdown for a specific microconversion type. Shows metrics segmented by source, medium, campaign, country, device, browser, and OS.",
115
+ inputSchema: {
116
+ type: "object",
117
+ properties: {
118
+ site_id: {
119
+ type: "string",
120
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
121
+ },
122
+ conversion_type: {
123
+ type: "string",
124
+ description: "The microconversion type to get details for (e.g. 'add_to_cart', 'newsletter_signup').",
125
+ },
126
+ period: PERIOD_SCHEMA,
127
+ utm_source: {
128
+ type: "string",
129
+ description: "Filter by UTM source.",
130
+ },
131
+ utm_medium: {
132
+ type: "string",
133
+ description: "Filter by UTM medium.",
134
+ },
135
+ utm_campaign: {
136
+ type: "string",
137
+ description: "Filter by UTM campaign.",
138
+ },
139
+ utm_term: {
140
+ type: "string",
141
+ description: "Filter by UTM term.",
142
+ },
143
+ country: {
144
+ type: "string",
145
+ description: "Filter by country code (e.g. 'ES', 'US').",
146
+ },
147
+ device_type: {
148
+ type: "string",
149
+ description: "Filter by device type (e.g. 'desktop', 'mobile', 'tablet').",
150
+ },
151
+ browser: {
152
+ type: "string",
153
+ description: "Filter by browser name.",
154
+ },
155
+ os: {
156
+ type: "string",
157
+ description: "Filter by operating system name.",
158
+ },
159
+ },
160
+ required: ["conversion_type"],
161
+ },
162
+ handler: async (client, args) => {
163
+ const conversionType = args.conversion_type;
164
+ return client.request(`/stats/microconversions/${encodeURIComponent(conversionType)}`, {
165
+ site_id: resolveSiteId(args),
166
+ period: args.period ?? "30d",
167
+ utm_source: args.utm_source,
168
+ utm_medium: args.utm_medium,
169
+ utm_campaign: args.utm_campaign,
170
+ utm_term: args.utm_term,
171
+ country: args.country,
172
+ device_type: args.device_type,
173
+ browser: args.browser,
174
+ os: args.os,
175
+ });
176
+ },
177
+ };
178
+ //# sourceMappingURL=conversions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversions.js","sourceRoot":"","sources":["../../src/tools/conversions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolDef } from "./index.js";
2
+ export declare const getFunnelTool: ToolDef;
3
+ //# sourceMappingURL=funnel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funnel.d.ts","sourceRoot":"","sources":["../../src/tools/funnel.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,eAAO,MAAM,aAAa,EAAE,OAyB3B,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { PERIOD_SCHEMA, resolveSiteId } from "./shared.js";
2
+ export const getFunnelTool = {
3
+ name: "get_funnel",
4
+ description: "Get funnel analysis showing conversion rates between steps. Returns step-by-step data including visitor count, conversion rate, and dropoff at each stage. Useful for finding where users drop off in multi-step flows.",
5
+ inputSchema: {
6
+ type: "object",
7
+ properties: {
8
+ site_id: {
9
+ type: "string",
10
+ description: "Site ID. Optional if SEALMETRICS_SITE_ID env var is set.",
11
+ },
12
+ period: PERIOD_SCHEMA,
13
+ country: {
14
+ type: "string",
15
+ description: "Filter by country code (e.g. 'ES').",
16
+ },
17
+ },
18
+ },
19
+ handler: async (client, args) => {
20
+ return client.request("/stats/funnel", {
21
+ site_id: resolveSiteId(args),
22
+ period: args.period ?? "30d",
23
+ country: args.country,
24
+ });
25
+ },
26
+ };
27
+ //# sourceMappingURL=funnel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"funnel.js","sourceRoot":"","sources":["../../src/tools/funnel.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG3D,MAAM,CAAC,MAAM,aAAa,GAAY;IACpC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,yNAAyN;IAC3N,WAAW,EAAE;QACX,IAAI,EAAE,QAAiB;QACvB,UAAU,EAAE;YACV,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,0DAA0D;aACxE;YACD,MAAM,EAAE,aAAa;YACrB,OAAO,EAAE;gBACP,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,qCAAqC;aACnD;SACF;KACF;IACD,OAAO,EAAE,KAAK,EAAE,MAAyB,EAAE,IAA6B,EAAE,EAAE;QAC1E,OAAO,MAAM,CAAC,OAAO,CAAe,eAAe,EAAE;YACnD,OAAO,EAAE,aAAa,CAAC,IAAI,CAAC;YAC5B,MAAM,EAAG,IAAI,CAAC,MAAiB,IAAI,KAAK;YACxC,OAAO,EAAE,IAAI,CAAC,OAA6B;SAC5C,CAAC,CAAC;IACL,CAAC;CACF,CAAC"}
@@ -0,0 +1,16 @@
1
+ import type { SealMetricsClient } from "../client.js";
2
+ export { PERIOD_SCHEMA, COMPARE_SCHEMA, LIMIT_SCHEMA, SORT_ORDER_SCHEMA, PAGE_SCHEMA, resolveSiteId, } from "./shared.js";
3
+ /** Tool definition with name, description, schema, and handler. */
4
+ export interface ToolDef {
5
+ name: string;
6
+ description: string;
7
+ inputSchema: {
8
+ type: "object";
9
+ properties: Record<string, unknown>;
10
+ required?: string[];
11
+ };
12
+ handler: (client: SealMetricsClient, args: Record<string, unknown>) => Promise<unknown>;
13
+ }
14
+ /** All registered tools. */
15
+ export declare const ALL_TOOLS: ToolDef[];
16
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAgDtD,OAAO,EACL,aAAa,EACb,cAAc,EACd,YAAY,EACZ,iBAAiB,EACjB,WAAW,EACX,aAAa,GACd,MAAM,aAAa,CAAC;AAErB,mEAAmE;AACnE,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF,OAAO,EAAE,CACP,MAAM,EAAE,iBAAiB,EACzB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC1B,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAED,4BAA4B;AAC5B,eAAO,MAAM,SAAS,EAAE,OAAO,EA2D9B,CAAC"}