umami-compass 0.1.3 → 0.3.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 (68) hide show
  1. package/README.md +44 -9
  2. package/SECURITY.md +2 -2
  3. package/dist/api/client.d.ts +1 -0
  4. package/dist/api/client.d.ts.map +1 -1
  5. package/dist/api/client.js +76 -19
  6. package/dist/api/client.js.map +1 -1
  7. package/dist/config.d.ts +2 -1
  8. package/dist/config.d.ts.map +1 -1
  9. package/dist/config.js +8 -6
  10. package/dist/config.js.map +1 -1
  11. package/dist/mcp/insights-utils.d.ts +206 -0
  12. package/dist/mcp/insights-utils.d.ts.map +1 -0
  13. package/dist/mcp/insights-utils.js +505 -0
  14. package/dist/mcp/insights-utils.js.map +1 -0
  15. package/dist/mcp/modules/core.d.ts.map +1 -1
  16. package/dist/mcp/modules/core.js +14 -6
  17. package/dist/mcp/modules/core.js.map +1 -1
  18. package/dist/mcp/modules/events.d.ts.map +1 -1
  19. package/dist/mcp/modules/events.js +3 -3
  20. package/dist/mcp/modules/events.js.map +1 -1
  21. package/dist/mcp/modules/heatmaps.d.ts.map +1 -1
  22. package/dist/mcp/modules/heatmaps.js +3 -2
  23. package/dist/mcp/modules/heatmaps.js.map +1 -1
  24. package/dist/mcp/modules/insights.d.ts +3 -0
  25. package/dist/mcp/modules/insights.d.ts.map +1 -0
  26. package/dist/mcp/modules/insights.js +963 -0
  27. package/dist/mcp/modules/insights.js.map +1 -0
  28. package/dist/mcp/modules/performance.d.ts.map +1 -1
  29. package/dist/mcp/modules/performance.js +5 -3
  30. package/dist/mcp/modules/performance.js.map +1 -1
  31. package/dist/mcp/modules/replay.d.ts.map +1 -1
  32. package/dist/mcp/modules/replay.js +3 -2
  33. package/dist/mcp/modules/replay.js.map +1 -1
  34. package/dist/mcp/modules/reports.d.ts.map +1 -1
  35. package/dist/mcp/modules/reports.js +71 -19
  36. package/dist/mcp/modules/reports.js.map +1 -1
  37. package/dist/mcp/modules/revenue.d.ts.map +1 -1
  38. package/dist/mcp/modules/revenue.js +2 -2
  39. package/dist/mcp/modules/revenue.js.map +1 -1
  40. package/dist/mcp/modules/sessions.d.ts.map +1 -1
  41. package/dist/mcp/modules/sessions.js +4 -4
  42. package/dist/mcp/modules/sessions.js.map +1 -1
  43. package/dist/mcp/report-utils.d.ts.map +1 -1
  44. package/dist/mcp/report-utils.js +2 -1
  45. package/dist/mcp/report-utils.js.map +1 -1
  46. package/dist/mcp/result.d.ts +13 -1
  47. package/dist/mcp/result.d.ts.map +1 -1
  48. package/dist/mcp/result.js +88 -2
  49. package/dist/mcp/result.js.map +1 -1
  50. package/dist/mcp/schemas.d.ts +1185 -20
  51. package/dist/mcp/schemas.d.ts.map +1 -1
  52. package/dist/mcp/schemas.js +182 -21
  53. package/dist/mcp/schemas.js.map +1 -1
  54. package/dist/mcp/traffic-segmentation.d.ts +82 -0
  55. package/dist/mcp/traffic-segmentation.d.ts.map +1 -0
  56. package/dist/mcp/traffic-segmentation.js +256 -0
  57. package/dist/mcp/traffic-segmentation.js.map +1 -0
  58. package/dist/server-info.d.ts +32 -0
  59. package/dist/server-info.d.ts.map +1 -0
  60. package/dist/server-info.js +34 -0
  61. package/dist/server-info.js.map +1 -0
  62. package/dist/server.d.ts.map +1 -1
  63. package/dist/server.js +152 -31
  64. package/dist/server.js.map +1 -1
  65. package/dist/version.d.ts +1 -1
  66. package/dist/version.js +1 -1
  67. package/package.json +1 -1
  68. package/server.json +9 -4
@@ -1,4 +1,5 @@
1
1
  import type { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import type { TimeInput } from "../time.js";
2
3
  export declare function normalizeAnalyticsNumbers(value: unknown, depth?: number): unknown;
3
4
  export declare const READ_ONLY_ANNOTATIONS: {
4
5
  destructiveHint: false;
@@ -24,5 +25,16 @@ export declare const DESTRUCTIVE_ANNOTATIONS: {
24
25
  openWorldHint: true;
25
26
  readOnlyHint: false;
26
27
  };
27
- export declare function runTool<T>(operation: () => Promise<T>): Promise<CallToolResult>;
28
+ export type ToolDataStatus = "available" | "empty" | "unknown";
29
+ export interface ToolResultMetaInput {
30
+ dataStatus?: ToolDataStatus;
31
+ emptyReason?: string;
32
+ range?: {
33
+ end: TimeInput;
34
+ start: TimeInput;
35
+ };
36
+ timezone?: string;
37
+ websiteId?: string;
38
+ }
39
+ export declare function runTool<T>(operation: () => Promise<T>, meta?: ToolResultMetaInput): Promise<CallToolResult>;
28
40
  //# sourceMappingURL=result.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/mcp/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,oCAAoC,CAAC;AA6C1F,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAc5E;AAED,eAAO,MAAM,qBAAqB;;;;;CAKP,CAAC;AAE5B,eAAO,MAAM,kBAAkB;;;;;CAKJ,CAAC;AAE5B,eAAO,MAAM,kBAAkB;;;;;CAKJ,CAAC;AAE5B,eAAO,MAAM,uBAAuB;;;;;CAKT,CAAC;AAE5B,wBAAsB,OAAO,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,CAcrF"}
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/mcp/result.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAmB,MAAM,oCAAoC,CAAC;AAE1F,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AA4C5C,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,SAAI,GAAG,OAAO,CAc5E;AAED,eAAO,MAAM,qBAAqB;;;;;CAKP,CAAC;AAE5B,eAAO,MAAM,kBAAkB;;;;;CAKJ,CAAC;AAE5B,eAAO,MAAM,kBAAkB;;;;;CAKJ,CAAC;AAE5B,eAAO,MAAM,uBAAuB;;;;;CAKT,CAAC;AAE5B,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IAClC,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE;QACN,GAAG,EAAE,SAAS,CAAC;QACf,KAAK,EAAE,SAAS,CAAC;KAClB,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA2FD,wBAAsB,OAAO,CAAC,CAAC,EAC7B,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,IAAI,GAAE,mBAAwB,GAC7B,OAAO,CAAC,cAAc,CAAC,CAczB"}
@@ -76,10 +76,96 @@ export const DESTRUCTIVE_ANNOTATIONS = {
76
76
  openWorldHint: true,
77
77
  readOnlyHint: false,
78
78
  };
79
- export async function runTool(operation) {
79
+ function isRecord(value) {
80
+ return typeof value === "object" && value !== null && !Array.isArray(value);
81
+ }
82
+ function analyticsNumber(value) {
83
+ if (typeof value === "number" && Number.isFinite(value))
84
+ return value;
85
+ if (typeof value !== "string" || !NUMERIC_STRING.test(value.trim()))
86
+ return undefined;
87
+ const parsed = Number(value);
88
+ return Number.isFinite(parsed) ? parsed : undefined;
89
+ }
90
+ function explicitDataStatus(data) {
91
+ if (Array.isArray(data))
92
+ return data.length === 0 ? "empty" : "available";
93
+ if (!isRecord(data))
94
+ return data === null || data === undefined ? "empty" : "available";
95
+ if (data.dataStatus === "available" ||
96
+ data.dataStatus === "empty" ||
97
+ data.dataStatus === "unknown") {
98
+ return data.dataStatus;
99
+ }
100
+ if (data.status === "not_found")
101
+ return "empty";
102
+ if (isRecord(data.coverage)) {
103
+ const successful = analyticsNumber(data.coverage.successfulWebsites);
104
+ const failed = analyticsNumber(data.coverage.failedWebsites);
105
+ if (successful === 0)
106
+ return failed !== undefined && failed > 0 ? "unknown" : "empty";
107
+ const covered = data.coverage.checkedWebsites;
108
+ if (covered === 0)
109
+ return "empty";
110
+ }
111
+ if (Array.isArray(data.data) && typeof data.count === "number") {
112
+ return data.count === 0 ? "empty" : "available";
113
+ }
114
+ if (Array.isArray(data.items) && typeof data.totalItems === "number") {
115
+ return data.totalItems === 0 ? "empty" : "available";
116
+ }
117
+ if (Array.isArray(data.pageviews) && Array.isArray(data.sessions)) {
118
+ return data.pageviews.length === 0 && data.sessions.length === 0 ? "empty" : "available";
119
+ }
120
+ const pageviews = analyticsNumber(data.pageviews);
121
+ const visitors = analyticsNumber(data.visitors);
122
+ const visits = analyticsNumber(data.visits);
123
+ if (pageviews !== undefined && visitors !== undefined && visits !== undefined) {
124
+ return pageviews === 0 && visitors === 0 && visits === 0 ? "empty" : "available";
125
+ }
126
+ const revenueSum = analyticsNumber(data.sum);
127
+ const revenueCount = analyticsNumber(data.count);
128
+ if (revenueSum !== undefined && revenueCount !== undefined && "unique_count" in data) {
129
+ return revenueSum === 0 && revenueCount === 0 ? "empty" : "available";
130
+ }
131
+ if ("startDate" in data && "endDate" in data) {
132
+ return data.startDate == null && data.endDate == null ? "empty" : "available";
133
+ }
134
+ return "available";
135
+ }
136
+ function hasTruncation(value, depth = 0) {
137
+ if (depth > 5 || value === null || typeof value !== "object")
138
+ return false;
139
+ if (Array.isArray(value))
140
+ return value.some((item) => hasTruncation(item, depth + 1));
141
+ for (const [key, item] of Object.entries(value)) {
142
+ if (key.toLowerCase().endsWith("truncated") && item === true)
143
+ return true;
144
+ if (hasTruncation(item, depth + 1))
145
+ return true;
146
+ }
147
+ return false;
148
+ }
149
+ function resultMeta(data, input) {
150
+ const embedded = isRecord(data) ? data : undefined;
151
+ const dataStatus = input.dataStatus ?? explicitDataStatus(data) ?? "unknown";
152
+ const embeddedEmptyReason = typeof embedded?.emptyReason === "string" ? embedded.emptyReason : undefined;
153
+ const emptyReason = input.emptyReason ??
154
+ embeddedEmptyReason ??
155
+ (dataStatus === "empty" ? (input.range ? "no_data_in_range" : "no_results") : undefined);
156
+ return {
157
+ dataStatus,
158
+ ...(emptyReason ? { emptyReason } : {}),
159
+ ...(input.websiteId ? { websiteId: input.websiteId } : {}),
160
+ ...(input.range ? { requestedRange: input.range } : {}),
161
+ ...(input.timezone ? { timezone: input.timezone } : {}),
162
+ truncated: hasTruncation(data),
163
+ };
164
+ }
165
+ export async function runTool(operation, meta = {}) {
80
166
  try {
81
167
  const data = normalizeAnalyticsNumbers(await operation());
82
- const structuredContent = { data };
168
+ const structuredContent = { data, meta: resultMeta(data, meta) };
83
169
  return {
84
170
  content: [{ type: "text", text: JSON.stringify(structuredContent) }],
85
171
  structuredContent,
@@ -1 +1 @@
1
- {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/mcp/result.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/mcp/result.ts"],"names":[],"mappings":"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"}